4

私はいくつかのsで構成されるシンプルなセルレンダラーを持っていJLabelます(レンダラー自体は拡張JPanelされます)。ニンバスのルックアンドフィールで適切にレンダリングできるようにしようとしています。基本的に、明るい行では(Nimbusには代替の行の色があるため)、特定のセルレンダラーがテーブルの背景色(明るい行と暗いの両方の色よりもはるかに暗い)を使用しています。私のレンダラーでは、次のことを行います。

if (isSelected) {
    setBackground(table.getSelectionBackground);
}
else {
    setBackground(table.getBackground);
}

このコードブロック全体をコメントアウトすると、すべての行が暗いの色になります(テーブルの背景ではなく、代替色でもありません)。何が起こっているのかさえ理解できません!上記のコードスニペットは、背景色が異なるセルをどのように生成しますか?table.getBackgroundメソッドを呼び出すたびに色が変わりますか?

このコードスニペットを使用してみました:

Color alternateColor = sun.swing.DefaultLookup.getColor(
                         peer, 
                         peer.getUI, 
                         "Table.alternateRowColor");
if (alternateColor != null && row % 2 == 0)
    setBackground(alternateColor);

これはDefaultTableCellRendererクラスにあります。そして、それはまったく影響を与えていないようです。誰かがニンバスで動作するカスタムセルレンダラーを持っていますか?

編集:誰かが興味を持っているなら、私は実際にJavaではなくScalaを使用していたので、これはScalaテーブルセルレンダラーの問題であることが判明しました。以下の受け入れられた答えは、Javaプログラムでうまく機能します。ここに提出された別の質問。

4

1 に答える 1

4

うまくいけば最初のコードです。それ以外の場合はUIManager.getColor("Table.alternateRowColor")、代替行とtable.getBackground()を使用する必要があると思います。選択した行には、table.getSelectionBackground()を使用します。したがって、コードは次のようになります。

if (isSelected) {
    setBackground(table.getSelectionBackground());
}
else {
    if ( row % 2 == 0 ) {
       setBackground(UIManager.getColor("Table.alternateRowColor"));
    } else { 
       setBackground(table.getBackground());
    }
}

パネルが不透明で、ラベルが透明であることを確認することを忘れないでください。

NimbusUIのデフォルトへの適切なリンクは次のとおりです 。http ://www.duncanjauncey.com/java/ui/uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.html

于 2009-08-24T19:10:31.567 に答える