8

我想将 JCheckbox 的选定图标更改为不同的图标,例如 JCheckbox 的禁用选定图标。如何从 UIManager 中获取禁用的选定图标?

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

4

2 回答 2

8

显然,默认情况下没有一个。至少,不是当我试图调用它时。

如果密钥包含 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);
于 2009-11-02T22:24:45.540 回答
3

查看 的代码AbstractButton,似乎disabledSelectedIcon是从 派生的selectedIcon,除非在 AbstractButton(或本例中的 JCheckBox)上通过setDisabledSelectedIcon. 在这种情况下,调用 UIManager.getIcon("...") 将不会返回您正在寻找的对象。

编辑:

请注意,JCheckBox 具有APIicon中定义的字段AbstractButton,就像 aJButton可以具有图标一样。它是显示在文本旁边的图像,与您可能提到的“选中”或“未选中”框图标分开。

选中/取消选中图标由单个类处理,使用UIManager.getObject('CheckBox.icon'). 它是一个子类Icon,并处理其检查和未检查状态的绘制。您可以在各种[L&F name]IconFactory课程中看到它的示例。

于 2009-11-02T21:47:25.573 回答