簡體   English   中英

如何為JTree上的各個節點設置自定義圖標?

[英]How to set custom icons for individual nodes on a JTree?

我需要能夠為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);
    }

這行得通,只是我不想顯示子根目錄,而只顯示節點。 另外,此代碼可以使該項目在您單擊時不會突出顯示。

我不希望顯示子根目錄,而僅顯示節點。

你的實現的getTreeCellRendererComponent()應該會看到一個適當調理boolean leaf如圖所示,您可以使用參數在這里

if (o instanceof Country && leaf) { ... }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM