簡體   English   中英

根據深度級別更改JTree節點圖標

[英]Change JTree node icons according to the depth level

我正在尋找改變我的JTree(Swing)的不同圖標

java文檔解釋了如果節點是否為葉子,如何更改圖標,但這實際上不是我正在搜索的內容。

對我來說,如果一個節點是一個葉子,或者我只是想在節點處於三個節點的第一/第二/第三深度級別時更改圖標。

作為自定義TreeCellRenderer的替代方法,您可以替換collapsedIconexpandedIcon的UI默認值:

Icon expanded = new TreeIcon(true, Color.red);
Icon collapsed = new TreeIcon(false, Color.blue);
UIManager.put("Tree.collapsedIcon", collapsed);
UIManager.put("Tree.expandedIcon", expanded);

TreeIcon只是Icon界面的一個實現:

class TreeIcon implements Icon {

    private static final int SIZE = 14;
    private boolean expanded;
    private Color color;

    public TreeIcon(boolean expanded, Color color) {
        this.expanded = expanded;
        this.color = color;
    }

    //@Override
    public void paintIcon(Component c, Graphics g, int x, int y) {
        Graphics2D g2d = (Graphics2D) g;
        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
        g2d.setPaint(color);
        if (expanded) {
            g2d.fillOval(x + SIZE / 4, y, SIZE / 2, SIZE);
        } else {
            g2d.fillOval(x, y + SIZE / 4, SIZE, SIZE / 2);
        }
    }

    //@Override
    public int getIconWidth() {
        return SIZE;
    }

    //@Override
    public int getIconHeight() {
        return SIZE;
    }
}

實現自定義TreeCellRenderer - 使用JLabel作為組件,並使用樹中存儲的Object數據設置其圖標。 如果對象是原始的(例如String),您可能需要包裝對象以存儲其深度等。

http://download.oracle.com/javase/7/docs/api/javax/swing/tree/TreeCellRenderer.html http://www.java2s.com/Code/Java/Swing-JFC/TreeCellRenderer.htm

暫無
暫無

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

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