2009-11-02 18 views
8

JCheckboxの選択アイコンを別のアイコンに変更したいと考えています。たとえば、JCheckboxの選択されていないアイコンが無効になっているとします。どのようにしてUIManagerから選択されていないアイコンを取得できますか?ルックアンドフィールのデフォルトアイコンへのアクセス?

私は試しましたUIManager.getIcon("CheckBoxUI.disabledSelectedIcon");これは間違ったアイコンのプロパティ名ですか、それともそのリソースに到達するには間違った方法ですか?

答えて

3

AbstractButtonためのコードを見ると、setDisabledSelectedIcon介して(この場合またはJCheckBoxの)AbstractButtonの上に指定されていない限りdisabledSelectedIconは、selectedIcon由来すると思われます。この場合、UIManager.getIcon( "...")を呼び出しても、探しているオブジェクトは返されません。

EDIT:JButtonアイコンを持つことができるのと同様に、AbstractButton APIで定義されているようJCheckBoxのがiconフィールドを持つ

注意。これは、テキストの横に表示され、参照されている可能性のある「チェックされた」または「チェックされていない」ボックスアイコンとは別のイメージです。

チェック/チェック解除アイコンは、UIManager.getObject('CheckBox.icon')という1つのクラスで処理されます。サブクラスIconであり、チェック状態と未チェック状態のペイントの両方を処理します。様々なのクラスでその例を見ることができます。

+1

私は、selectedIcon、CheckBox.selectedIcon、またはCheckBoxUI.selectedIconを要求すると、すべてnullを返します。 –

+0

あなたは、標準アイコンがどのように変換されたかを調べるために、Synthパッケージを詳しく調べてくれました。ありがとう。 –

8

明らかにデフォルトでは1つもありません。少なくとも、私はそれを呼び出そうとしていません。キーはチェックボックスが含まれている場合

だけUIManager.getLookAndFeelDefaults().keys()からキーをダンプするには、以下を生成します。

CheckBox.foreground 
CheckBox.border 
CheckBox.totalInsets 
CheckBox.background 
CheckBox.disabledText 
CheckBox.margin 
CheckBox.rollover 
CheckBox.font 
CheckBox.gradient 
CheckBox.focus 
CheckBox.icon 
CheckBox.focusInputMap 

akf's answerを読んだ後、私はplaf.synthパッケージでUIManagerのコードを掘り始め、基本的に委譲呼び出しを発見しましたnull disableCheckedIcon Look&Feelクラスに標準の.iconをグレーのバージョンに変換しようとします。だから私はこれで終わった:

Icon checkedIcon = UIManager.getIcon("CheckBox.icon"); 
Icon dsiabledCheckedIcon = 
    UIManager.getLookAndFeel(). 
     getDisabledSelectedIcon(new JCheckBox(), checkedIcon); 
関連する問題