2011-01-09 8 views
8

szukam zmieniając różne ikony z moim JTree (huśtawka)Zmień JTree węzeł ikony według poziomu głębokości

Dokumentacja java wyjaśnia jak zmienić ikony jeśli węzeł jest liściem, czy nie, ale to naprawdę nie to, czego szukam.

Dla mnie nie ma znaczenia, czy węzeł jest liściem, czy po prostu chcę zmienić ikony, jeśli węzeł znajduje się na pierwszym/drugim/trzecim poziomie głębokości trzech.

Odpowiedz

5

Wykonaj niestandardowe TreeCellRenderer - użyj komponentu JLabel i ustaw jego ikonę, jak chcesz, używając danych obiektu przechowywanego w drzewie. Być może trzeba owinąć obiektu do przechowywania jego głębokość, itp jeśli obiekt jest prymitywny (String na przykład)

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

+0

Bardzo dziękuję, dokładnie tego chcę. – Soulou

8

Jako alternatywę dla niestandardowych TreeCellRenderer, można zastąpić domyślne UI collapsedIcon i 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 jest po prostu implementacja interfejsu 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; 
    } 
} 
+1

Hej, dzięki za ten trashgod - właśnie pomógł mi wielki czas. – hamo