Swing/ExpandsSelectedPaths のバックアップの現在との差分(No.10)
- category: swing folder: ExpandsSelectedPaths title: JTreeの選択されたノードを展開する tags: [JTree, TreePath] author: aterai pubdate: 2012-09-24T13:08:25+09:00 description: JTreeの選択されたノードまでのパスをすべて展開して可視状態にします。 image:
概要
JTree
の選択されたノードまでのパスをすべて展開して可視状態にします。
Screenshot
Advertisement
サンプルコード
#spandel
tree.setExpandsSelectedPaths(true);
#spanend
#spanadd
// tree.setExpandsSelectedPaths(true);
#spanend
#spanadd
JTextField textField = new JTextField("soccer");
#spanend
#spanadd
JButton button = new JButton("Select");
#spanend
#spanadd
button.addActionListener(e -> {
#spanend
String q = textField.getText().trim();
searchTree(tree1, tree1.getPathForRow(0), q);
searchTree(tree2, tree2.getPathForRow(0), q);
#spanadd
});
#spanend
#spanadd
// ...
#spanend
#spanadd
#spanend
#spanadd
private static void searchTree(JTree tree, TreePath path, String q) {
#spanend
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));
}
}
#spanadd
}
#spanend
View in GitHub: Java, Kotlin解説
上記のサンプルでは、マウスによるノード選択ではなくJTree#addSelectionPath(TreePath)
などによるノード選択が行われた場合にそのノードまでのパスを展開するかどうかをJTree#setExpandsSelectedPaths(...)
メソッドを使って切り替えるテストを行っています。
JTree#setExpandsSelectedPaths(false)
- ノード選択を変更しても親パスが閉じている場合は展開しない
JTree#setExpandsSelectedPaths(true)
- デフォルト(
JDK 1.3
から) -
Java 1.3
からのデフォルト - 選択されたノードまでのパスをすべて展開して可視化(スクロールはしない)
- デフォルト(
参考リンク
- JTree の expandsSelectedPaths 新規プロパティおよび removeDescendantSelectedPaths 新規メソッド
- JTree#setExpandsSelectedPaths(boolean) (Java Platform SE 8)
- JTreeのノードを検索する