2011-09-08 4 views
5

私はカスタムのListCellRendererを持っており、デフォルトのNimbus選択のバックラウンドカラーを使用したいと考えています。私は色を検索することができますUIManagerでデフォルトのNimbusカラーを使用するにはどうすればよいですか?

Color selectionBackground = UIManager.getColor("nimbusSelectionBackground"); 

と私はそれを印刷する場合、それはNimbus default colors上と同じ値を持っています。しかし、私がJPanelでそれを使用するとき、私は異なる灰色を取得しました。どのようにUIManagerの色を使用できますか?

setBackground(Color.RED); 

のJPanelのbackroundのが赤で示されているが、私は場合:

setBackground(selectionBackground); 

"selectionBackground" 色がが使用されていないが、グレー色私は

。背景があるべき

enter image description here

enter image description here

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.Dimension; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UIManager.LookAndFeelInfo; 

public class PanelColor { 

    public static void main(String[] args) { 

     // switch to Nimbus Look And Feel 
     for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { 
      if ("Nimbus".equals(info.getName())) { 
       try { 
        UIManager.setLookAndFeel(info.getClassName()); 
       } catch (Exception e) { e.printStackTrace(); } 
       break; 
      } 
     } 

     Color selectionBackground = UIManager.getColor("nimbusSelectionBackground"); 

     JPanel panel = new JPanel(new BorderLayout()); 
     panel.setPreferredSize(new Dimension(300,50)); 
     panel.add(new JLabel(selectionBackground.toString()), BorderLayout.NORTH); 

     // is not showing the selectionBackground color 
     panel.setBackground(selectionBackground); 

     JFrame frame = new JFrame(); 
     frame.add(panel); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.pack(); 
     frame.setVisible(true); 
    } 
} 
+0

次の質問はNimbusのお手伝いをすることができますか? - http://stackoverflow.com/questions/5840599/jbutton-background-on-nimbus-laf? –

+1

うわー、非常に奇妙です。私はコードをチェックしました:返される色はjavax.swing.plaf.ColorUIResource型です。しかし、Colorのサブクラスなので、どのように問題が発生するかわかりません。 ColorUIResourceのコードには何も特別なものはなく、UIなどの参照はありません。 Joeyが示唆したように、 'selectionBackground = new Color(selectionBackground.getRGB());'が機能します。 – toto2

答えて

4

ニンバスは明らかにその色が他の場所で使用されていることレジスト


ここで例とスクリーンショットです。私はこれも少し前に遭遇しました。私の最善の解決策は、コンポーネントを使用して新しいColorを作成して(クエリできます)、それを使用することでした。もちろん、L & Fが変更されても、その色に固執します。

私はそれがDerivedColorの全体のポイントであることを知っています.UIManagerから戻ってきます。私はより良い解決策を見つけたわけではありません。

これは、他のLFについても同様です。例えば。 GTK L & Fは喜んであなたの持っているアイコンをあなたに与えますが、自分のコントロールには描画しません。私はこのすべての部分は、スイングは恐ろしいほど複雑で、(b)いいえL & Fは実際に契約に固執しています.Nimbusでさえ、最新でクールなものですが。

+0

DerivedColorはどこに定義されていますか?あなたは[NimbusLookAndFeel]を意味しますか?getDerivedColor](http://docs.oracle.com/javase/7/docs/api/javax/swing/plaf/nimbus/NimbusLookAndFeel.html#getDerivedColor%28java.lang.String,%20float,%20float,%20float、 %20int、%20boolean%29)? – Gili

5

Nimbusは色を設定するのに「抵抗する」とは思わない。 UIManager.getColor()がColorUIResourceのインスタンスを返すため、デフォルトを上書きしていないと誤って想定しています。

ColorUIResourceは、単にUIResourceマーカーインターフェイスを実装するColorです。 Javadocによれば、L & Fsは "このインターフェースを使用してプロパティ値がオーバーライドされたかどうかを判断します"。ニンバスは、あなたがそれを上書きしていないことに気づいて、あなたが期待していない内部的な振る舞いに落ち着く背景色をチェックします。

関連する問題