• category: swing folder: AsksAllowsChildren title: JTreeで葉ノードが存在しない親ノードの描画を変更する tags: [JTree, DefaultTreeModel, DefaultMutableTreeNode, Icon] author: aterai pubdate: 2014-09-22T00:06:58+09:00 description: JTreeの親ノードに子として葉ノードがひとつも存在しない場合でも、フォルダアイコン表示になるよう設定します。 image: https://lh6.googleusercontent.com/-vfEqezCRy2w/VB7mN-AcppI/AAAAAAAACNg/VkZLdGkiDRQ/s800/AsksAllowsChildren.png

概要

JTreeの親ノードに子として葉ノードがひとつも存在しない場合でも、フォルダアイコン表示になるよう設定します。

サンプルコード

DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
model.setAsksAllowsChildren(true);
View in GitHub: Java, Kotlin

解説

  • 左: DefaultTreeModel#setAsksAllowsChildren(false)
    • デフォルト
    • DefaultMutableTreeNodeが親ノード(DefaultMutableTreeNode#getAllowsChildren() == true)であっても子として葉ノードがひとつも存在しない場合、そのアイコンは葉ノードアイコンになる
    • JTreeTreeWillExpandListenerを追加し、この親ノード(葉ノードが存在しない)をマウスでクリックしてもtreeWillExpand(...)は発生しない
  • 右: DefaultTreeModel#setAsksAllowsChildren(true)(チェックボックスで選択した場合)
    • DefaultMutableTreeNodeが親ノード(DefaultMutableTreeNode#getAllowsChildren() == true)の場合、子として葉ノードが存在するかどうかにかかわらずそのアイコンは親ノードアイコンになる
    • JTreeTreeWillExpandListenerを追加し、この親ノード(葉ノードが存在しない)をクリックするとtreeWillExpand(...)が発生する
      • このタイミングで後からこの親ノードに子ノードを追加するといった処理が可能になる

参考リンク

コメント