• 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

概要

概要

JTreeの選択されたノードまでのパスをすべて展開して可視状態にします。

サンプルコード

サンプルコード

#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#setExpandsSelectedPaths(false);
    • ノード選択を変更しても親パスを展開しない
  • JTree#setExpandsSelectedPaths(true);
    • デフォルト(JDK 1.3から)
    • マウスによる選択ではない、JTree#addSelectionPath(TreePath)などによるノード選択が行われた場合、選択されたノードまでのパスをすべて展開して可視化(スクロールはしない)

解説

上記のサンプルでは、マウスによるノード選択ではなくJTree#addSelectionPath(TreePath)などによるノード選択が行われた場合にそのノードまでのパスを展開するかどうかをJTree#setExpandsSelectedPaths(...)メソッドを使って切り替えるテストを行っています。

参考リンク

参考リンク

コメント

コメント