• category: swing folder: TreeCellEditorNodeIcon title: JTreeのノードを編集中に表示するアイコンを変更する tags: [JTree, Icon, DefaultTreeCellEditor, DefaultTreeCellRenderer] author: aterai pubdate: 2016-12-05T02:23:19+09:00 description: JTreeのノードが編集開始されたときに表示するノードアイコンを変更します。 image: https://drive.google.com/uc?export=view&id=1bjb1mUD5NQcTmyA9lBFKu1Zu5gPs9po_sw

概要

JTreeのノードが編集開始されたときに表示するノードアイコンを変更します。

サンプルコード

JTree tree2 = new JTree();
tree2.setEditable(true);
DefaultTreeCellRenderer renderer2 = new DefaultTreeCellRenderer();
renderer2.setOpenIcon(icon);
renderer2.setClosedIcon(icon);
renderer2.setLeafIcon(icon);
tree2.setCellRenderer(renderer2);

JTree tree3 = new JTree();
tree3.setEditable(true);
DefaultTreeCellRenderer renderer3 = new DefaultTreeCellRenderer();
renderer3.setOpenIcon(new ColorIcon(Color.GREEN));
renderer3.setClosedIcon(new ColorIcon(Color.BLUE));
renderer3.setLeafIcon(new ColorIcon(Color.ORANGE));
tree3.setCellRenderer(renderer2);
tree3.setCellEditor(new DefaultTreeCellEditor(tree3, renderer3));
View in GitHub: Java, Kotlin

解説

    • DefaultTreeCellRenderer#getTreeCellRendererComponent(...)をオーバーライドし、内部でsetIcon(icon)メソッドを使用してノードアイコンを変更
    • ノード編集中はデフォルトのアイコンが表示される
    • DefaultTreeCellRenderer#setOpenIcon(...)DefaultTreeCellRenderer#setClosedIcon(...)DefaultTreeCellRenderer#setLeafIcon(...)メソッドを使用してアイコンを変更したTreeCellRendererJTree#setCellRenderer(...)メソッドで設定
    • ノード編集中はDefaultTreeCellEditorが上記のTreeCellRendererからアイコンを取得するため、編集中も同じアイコンが表示される
    • DefaultTreeCellRenderer#setOpenIcon(...)DefaultTreeCellRenderer#setClosedIcon(...)DefaultTreeCellRenderer#setLeafIcon(...)メソッドを使用してアイコンを変更したTreeCellRendererJTree#setCellRenderer(...)メソッドで設定
    • DefaultTreeCellEditorで使用するTreeCellRendererを表示用とは異なるアイコンを設定し、JTree#setCellEditor(...)メソッドで設定ているため、編集中は異なるアイコンが表示される

参考リンク

コメント