我想将JCheckbox的所选图标更改为其他图标,例如,JCheckbox的已禁用所选图标。如何从UIManager获取禁用的选定图标?
我试过UIManager.getIcon("CheckBoxUI.disabledSelectedIcon");
这是错误的图标属性名称还是错误的方式来获取该资源?
答案 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
类中查看它的示例。