ニンバスのルックアンドフィールのための簡単なセルレンダラーを設計します
-
19-09-2019 - |
質問
私は数JLabel
sで構成されているシンプルっぽいセルレンダラーを持っている(レンダラ自体がJPanel
を拡張)し、私はそれがニンバスのルックアンドフィールに賢明にレンダリングするために取得しようとしています。基本的に何が起こっていることは、軽くの行(ニンバスを有するように、の代替行着色)で、私の特定のセルレンダラーの両方よりはるかに暗いテーブルの背景色を(使用していることです軽く、暗い行の色)。私のレンダラでは私が行います。
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を使用していたように、これは、のスカラの表のセルレンダラーに問題があることが判明。下記の受け入れ答えは、Javaプログラムではうまく動作します。個別のご質問は、のここのに提出しました。
解決
コードのあなたの最初の部分fine.Iはあなたが別の行とそうでないtable.getBackground()のためUIManager.getColor("Table.alternateRowColor")
を使用する必要が思えば。選択された行のtable.getSelectionBackground()を使用します。だからあなたのコードは次のようになります。
if (isSelected) {
setBackground(table.getSelectionBackground());
}
else {
if ( row % 2 == 0 ) {
setBackground(UIManager.getColor("Table.alternateRowColor"));
} else {
setBackground(table.getBackground());
}
}
あなたのパネルが不透明であるとラベルが透明であることを確認することを忘れないでください。
ここでニンバスUIのデフォルトに良いのリンクは次のとおりです。 http://www.duncanjauncey.com/java/ui /uimanager/UIDefaults_Java1.6.0_11_Windows_2000_5.0_Nimbus.htmlする