java swing - добавить цвет в мой узел JTree - PullRequest
1 голос
/ 23 февраля 2010

Я создал следующий рендер, который отображает 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;
}    

}

Ответы [ 2 ]

1 голос
/ 23 февраля 2010

Чтобы ваш setBackground(Color.PINK) имел какой-либо видимый эффект, вы должны изменить setOpaque(false) на setOpaque(true) в своем конструкторе. Тем не менее, я поддерживаю @ предложение Джона, чтобы вы читали о рендерерах в уроках Sun.

1 голос
/ 23 февраля 2010

Лучшее место, чтобы узнать о TreeCellRenderers - из учебника (внизу страницы).

Вместо добавления renderer к BorderLayout.CENTER, вы можете просто добавить другой значок любого цвета, который вам нравится.

...