2009-08-24 10 views
4

JLabel(レンダラー自体はJPanelに拡張されています)で構成されたシンプルアッシュセルレンダラーを持っていて、それをNimbusの外観で目立つようにレンダリングしようとしています感じる。基本的に何が起こっていること(ニンバスは着色代替の行を有するもの)ライター列に、私の特定のセルレンダラーは、(両方のライターよりもはるかに暗い暗い色)テーブルの背景色を使用していることです。私のレンダラでは私が行いますNimbusのルックアンドフィールのためのシンプルなセルレンダラーを設計する

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

私はこのコードのブロック全体をコメントする場合は、その後、私のすべての行が暗い行に色(ないテーブルの背景ではなく、別の色のいずれかで)です。私は何が起こっているのかを理解しているのか分からない!上記のコードスニペットは、背景色の異なるセルをどのように生成しますか?私のメソッドの呼び出しの間でtable.getBackgroundの色が変化していますか?私はこのコードのスニペットを使用してみました

DefaultTableCellRendererクラスである
Color alternateColor = sun.swing.DefaultLookup.getColor(
         peer, 
         peer.getUI, 
         "Table.alternateRowColor"); 
if (alternateColor != null && row % 2 == 0) 
    setBackground(alternateColor); 

。そして、それはまったく影響を及ぼさないようです。誰もNimbusで動作するカスタムセルレンダラを持っていますか?

EDITは:誰もが興味を持っている場合は、私が実際にスカラ座、いないのJavaを使用していたように、これは、Scalaの表のセルレンダラーに問題があることが判明しました。受け入れられた答えは、Javaプログラムでうまく動作します。別の質問hereを提出した。

答えて

4

コードのあなたの最初の部分は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

+0

はい - これは私が試したし、それが動作しませんでした正確に*何*です。しかし、実際にはJavaではなくScalaを使用していますので、Javaで簡単なテストケースを公開することにしました。ほんとありがと。残念ながら、Scalaではなぜそれがうまくいかないのか分かりません。 –

+0

私はスカラ座について多くを知らないにもかかわらず、私はそれが動作してはならない理由が表示されません。スウィングは、スカルでも、スカルです。 –

+0

これは本当に 'if(行%2 == 1){'です。 – cimnine

関連する問題