• category: swing folder: TreeSelectionPaths title: JTreeで親ノードが展開されたときに子ノードの選択状態を変更する tags: [JTree, DefaultMutableTreeNode, TreePath, TreeWillExpandListener] author: aterai pubdate: 2024-07-01T04:02:21+09:00 description: JTreeで親ノードが展開されたときにその選択状態で子ノードの選択状態も切り替えるTreeWillExpandListenerを作成します。 image: https://drive.google.com/uc?id=1gzLJzPPF-wTbpmMFjYwnqv5uXcx0iiGB

概要

JTreeで親ノードが展開されたときにその選択状態で子ノードの選択状態も切り替えるTreeWillExpandListenerを作成します。

サンプルコード

JTree tree = new JTree();
tree.addTreeWillExpandListener(new TreeWillExpandListener() {
  @Override public void treeWillExpand(TreeExpansionEvent e) {
    JTree t = (JTree) e.getSource();
    TreePath anchor = t.getAnchorSelectionPath();
    TreePath lead = t.getLeadSelectionPath();
    TreePath path = e.getPath();
    Object o = path.getLastPathComponent();
    if (o instanceof DefaultMutableTreeNode && t.isPathSelected(path)) {
      DefaultMutableTreeNode n = (DefaultMutableTreeNode) o;
      TreePath[] paths = Collections.list((Enumeration<?>) n.children())
          .stream()
          .filter(DefaultMutableTreeNode.class::isInstance)
          .map(DefaultMutableTreeNode.class::cast)
          .map(DefaultMutableTreeNode::getPath)
          .map(TreePath::new)
          .toArray(TreePath[]::new);
      t.addSelectionPaths(paths);
      t.setAnchorSelectionPath(anchor);
      t.setLeadSelectionPath(lead);
    }
  }

  @Override public void treeWillCollapse(TreeExpansionEvent e) {
    /* do nothing */
  }
});
View in GitHub: Java, Kotlin

解説

参考リンク

コメント