JTreeで葉ノードが存在しない親ノードの描画を変更する
Total: 3899, Today: 1, Yesterday: 0
Posted by aterai at
Last-modified:
Summary
JTreeの親ノードに子として葉ノードがひとつも存在しない場合でも、フォルダアイコン表示になるよう設定します。
Screenshot

Advertisement
Source Code Examples
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.setAsksAllowsChildren(true);
View in GitHub: Java, KotlinDescription
DefaultTreeModel#setAsksAllowsChildren(false)- デフォルト
DefaultMutableTreeNodeが親ノード(DefaultMutableTreeNode#getAllowsChildren() == true)であっても子として葉ノードがひとつも存在しない場合、そのアイコンは葉ノードアイコンになるJTreeにTreeWillExpandListenerを追加し、この親ノード(葉ノードが存在しない)をマウスでクリックしてもtreeWillExpand(...)は発生しない
DefaultTreeModel#setAsksAllowsChildren(true)(チェックボックスで選択した場合)DefaultMutableTreeNodeが親ノード(DefaultMutableTreeNode#getAllowsChildren() == true)の場合、子として葉ノードが存在するかどうかにかかわらずそのアイコンは親ノードアイコンになるJTreeにTreeWillExpandListenerを追加し、この親ノード(葉ノードが存在しない)をクリックするとtreeWillExpand(...)が発生する- このタイミングで後からこの親ノードに子ノードを追加するといった処理が可能になる
Reference
- DefaultTreeModel#setAsksAllowsChildren(boolean) (Java Platform SE 8)
- DefaultTreeModel#isLeaf(...) (Java Platform SE 8)で
askAllowsChildrenとsが抜けて誤字になっている