2011-01-09 32 views
8

Tôi đang tìm kiếm các biểu tượng khác nhau của JTree (Swing)Thay đổi biểu tượng nút JTree theo độ sâu

Tài liệu java giải thích cách thay đổi biểu tượng nếu nút là lá hay không. thực sự không phải những gì tôi đang tìm kiếm.

Đối với tôi không quan trọng nếu nút là một chiếc lá hay, tôi chỉ muốn thay đổi các biểu tượng nếu nút ở mức độ sâu thứ nhất/thứ 2/thứ 3 của ba.

Trả lời

5

Thực hiện tùy chỉnh TreeCellRenderer - sử dụng JLabel cho thành phần và đặt biểu tượng của nó theo cách bạn muốn bằng cách sử dụng dữ liệu của đối tượng được lưu trữ trong cây. Bạn có thể cần phải quấn đối tượng để lưu trữ sâu của nó, vv nếu đối tượng là nguyên thủy (String ví dụ)

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

+0

Xin cảm ơn, đó là chính xác những gì tôi muốn. – Soulou

8

Là một thay thế cho một phong tục TreeCellRenderer, bạn có thể thay thế các giá trị mặc định cho giao diện người dùng collapsedIconexpandedIcon:

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 chỉ đơn giản là một thực hiện các giao diện 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

Xin cảm ơn vì thùng rác đó - đã giúp tôi rất nhiều thời gian. – hamo

Các vấn đề liên quan