Swing/InsertNodeInto のバックアップソース(No.5)
- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- バックアップ を表示
- Swing/InsertNodeInto へ行く。
- 1 (2014-03-05 (水) 18:26:57)
- 2 (2014-09-17 (水) 02:19:07)
- 3 (2014-09-29 (月) 17:57:53)
- 4 (2015-02-27 (金) 12:00:54)
- 5 (2016-12-03 (土) 18:27:28)
- 6 (2017-11-30 (木) 16:38:14)
- 7 (2018-09-18 (火) 18:46:38)
- 8 (2020-09-18 (金) 17:13:16)
- 9 (2022-05-22 (日) 08:33:25)
- 10 (2024-01-24 (水) 23:49:55)
- 11 (2025-01-03 (金) 08:57:02)
- 12 (2025-01-03 (金) 09:01:23)
- 13 (2025-01-03 (金) 09:02:38)
- 14 (2025-01-03 (金) 09:03:21)
- 15 (2025-01-03 (金) 09:04:02)
- 16 (2025-06-19 (木) 12:41:37)
- 17 (2025-06-19 (木) 12:43:47)
--- category: swing folder: InsertNodeInto title: JTreeへのノード追加をテスト tags: [JTree, DefaultTreeModel, DefaultMutableTreeNode] author: aterai pubdate: 2014-02-03T12:43:56+09:00 description: JTreeにノード追加をした場合、兄弟ノードの展開状態などがどうなるかをテストします。 image: https://lh3.googleusercontent.com/-siBaGX1oXx8/Uu8JPWZaA7I/AAAAAAAAB_Y/fzV1VSKYg9I/s800/InsertNodeInto.png --- * 概要 [#summary] `JTree`にノード追加をした場合、兄弟ノードの展開状態などがどうなるかをテストします。 #download(https://lh3.googleusercontent.com/-siBaGX1oXx8/Uu8JPWZaA7I/AAAAAAAAB_Y/fzV1VSKYg9I/s800/InsertNodeInto.png) * サンプルコード [#sourcecode] #code(link){{ DefaultTreeModel model1 = (DefaultTreeModel) tree1.getModel(); DefaultMutableTreeNode parent1 = (DefaultMutableTreeNode) model1.getRoot(); DefaultMutableTreeNode child1 = new DefaultMutableTreeNode(date); parent1.add(child1); model1.reload(parent1); tree1.scrollPathToVisible(new TreePath(child1.getPath())); DefaultTreeModel model2 = (DefaultTreeModel) tree2.getModel(); DefaultMutableTreeNode parent2 = (DefaultMutableTreeNode) model2.getRoot(); DefaultMutableTreeNode child2 = new DefaultMutableTreeNode(date); model2.insertNodeInto(child2, parent2, parent2.getChildCount()); tree2.scrollPathToVisible(new TreePath(child2.getPath())); }} * 解説 [#explanation] 上記のサンプルでは、`add`ボタンをクリックすると、左右の`JTree`のルートノードが持つ子の末尾に新規ノードを追加しています。 - 左: `p.add(c) & m.reload(p)` -- `DefaultMutableTreeNode#add(...)`メソッドを使用して、親ノードの末尾に子ノードを追加 --- 追加する子ノードが親ノードを持つ場合、その親子関係は削除される(子ノードが持つ親ノードはひとつのみ) -- `DefaultTreeModel#reload(...)`、または`DefaultTreeModel#nodeStructureChanged(DefaultMutableTreeNode)`でモデルに更新を通知 --- 兄弟ノードの展開状態などがすべて閉じた状態にリセットされてしまう - 右: `m.insertNodeInto(c, p, p.size)` -- `DefaultTreeModel#insertNodeInto(...)`メソッドを使用して、子ノードを親ノードの指定した位置に挿入 --- 内部で、`nodesWereInserted(...)`メソッドが呼び出され、適切なイベントが生成されるので、他のノードの展開状態などは維持される * 参考リンク [#reference] - [[JTreeのノード追加、削除>Swing/AddNode]] -- ポップアップメニューで任意の位置にノードを追加 - [[JScrollPane内にあるJTableなどで追加した行が可視化されるようにスクロールする>Swing/ScrollRectToVisible]] -- 追加したノードが表示されるようにスクロール * コメント [#comment] #comment #comment