2010-02-23 84 views
1

我創建了一個呈現帶有複選框的JTree的以下呈示器,並且我想向不同的節點添加不同的顏色和圖標。我該怎麼做?請幫幫我。先謝謝你。java swing - 爲我的JTree節點添加顏色

class CheckTreeCellRenderer extends JPanel implements TreeCellRenderer { 
private CheckTreeSelectionModel selectionModel; 
private TreeCellRenderer delegate; 
private TristateCheckBox checkBox = new TristateCheckBox("",null,true); 
public static final State NOT_SELECTED = new State(); 
public static final State SELECTED = new State(); 
public static final State DONT_CARE = new State(); 

public CheckTreeCellRenderer(TreeCellRenderer delegate, CheckTreeSelectionModel selectionModel) { 
    this.delegate = delegate; 
    this.selectionModel = selectionModel; 
    setLayout(new BorderLayout()); 
    setOpaque(false); 
    checkBox.setState(Boolean.TRUE); 
    revalidate(); 
    checkBox.setOpaque(false); 
} 

public Component getTreeCellRendererComponent 
     (JTree tree, Object value, boolean selected, boolean expanded, 
     boolean leaf, int row, boolean hasFocus) { 

    Component renderer = delegate.getTreeCellRendererComponent 
      (tree, value, selected, expanded, leaf, row, hasFocus); 

    TreePath path = tree.getPathForRow(row); 

    if(path!=null){ 
     if(selectionModel.isPathSelected(path, true)) { 
      checkBox.setState(Boolean.TRUE); 
     } 
     else { 
      checkBox.setState 
        (selectionModel.isPartiallySelected(path) ? null : Boolean.FALSE); 
     } 
    } 
    setBackground(Color.pink); 

    removeAll(); 
    add(checkBox, BorderLayout.WEST); 
    add(renderer, BorderLayout.CENTER); 
    return this; 
}  

}

+0

我已經回答了同樣的問題很多次,我想我會通過這個。 –

+0

那麼爲什麼評論呢?相反,投票結束並引用重複的答案。至少OP可以引用重複問題。 – Adamski

+1

嗨,朋友,我很抱歉。我想我已經問過一個重複的問題。其實我不知道在哪裏尋找同樣的問題。如果它已經回答了,請告訴我在哪裏可以得到它。我請求你請幫助我。 – Nilesh

回答

1

瞭解TreeCellRenderers最好的地方是從tutorial(在頁面的底部)。

而不是將renderer添加到BorderLayout.CENTER,您可以添加一個不同的任何你喜歡的顏色的圖標。

1

爲了讓您的setBackground(Color.PINK)有任何明顯的效果,您應該在您的構造函數中將setOpaque(false)更改爲setOpaque(true)。也就是說,我第二@約翰建議你閱讀Sun教程中的渲染器。