Swing/AddNode のバックアップ差分(No.3)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/AddNode へ行く。
- 1 (2011-05-06 (金) 18:46:23)
- 2 (2012-09-10 (月) 11:15:43)
- 3 (2012-12-22 (土) 16:34:03)
- 4 (2012-12-26 (水) 06:03:24)
- 5 (2014-01-30 (木) 20:38:15)
- 6 (2014-09-17 (水) 02:20:45)
- 7 (2014-10-11 (土) 16:59:03)
- 8 (2014-11-12 (水) 02:05:53)
- 9 (2015-08-11 (火) 01:49:47)
- 10 (2016-06-23 (木) 12:31:28)
- 11 (2016-07-04 (月) 01:01:19)
- 12 (2017-09-27 (水) 18:59:56)
- 13 (2019-04-02 (火) 17:28:15)
- 14 (2021-01-08 (金) 13:25:23)
- 15 (2023-07-07 (金) 13:55:13)
- 16 (2024-02-25 (日) 20:51:31)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JTreeのノード追加、削除 #navi(../) #tags() RIGHT:Posted by &author(aterai); at 2011-05-02 *JTreeのノード追加、削除 [#y57e98ab] JTreeにノードを追加、削除します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(https://lh6.googleusercontent.com/_9Z4BYR88imo/Tb5bkDzXJHI/AAAAAAAAA6c/qxz0Vzwy4Ts/s800/AddNode.png) **サンプルコード [#l888db92] #code(link){{ class TreePopupMenu extends JPopupMenu { private TreePath path; public TreePopupMenu() { super(); add(new AbstractAction("add") { @Override public void actionPerformed(ActionEvent e) { JTree tree = (JTree)getInvoker(); DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); DefaultMutableTreeNode parent = (DefaultMutableTreeNode)path.getLastPathComponent(); DefaultMutableTreeNode child = new DefaultMutableTreeNode("New"); //model.insertNodeInto(child, parent, 0); parent.add(child); model.nodeStructureChanged(parent); tree.expandPath(path); } }); add(new AbstractAction("remove") { @Override public void actionPerformed(ActionEvent e) { JTree tree = (JTree)getInvoker(); DefaultTreeModel model = (DefaultTreeModel)tree.getModel(); DefaultMutableTreeNode node = (DefaultMutableTreeNode)path.getLastPathComponent(); //if(path.getParentPath()!=null) { if(!node.isRoot()) { model.removeNodeFromParent(node); } } }); } @Override public void show(Component c, int x, int y) { JTree tree = (JTree)c; TreePath[] tsp = tree.getSelectionPaths(); if(tsp!=null) { path = tree.getPathForLocation(x, y); if(path!=null && Arrays.asList(tsp).contains(path)) { super.show(c, x, y); } } } } }} **解説 [#f470d783] 上記のサンプルでは、JPopupMenuを使って、選択したノードに子ノードの追加、削除、名前変更ができます。 - 追加 -- DefaultMutableTreeNode#add(DefaultMutableTreeNode)メソッドを使ってノードを追加し、DefaultTreeModel#nodeStructureChanged(DefaultMutableTreeNode)で更新を通知 -- DefaultTreeModel#.insertNodeInto(...)メソッドを使用する方法もある -- DefaultTreeModel#insertNodeInto(...)メソッドを使用する方法もある - 削除 -- ルートノードでない場合(DefaultMutableTreeNode#isRoot()が偽)、DefaultTreeModel#removeNodeFromParent(DefaultMutableTreeNode)で削除 -名前変更 -- [[JTreeのノード編集をPopupからのみに制限する>Swing/StartEditingPopupMenu]]と同じ #code{{ model.valueForPathChanged(path, str); //もしくは、 //leaf.setUserObject(str); //model.nodeChanged(leaf); }} **参考リンク [#gb30e7d7] - [[JTreeのノード上でJPopupMenuを表示 >Swing/TreeNodePopupMenu]] - [[JTreeのノード編集をPopupからのみに制限する>Swing/StartEditingPopupMenu]] **コメント [#ad4d46ba] - example.jar, src.zip のリンク切れを修正。 -- [[aterai]] &new{2011-05-06 (金) 18:46:23}; #comment