9 Stimmen

JTree-Knotensymbole entsprechend der Tiefenstufe ändern

Ich bin auf der Suche nach der Änderung der verschiedenen Symbole meiner JTree (Swing)

Die Java-Dokumentation erklärt, wie man Symbole ändern kann, wenn ein Knoten ein Blatt ist oder nicht, aber das ist wirklich nicht das, was ich suche.

Für mich spielt es keine Rolle, ob ein Knoten ein Blatt ist, ich möchte nur die Symbole ändern, wenn sich der Knoten in der ersten, zweiten oder dritten der drei Tiefenstufen befindet.

9voto

trashgod Punkte 199887

Als Alternative zu einer benutzerdefinierten TreeCellRenderer können Sie die UI-Standardwerte für collapsedIcon y expandedIcon :

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 ist einfach eine Implementierung der Icon Schnittstelle:

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;
    }
}

5voto

ron Punkte 9194

Implementierung einer benutzerdefinierten TreeCellRenderer - verwenden eine JLabel für die Komponente, und legen Sie ihr Symbol nach Belieben fest, indem Sie die Daten des im Baum gespeicherten Objekts verwenden. Möglicherweise müssen Sie das Objekt umhüllen, um seine Tiefe usw. zu speichern, wenn das Objekt primitiv ist (z. B. String)

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X