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

Advertisement
Source Code Examples
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, KotlinDescription
上記のサンプルでは起動ディレクトリ以下のファイルをJTreeで一覧表示し、ファイル名がMainPanel.javaのノードのみマウスクリックで展開不可になるよう設定しています。
- 左:
TreeWillExpandListener- JTreeで展開不可のノードを設定する
TreeWillExpandListenerを設定して特定のノードの展開をすべて不可に設定- キー入力、ノードのマウスクリック、展開(
+)・折り畳み(-)アイコンのマウスクリック、ポップアップメニューからの展開などのすべてが不可になる
- 右:
override MetalTreeUI#isToggleEvent(...)MetalTreeUI#isToggleEvent(...)メソッドをオーバーライドして特定ノードのマウスクリックのみ展開を不可に設定- キー入力、展開(
+)・折り畳み(-)アイコンのマウスクリックであれば展開可能 - すべてのノードをキー入力、展開(
+)・折り畳み(-)アイコンのマウスクリックで展開可能、ノードのマウスクリックのみ展開を不可にする場合はtree.setToggleClickCount(0);が使用可能