0

JTree の個々のノードのアイコンを設定できるようにする必要があります。たとえば、JTree があり、ノードが何であるかを表すのに役立つカスタム アイコンを持つノードが必要です。

  • (レンチアイコン) 設定
  • (バグアイコン) デバッグ
  • (にこやかな顔のアイコン) 楽しいもの

...

等々。私はいくつかの情報源を試してみましたが、ある程度機能するものはありましたが、ツリーイベントが台無しになり、葉巻はありません. 前もって感謝します。

誰かが要求したように:

class Country {
    private String name;
    private String flagIcon;

    Country(String name, String flagIcon) {
        this.name = name;
        this.flagIcon = flagIcon;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getFlagIcon() {
        return flagIcon;
    }

    public void setFlagIcon(String flagIcon) {
        this.flagIcon = flagIcon;
    }
}

class CountryTreeCellRenderer implements TreeCellRenderer {
    private JLabel label;

    CountryTreeCellRenderer() {
        label = new JLabel();
    }

    public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
        Object o = ((DefaultMutableTreeNode) value).getUserObject();
        if (o instanceof Country) {
            Country country = (Country) o;
            label.setIcon(new ImageIcon(country.getFlagIcon()));
            label.setText(country.getName());
        } else {
            label.setIcon(null);
            label.setText("" + value);
        }
        return label;
    }
}

次に、初期化された場所:

DefaultMutableTreeNode root = new DefaultMutableTreeNode("Countries");
    DefaultMutableTreeNode asia = new DefaultMutableTreeNode("General");
    Country[] countries = new Country[]{
            new Country("Properties", "src/biz/jabaar/lotus/sf/icons/page_white_edit.png"),
            new Country("Network", "src/biz/jabaar/lotus/sf/icons/drive_network.png"),
    };

    for (Country country : countries) {
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(country);
        asia.add(node);
    }

そして、これは機能します。サブルートを表示したくないだけで、ノードだけを表示したいだけです。また、このコードは、アイテムをクリックしても強調表示されないようにします。

4

1 に答える 1

1

サブルートを表示したくありません。ノードだけを表示します。

の実装では、ここに示すように使用できるgetTreeCellRendererComponent()適切に調整されたパラメーターが表示されます。boolean leaf

if (o instanceof Country && leaf) { ... }
于 2013-03-13T03:45:28.390 に答える