代码之家  ›  专栏  ›  技术社区  ›  Jay R.

访问外观默认图标?

  •  8
  • Jay R.  · 技术社区  · 15 年前

    我想将jcheckbox的选定图标更改为其他图标,例如jcheckbox的禁用选定图标。如何从uimanager中获取禁用的选定图标?

    我试过 UIManager.getIcon("CheckBoxUI.disabledSelectedIcon"); 这是错误的图标属性名还是访问该资源的错误方法?

    2 回复  |  直到 15 年前
        1
  •  8
  •   Community PPrice    7 年前

    显然没有一个是默认的。至少,在我想打电话的时候不会。

    把钥匙从 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代码,发现一些调用实际上将空的disablecheckedicon委托给look and feel类,试图将standard.icon转换为灰色版本。所以我最后说:

    Icon checkedIcon = UIManager.getIcon("CheckBox.icon");
    Icon dsiabledCheckedIcon = 
       UIManager.getLookAndFeel().
          getDisabledSelectedIcon(new JCheckBox(), checkedIcon);
    
        2
  •  3
  •   akf    15 年前

    在代码中查找 AbstractButton ,看起来 disabledSelectedIcon 是从 selectedIcon ,除非在AbstractButton(在本例中是jcheckBox)上指定 setDisabledSelectedIcon . 在这种情况下,调用uimanager.geticon(“…”)将不会返回您要查找的对象。

    编辑:

    注意jcheckbox有一个 icon 中定义的字段 抽象按钮 API,就像 JButton 可以有一个图标。它是显示在文本旁边的图像,与您可能引用的“选中”或“未选中”框图标分开。

    check/uncheck图标由一个类处理,可以使用 UIManager.getObject('CheckBox.icon') . 它是一个子类 Icon 并处理其选中和未选中状态的绘制。你可以在各种 [L&F name]IconFactory 类。