Swing/AsksAllowsChildren のバックアップの現在との差分(No.10)
- バックアップ一覧
- 差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/AsksAllowsChildren へ行く。
- 1 (2014-09-22 (月) 00:08:25)
- 2 (2014-10-25 (土) 23:40:43)
- 3 (2015-04-07 (火) 20:02:51)
- 4 (2015-07-16 (木) 19:51:35)
- 5 (2017-04-02 (日) 03:12:50)
- 6 (2017-04-04 (火) 14:12:44)
- 7 (2018-03-20 (火) 13:40:01)
- 8 (2020-03-21 (土) 03:23:19)
- 9 (2021-09-28 (火) 13:09:44)
- 10 (2022-02-16 (水) 16:43:32)
- 11 (2022-08-20 (土) 22:15:25)
- 追加された行はこの色です。
- 削除された行はこの色です。
--- 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 --- * 概要 [#summary] `JTree`の親ノードに子として葉ノードがひとつも存在しない場合でも、フォルダアイコン表示になるよう設定します。 #download(https://lh6.googleusercontent.com/-vfEqezCRy2w/VB7mN-AcppI/AAAAAAAACNg/VkZLdGkiDRQ/s800/AsksAllowsChildren.png) * サンプルコード [#sourcecode] #code(link){{ DefaultTreeModel model = (DefaultTreeModel) tree.getModel(); model.setAsksAllowsChildren(true); }} * 解説 [#explanation] - `DefaultTreeModel#setAsksAllowsChildren(false)` -- デフォルト -- `DefaultMutableTreeNode`が親ノード(`DefaultMutableTreeNode#getAllowsChildren() == true`)であっても子として葉ノードがひとつも存在しない場合、そのアイコンは葉ノードアイコンになる -- `JTree`に`TreeWillExpandListener`を追加し、この親ノード(葉ノードが存在しない)をマウスでクリックしても`treeWillExpand(...)`は発生しない - `DefaultTreeModel#setAsksAllowsChildren(true)`(チェックボックスで選択した場合) -- `DefaultMutableTreeNode`が親ノード(`DefaultMutableTreeNode#getAllowsChildren() == true`)の場合、子として葉ノードが存在するかどうかにかかわらずそのアイコンは親ノードアイコンになる -- `JTree`に`TreeWillExpandListener`を追加し、この親ノード(葉ノードが存在しない)をクリックすると`treeWillExpand(...)`が発生する --- このタイミングで後からこの親ノードに子ノードを追加するといった処理が可能になる * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/tree/DefaultTreeModel.html#setAsksAllowsChildren-boolean- DefaultTreeModel#setAsksAllowsChildren(boolean) (Java Platform SE 8)] - [https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/tree/DefaultTreeModel.html#isLeaf-java.lang.Object- DefaultTreeModel#isLeaf(...) (Java Platform SE 8)]で`askAllowsChildren`と`s`が抜けて誤字になっている -- [https://bugs.openjdk.org/browse/JDK-8037573 [JDK-8037573] Typo in DefaultTreeModel docs: askAllowsChildren instead of asksAllowsChildren - Java Bug System]で修正される予定 * コメント [#comment] #comment #comment