Swing/ExpandsSelectedPaths の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/ExpandsSelectedPaths へ行く。
- Swing/ExpandsSelectedPaths の差分を削除
--- category: swing folder: ExpandsSelectedPaths title: JTreeの選択されたノードを展開する tags: [JTree, TreePath] author: aterai pubdate: 2012-09-24T13:08:25+09:00 description: JTreeの選択されたノードまでのパスをすべて展開して可視状態にします。 image: https://lh6.googleusercontent.com/-sOsnOftT8xE/UF_b7dSxzQI/AAAAAAAABS0/i_xYkTfxbZg/s800/ExpandsSelectedPaths.png --- * 概要 [#summary] `JTree`の選択されたノードまでのパスをすべて展開して可視状態にします。 #download(https://lh6.googleusercontent.com/-sOsnOftT8xE/UF_b7dSxzQI/AAAAAAAABS0/i_xYkTfxbZg/s800/ExpandsSelectedPaths.png) * サンプルコード [#sourcecode] #code(link){{ tree.setExpandsSelectedPaths(true); // tree.setExpandsSelectedPaths(true); JTextField textField = new JTextField("soccer"); JButton button = new JButton("Select"); button.addActionListener(e -> { String q = textField.getText().trim(); searchTree(tree1, tree1.getPathForRow(0), q); searchTree(tree2, tree2.getPathForRow(0), q); }); // ... private static void searchTree(JTree tree, TreePath path, String q) { Object o = path.getLastPathComponent(); if (o instanceof TreeNode) { TreeNode node = (TreeNode) o; if (node.toString().equals(q)) { tree.addSelectionPath(path); } if (!node.isLeaf()) { // Java 9: Collections.list(node.children()) Collections.list((Enumeration<?>) node.children()) .forEach(n -> searchTree(tree, path.pathByAddingChild(n), q)); } } } }} * 解説 [#explanation] 上記のサンプルでは、マウスによるノード選択ではなく`JTree#addSelectionPath(TreePath)`などによるノード選択が行われた場合にそのノードまでのパスを展開するかどうかを`JTree#setExpandsSelectedPaths(...)`メソッドを使って切り替えるテストを行っています。 - `JTree#setExpandsSelectedPaths(false)` -- ノード選択を変更しても親パスが閉じている場合は展開しない - `JTree#setExpandsSelectedPaths(true)` -- `JDK 1.3`からのデフォルト -- `Java 1.3`からのデフォルト -- 選択されたノードまでのパスをすべて展開して可視化(スクロールはしない) * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/1.3/guide/swing/JTreeChanges.html JTree の expandsSelectedPaths 新規プロパティおよび removeDescendantSelectedPaths 新規メソッド] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/JTree.html#setExpandsSelectedPaths-boolean- JTree#setExpandsSelectedPaths(boolean) (Java Platform SE 8)] - [[JTreeのノードを検索する>Swing/SearchBox]] * コメント [#comment] #comment #comment