概要

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

解説

参考リンク

コメント