Swing/SearchBox のバックアップ差分(No.7)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/SearchBox へ行く。
- 1 (2009-03-19 (木) 11:26:38)
- 2 (2010-01-20 (水) 00:38:18)
- 3 (2010-01-20 (水) 11:15:33)
- 4 (2010-10-12 (火) 13:18:56)
- 5 (2010-10-18 (月) 14:51:09)
- 6 (2010-11-18 (木) 01:39:29)
- 7 (2011-07-01 (金) 15:19:53)
- 8 (2011-09-15 (木) 21:32:23)
- 9 (2012-01-16 (月) 15:31:53)
- 10 (2013-01-12 (土) 21:51:12)
- 11 (2013-08-23 (金) 15:05:48)
- 12 (2013-09-05 (木) 00:38:13)
- 13 (2014-08-11 (月) 18:59:50)
- 14 (2014-08-11 (月) 20:33:21)
- 15 (2014-10-10 (金) 01:36:36)
- 16 (2014-11-25 (火) 03:03:31)
- 17 (2015-11-20 (金) 15:17:24)
- 18 (2016-05-31 (火) 14:30:14)
- 19 (2017-08-17 (木) 14:26:47)
- 20 (2018-03-30 (金) 16:07:19)
- 21 (2018-09-25 (火) 15:39:04)
- 22 (2020-09-26 (土) 17:32:50)
- 23 (2022-05-29 (日) 11:44:28)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JTreeのノードを検索する #navi(../) RIGHT:Posted by [[terai]] at 2009-01-12 RIGHT:Posted by [[aterai]] at 2009-01-12 *JTreeのノードを検索する [#l1857467] JTreeを検索して、一致するアイテムを選択します。 -&jnlp; -&jar; -&zip; #screenshot //#screenshot #ref(http://lh5.ggpht.com/_9Z4BYR88imo/TQTSs3gdysI/AAAAAAAAAjM/r_j-mrb83aU/s800/SearchBox.png) **サンプルコード [#e7516ef5] #code{{ private static void searchTree(JTree tree, TreePath path, String q) { TreeNode node = (TreeNode)path.getLastPathComponent(); if(node==null) return; if(node.toString().equals(q)) tree.addSelectionPath(path); if(!node.isLeaf() && node.getChildCount()>=0) { Enumeration e = node.children(); while(e.hasMoreElements()) searchTree(tree, path.pathByAddingChild(e.nextElement()), q); } } }} **解説 [#h95e65f3] 上記のサンプルでは、選択されたJTreeのノード以下に、検索文字列と一致するノードがあれば、JTree#addSelectionPath(TreePath)メソッドで選択するようになっています。 ---- [[Swing - how to get everything in DefaultTreeNode>http://forums.sun.com/thread.jspa?messageID=10584331]]のAndre_Uhresさんの投稿のように、TreeModelを使って検索する方法もあります。 [http://forums.sun.com/thread.jspa?messageID=10584331 Swing - how to get everything in DefaultTreeNode]のAndre_Uhresさんの投稿のように、TreeModelを使って検索する方法もあります。 #code{{ //<blockquote cite="http://forums.sun.com/thread.jspa?messageID=10584331#10584331"> public void traverse(JTree tree) { TreeModel model = tree.getModel(); Object root; if(model != null) { root = model.getRoot(); walk(model,root); }else{ System.out.println("Tree is empty."); } } protected void walk(TreeModel model, Object o) { int cc = model.getChildCount(o); for(int i=0; i < cc; i++) { DefaultMutableTreeNode child = (DefaultMutableTreeNode) model.getChild(o, i); if(model.isLeaf(child)) { System.out.println(child); }else{ System.out.println(child); walk(model, child); } } } //<blockquote /> }} ---- 以下は、DefaultMutableTreeNode#depthFirstEnumeration()を使用して、"bananas"を検索しています。 #code{{ TreeModel model = tree.getModel(); DefaultMutableTreeNode root = (DefaultMutableTreeNode)model.getRoot(); Enumeration depth = root.depthFirstEnumeration(); while(depth.hasMoreElements()) { DefaultMutableTreeNode node = (DefaultMutableTreeNode)depth.nextElement(); if(node!=null && "bananas".equals(node.toString())) { TreePath path = new TreePath(node.getPath()); tree.setSelectionPath(path); tree.scrollPathToVisible(path); return; } } }} **参考リンク [#vd69b823] -[[JTreeのノードを展開・折り畳み>Swing/ExpandAllNodes]] -[[Swing - how to get everything in DefaultTreeNode>http://forums.sun.com/thread.jspa?messageID=10584331]] -[http://forums.sun.com/thread.jspa?messageID=10584331 Swing - how to get everything in DefaultTreeNode] -[[JTreeで条件に一致するノードを検索しハイライト>Swing/TreeNodeHighlightSearch]] **コメント [#a7ae0491] - ソースを拝見させていただきましたが, 要素の挿入の箇所がさっぱりわかりません... -- [[taji]] &new{2010-01-20 (水) 00:38:18}; - 途中で切れてしまい失礼しました. できればどこで挿入しているのか教えていただけませんか? -- [[taji]] &new{2010-01-20 (水) 00:39:44}; -- JTreeのデフォルトコンストラクタがサンプルモデルを持つ JTree を返しているので、%JAVA_HOME%\src.zipを展開して、JTree()を見るのがよいと思います。そこからたどって行けばprotected static TreeModel getDefaultTreeModel()の中で、TreeModelを作って要素を挿入している様子が分かります。 -- [[terai]] &new{2010-01-20 (水) 11:15:33}; -- JTreeのデフォルトコンストラクタがサンプルモデルを持つ JTree を返しているので、%JAVA_HOME%\src.zipを展開して、JTree()を見るのがよいと思います。そこからたどって行けばprotected static TreeModel getDefaultTreeModel()の中で、TreeModelを作って要素を挿入している様子が分かります。 -- [[aterai]] &new{2010-01-20 (水) 11:15:33}; - JTree#getNextMatch(...)は、展開されているノードのみ検索する? -- [[aterai]] &new{2010-11-18 (木) 01:40:07}; #comment