• category: swing folder: PreventToggleClickNodeExpanding title: JTreeで特定のノードをマウスクリックした場合のみ展開不可に設定する tags: [JTree] author: aterai pubdate: 2019-11-25T12:42:39+09:00 description: JTreeで特定の親ノードをマウスクリックした場合のみ展開・折り畳みを不可に設定します。 image: https://drive.google.com/uc?id=1cFSEIvHIrn8nmolJt9cWlyVen4iEpBjV

概要

JTreeで特定の親ノードをマウスクリックした場合のみ展開・折り畳みを不可に設定します。

サンプルコード

JTree tree1 = new JTree(treeModel);
tree1.addTreeWillExpandListener(new FileExpandVetoListener());

JTree tree2 = new JTree(treeModel);
tree2.setUI(new MetalTreeUI() {
  @Override protected boolean isToggleEvent(MouseEvent e) {
    File file = getFileFromTreePath(tree.getSelectionPath());
    return file == null && super.isToggleEvent(e);
  }
});
View in GitHub: Java, Kotlin

解説

上記のサンプルでは起動ディレクトリ以下のファイルをJTreeで一覧表示し、ファイル名がMainPanel.javaのノードのみマウスクリックで展開不可になるよう設定しています。

  • 左: TreeWillExpandListener
    • JTreeで展開不可のノードを設定する
    • TreeWillExpandListenerを設定して特定のノードの展開をすべて不可に設定
    • キー入力、ノードのマウスクリック、展開(+)・折り畳み(-)アイコンのマウスクリック、ポップアップメニューからの展開などのすべてが不可になる
  • 右: override MetalTreeUI#isToggleEvent(...)
    • MetalTreeUI#isToggleEvent(...)メソッドをオーバーライドして特定ノードのマウスクリックのみ展開を不可に設定
    • キー入力、展開(+)・折り畳み(-)アイコンのマウスクリックであれば展開可能
    • すべてのノードをキー入力、展開(+)・折り畳み(-)アイコンのマウスクリックで展開可能、ノードのマウスクリックのみ展開を不可にする場合はtree.setToggleClickCount(0);が使用可能

参考リンク

コメント