1

チェックボックスを使用して 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;
}    

}

4

2 に答える 2

1

TreeCellRenderersについて学ぶのに最適な場所は、チュートリアル(ページの下部)からです。

rendererに追加する代わりにBorderLayout.CENTER、好きな色の別のアイコンを追加することができます。

于 2010-02-23T11:56:59.153 に答える
1

setBackground(Color.PINK)に見える効果を得るには、コンストラクターでをにsetOpaque(false)変更する必要があります。setOpaque(true)そうは言っても、Sun のチュートリアルでレンダラーについて読むという @John の提案に賛成です。

于 2010-02-23T12:03:43.770 に答える