• title: JTreeで展開不可のノードを設定する tags: [JTree, TreeWillExpandListener, File] author: aterai pubdate: 2014-01-27T00:45:37+09:00 description: JTreeで特定のノードだけ展開できないように設定します。

概要

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 in GitHub: Java, Kotlin

解説

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

参考リンク

コメント