2010-02-23 7 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.