我想将 JCheckbox 的选定图标更改为不同的图标,例如 JCheckbox 的禁用选定图标。如何从 UIManager 中获取禁用的选定图标?
我试过UIManager.getIcon("CheckBoxUI.disabledSelectedIcon");
是错误的图标属性名称还是获取该资源的错误方式?
我想将 JCheckbox 的选定图标更改为不同的图标,例如 JCheckbox 的禁用选定图标。如何从 UIManager 中获取禁用的选定图标?
我试过UIManager.getIcon("CheckBoxUI.disabledSelectedIcon");
是错误的图标属性名称还是获取该资源的错误方式?
显然,默认情况下没有一个。至少,不是当我试图调用它时。
如果密钥包含 CheckBox,则只需转储密钥 fromUIManager.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 具有APIicon
中定义的字段AbstractButton
,就像 aJButton
可以具有图标一样。它是显示在文本旁边的图像,与您可能提到的“选中”或“未选中”框图标分开。
选中/取消选中图标由单个类处理,使用UIManager.getObject('CheckBox.icon')
. 它是一个子类Icon
,并处理其检查和未检查状态的绘制。您可以在各种[L&F name]IconFactory
课程中看到它的示例。