概要

JTreeで特定のノードだけ展開できないように設定します。

サンプルコード

class DirectoryExpandVetoListener implements TreeWillExpandListener {
  @Override public void treeWillExpand(TreeExpansionEvent e)
        throws ExpandVetoException {
    TreePath path = e.getPath();
    Object o = path.getLastPathComponent();
    if (o instanceof DefaultMutableTreeNode) {
      DefaultMutableTreeNode node = (DefaultMutableTreeNode) o;
      File file = (File) node.getUserObject();
      String title = file.getName();
      System.out.println(title);
      if (title.startsWith(".")) {
        throw new ExpandVetoException(e, "Tree expansion cancelled");
      }
    }
  }
  @Override public void treeWillCollapse(TreeExpansionEvent e)
        throws ExpandVetoException {}
}
view all

解説

  • TreeWillExpandListenerを実装し、treeWillExpand(...)メソッド内で、ノード(File)の名前がドットで始まる場合、ExpandVetoExceptionを投げてマウスクリックなどによる展開をキャンセル
    • これらのノードは展開は不可だが、選択自体は可能
  • 名前がドットで始まる場合、DefaultTreeCellRenderer#getTreeCellRendererComponent(...)内で、そのノードをsetEnabled(false)で無効状態に変更して描画

参考リンク

コメント