0

カスタムTreeCellRendererに、ルート、ノード、リーフを異なる色で表示したいと思います。

これは私のコードです:

tree.setCellRenderer(new DefaultTreeCellRenderer() {

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

            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;

            if (node.isRoot()) {
                super.setBackground(Color.red);
            } else if (node.getChildCount() > 0) {
                super.setBackground(Color.yellow);
            } else if (leaf) {
                super.setBackground(Color.green);
            }
            return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);

        }

    }
});

残念ながら、選択したノードのみが色を変更します。

私は何が間違っているのですか?助けを求めるTIA。

//更新:コードを関連付けましたが、役に立ちませんでした。

4

2 に答える 2

5

おそらくあなたは、その名前が示すように、選択された状態の色を設定するだけであるという意味であり、そうではsetBackgroundColor()ありません。setBackgroundSelectionColor()

あなたの使用super非常に流暢です[この機知に富んだ発言のクレジットはCarlSmotriczに行きます]。

于 2009-11-17T19:07:56.787 に答える
0

色を設定する(そして最終的にこれを返す)前に、なぜsuper.getTreeCellRendererComponentを呼び出すのですか?最初に色を設定して、super.getTreeCellRendererComponentが返すものを返すようにしてください

于 2009-11-17T19:08:50.430 に答える