-3

を作成しましたJTree。特定のノードのアイコンを変更する必要があります。閉じsetIconたノードと開いたノード、およびリーフノードを使用できますが、で指定したノードのアイコンを設定する必要がありますJTree。これに光を当ててください。

4

1 に答える 1

3

デフォルトのアイコンを変更する方法を知っている場合は、これがTreeCellRendererで発生することを知っています。DefaultTreeCellRendererよりも高度なアイコンの決定機能を備えた独自のTreeCellRendererを実装するだけです。

このようなもの :

public class MyTreeCellRenderer implements TreeCellRenderer {

    private final DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();
    private final  Icon specialIcon;

    public MyTreeCellRenderer(Icon specialIcon) {
        this.specialIcon = specialIcon;
    }

    @Override
    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
        if (needsSpecialIcon(tree, value, selected, expanded, leaf, row, hasFocus)) {
            defaultRenderer.setIcon(specialIcon);
        }
        return defaultRenderer;
    }

    private boolean needsSpecialIcon(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        // check condition for special icon here
        return false;
    }
}

これは基本的にデフォルトの動作をDefaultTreeCellRendererに委任しますが、特別な条件がtrueの場合はアイコンをオーバーライドします。

于 2012-12-09T17:35:21.067 に答える