2009-11-02 2 views
8

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

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

ответ

3

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

EDIT:

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

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

+1

Просто попросив выделитьIcon, CheckBox.selectedIcon или CheckBoxUI.selectedIcon, все возвращают null. –

+0

Вы отвечаете, вдохновляя меня копать глубже в пакете Synth, чтобы узнать, как был преобразован стандартный значок. Благодарю. –

8

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

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

Icon checkedIcon = UIManager.getIcon("CheckBox.icon"); 
Icon dsiabledCheckedIcon = 
    UIManager.getLookAndFeel(). 
     getDisabledSelectedIcon(new JCheckBox(), checkedIcon); 
Смежные вопросы