Swing/InsertNodeInto のバックアップ差分(No.1)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/InsertNodeInto へ行く。
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JTreeへのノード追加をテスト #navi(../) #tags(JTree, DefaultTreeModel, DefaultMutableTreeNode) RIGHT:Posted by &author(aterai); at 2014-02-03 * JTreeへのノード追加をテスト [#f0c6823c] JTreeにノード追加をした場合、兄弟ノードの展開状態などがどうなるかをテストします。 #download #ref(https://lh3.googleusercontent.com/-siBaGX1oXx8/Uu8JPWZaA7I/AAAAAAAAB_Y/fzV1VSKYg9I/s800/InsertNodeInto.png) ** サンプルコード [#iabe3118] #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())); }} ** 解説 [#db8ac068] 上記のサンプルでは、`add`ボタンをクリックすると、左右の`JTree`のルートノードが持つ子の末尾に新規ノードを追加しています。 - 左: `p.add(c) & m.reload(p)` -- `DefaultMutableTreeNode#add(...)`メソッドを使用して、親ノードの末尾に子ノードを追加 --- 追加する子ノードが親ノードを持つ場合は、そこから削除される -- `DefaultTreeModel#reload(...)`、または`DefaultTreeModel#nodeStructureChanged(DefaultMutableTreeNode)`でモデルに更新を通知 --- 兄弟ノードの展開状態などがすべて閉じた状態にリセットされてしまう - 右: `m.insertNodeInto(c, p, p.size)` -- `DefaultTreeModel#insertNodeInto(...)`メソッドを使用して、子ノードを親ノードの指定した位置に挿入 --- 内部で、`nodesWereInserted(...)`メソッドが呼び出され、適切なイベントが生成されるので、他のノードの展開状態などは維持される ** 参考リンク [#b66ff81a] - [JTreeのノード追加、削除>Swing/AddNode] -- ポップアップメニューで任意の位置にノードを追加 - [[JScrollPane内にあるJTableなどで追加した行が可視化されるようにスクロールする>Swing/ScrollRectToVisible]] -- 追加したノードが表示されるようにスクロール ** コメント [#t8898182] #comment