我想要将JCheckbox的选中图标更改为不同的图标,例如JCheckbox的禁用选中图标。如何从UIManager获取禁用选中图标?
我尝试使用UIManager.getIcon("CheckBoxUI.disabledSelectedIcon");
。这是错误的图标属性名称还是获取该资源的错误方式?
我想要将JCheckbox的选中图标更改为不同的图标,例如JCheckbox的禁用选中图标。如何从UIManager获取禁用选中图标?
我尝试使用UIManager.getIcon("CheckBoxUI.disabledSelectedIcon");
。这是错误的图标属性名称还是获取该资源的错误方式?
显然默认情况下没有这个功能。至少在我尝试调用时没有。
如果键包含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的答案后,我开始研究plaf.synth包中UIManager代码,并找到了一些调用,这些调用实质上将null disableCheckedIcon委托给外观类来尝试将标准.icon转换为灰色版本。因此,最终我得到了以下内容:
Icon checkedIcon = UIManager.getIcon("CheckBox.icon");
Icon dsiabledCheckedIcon =
UIManager.getLookAndFeel().
getDisabledSelectedIcon(new JCheckBox(), checkedIcon);
浏览AbstractButton
代码后,看起来disabledSelectedIcon
是从selectedIcon
派生的,除非在AbstractButton(或在这种情况下为JCheckBox)中通过setDisabledSelectedIcon
指定。因此,调用UIManager.getIcon("...")将不会返回您要查找的对象。
编辑:
请注意,JCheckBox具有如JButton
一样定义的icon
字段,它是显示在文本旁边的图像,与您可能正在引用的“已选中”或“未选中”框图标分开。
勾选/取消勾选图标由单个类处理,可以在UIManager.getObject('CheckBox.icon')
中找到。它是Icon
的子类,并处理其已选和未选状态的绘制。您可以在各种[L&F name]IconFactory
类中看到它的示例。