Доступ к значкам по умолчанию? - PullRequest
8 голосов
/ 03 ноября 2009

Я хочу изменить выбранный значок для JCheckbox на другой значок, скажем, например, отключенный выбранный значок для JCheckbox. Как я могу получить отключенный выбранный значок из UIManager?

Я пытался UIManager.getIcon("CheckBoxUI.disabledSelectedIcon"); Это неправильное имя свойства значка или это просто неправильный способ получить доступ к этому ресурсу?

Ответы [ 2 ]

8 голосов
/ 03 ноября 2009

По-видимому, по умолчанию его нет. По крайней мере, когда я пытаюсь это назвать.

Простой сброс ключей из UIManager.getLookAndFeelDefaults().keys() приводит к следующему, если ключ содержит CheckBox:

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 я начал копаться в коде UIManager в пакетах plaf.synth и обнаружил вызовы, которые по существу делегируют нулевой disableCheckedIcon классам look and feel, чтобы попытаться преобразовать стандартный .icon. к серой версии. Итак, я закончил с этим:

Icon checkedIcon = UIManager.getIcon("CheckBox.icon");
Icon dsiabledCheckedIcon = 
   UIManager.getLookAndFeel().
      getDisabledSelectedIcon(new JCheckBox(), checkedIcon);
3 голосов
/ 03 ноября 2009

При просмотре кода для AbstractButton выясняется, что disabledSelectedIcon является производным от selectedIcon, если только оно не указано в AbstractButton (или в данном случае JCheckBox) через setDisabledSelectedIcon. В этом случае вызов UIManager.getIcon ("...") не вернет искомый объект.

EDIT:

Обратите внимание, что JCheckBox имеет поле icon, как определено в AbstractButton API, так же как JButton может иметь значок. Это изображение, которое отображается рядом с текстом и отделено от значка «отмечено» или «не отмечено», на который вы, возможно, ссылаетесь.

Значок проверки / снятия флажка обрабатывается одним классом, найденным с UIManager.getObject('CheckBox.icon'). Это подкласс Icon, который обрабатывает как нарисованное, так и непроверенное состояние. Вы можете увидеть примеры этого в различных [L&F name]IconFactory классах.

...