Swing/InsertNodeInto のバックアップの現在との差分(No.7)
- category: swing folder: InsertNodeInto title: JTreeへのノード追加をテスト tags: [JTree, DefaultTreeModel, DefaultMutableTreeNode] author: aterai pubdate: 2014-02-03T12:43:56+09:00 description: JTreeにノード追加をした場合、兄弟ノードの展開状態などがどうなるかをテストします。 image:
概要
JTree
にノード追加をした場合、兄弟ノードの展開状態などがどうなるかをテストします。
Screenshot
Advertisement
サンプルコード
DefaultTreeModel model1 = (DefaultTreeModel) tree1.getModel();
DefaultMutableTreeNode parent1 = (DefaultMutableTreeNode) model1.getRoot();
#spandel
DefaultMutableTreeNode child1 = new DefaultMutableTreeNode(date);
#spanend
#spanadd
DefaultMutableTreeNode child1 = new DefaultMutableTreeNode(date);
#spanend
parent1.add(child1);
model1.reload(parent1);
tree1.scrollPathToVisible(new TreePath(child1.getPath()));
DefaultTreeModel model2 = (DefaultTreeModel) tree2.getModel();
DefaultMutableTreeNode parent2 = (DefaultMutableTreeNode) model2.getRoot();
#spandel
DefaultMutableTreeNode child2 = new DefaultMutableTreeNode(date);
#spanend
#spanadd
DefaultMutableTreeNode child2 = new DefaultMutableTreeNode(date);
#spanend
model2.insertNodeInto(child2, parent2, parent2.getChildCount());
tree2.scrollPathToVisible(new TreePath(child2.getPath()));
View in GitHub: Java, Kotlin解説
上記のサンプルでは、add
ボタンのクリックで左右のJTree
のルートノードの子ノード末尾に新規ノードを追加し、それぞれの描画などをテストすることができます。
上記のサンプルでは、add
ボタンのクリックで左右のJTree
のルートノードの子ノード末尾に新規ノードを追加し、それぞれの描画などをテストしています。
- 左:
p.add(c) & m.reload(p)
-
DefaultMutableTreeNode#add(...)
メソッドを使用して、親ノードの末尾に子ノードを追加
-
-
p.add(c) & m.reload(p)
-
DefaultMutableTreeNode#add(...)
メソッドを使用して親ノードの末尾に子ノードを追加- 追加する子ノードが親ノードを持つ場合、その親子関係は削除される(子ノードが持つ親ノードはひとつのみ)
DefaultTreeModel#reload(...)
、またはDefaultTreeModel#nodeStructureChanged(DefaultMutableTreeNode)
でモデルに更新を通知- 兄弟ノードの展開状態などがすべて閉じた状態にリセットされてしまう
-
- 右:
m.insertNodeInto(c, p, p.size)
-
DefaultTreeModel#insertNodeInto(...)
メソッドを使用して、子ノードを親ノードの指定した位置に挿入- 内部で、
nodesWereInserted(...)
メソッドが呼び出され、適切なイベントが生成されるので、他のノードの展開状態などは維持される
- 内部で、
-
-
m.insertNodeInto(c, p, p.size)
-
DefaultTreeModel#insertNodeInto(...)
メソッドを使用して子ノードを親ノードの指定した位置に挿入- 内部で
nodesWereInserted(...)
メソッドが呼び出されて適切なイベントが生成されるので、他ノードの展開状態などは維持される
- 内部で
-
参考リンク
- JTreeのノード追加、削除
- ポップアップメニューで任意の位置にノードを追加
- JScrollPane内にあるJTableなどで追加した行が可視化されるようにスクロールする
- 追加したノードが表示されるようにスクロール