访问外观默认图标?

时间:2009-11-02 21:10:45

标签: java swing look-and-feel

我想将JCheckbox的所选图标更改为其他图标,例如,JCheckbox的已禁用所选图标。如何从UIManager获取禁用的选定图标?

我试过UIManager.getIcon("CheckBoxUI.disabledSelectedIcon");这是错误的图标属性名称还是错误的方式来获取该资源?

2 个答案:

答案 0 :(得分:8)

显然默认情况下没有一个。至少,不是在我试图打电话的时候。

如果密钥包含CheckBox:

,只需从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委托给外观类的调用,以尝试将标准.icon转换为灰色版。所以我最终得到了这个:

Icon checkedIcon = UIManager.getIcon("CheckBox.icon");
Icon dsiabledCheckedIcon = 
   UIManager.getLookAndFeel().
      getDisabledSelectedIcon(new JCheckBox(), checkedIcon);

答案 1 :(得分:3)

查看AbstractButton的代码,似乎disabledSelectedIcon派生自selectedIcon,除非在AbstractButton(或本案例中为JCheckBox)中通过{{ 1}}。在这种情况下,调用UIManager.getIcon(“...”)将不会返回您要查找的对象。

编辑:

请注意,JCheckBox在setDisabledSelectedIcon API中定义了icon字段,就像AbstractButton可以有一个图标一样。它是一个显示在文本旁边的图像,与您可能引用的“已检查”或“未选中”框图标分开。

检查/取消选中图标由单个类处理,与JButton一起找到。它是一个子类UIManager.getObject('CheckBox.icon'),并处理其已检查和未检查状态的绘制。您可以在各种Icon类中查看它的示例。