2009-11-02 13 views
8

Chcę zmienić wybraną ikonę JCheckbox na inną ikonę, załóżmy na przykład wyłączoną wybraną ikonę JCheckbox. Jak mogę uzyskać wyłączoną wybraną ikonę z UIManager?Dostęp do domyślnych ikon wyglądu i odczuwania?

Próbowałem UIManager.getIcon("CheckBoxUI.disabledSelectedIcon"); Czy to niewłaściwa nazwa właściwości ikony, czy jest to po prostu zły sposób na uzyskanie dostępu do tego zasobu?

Odpowiedz

3

Przeglądając kodzie AbstractButton, wydaje się, że disabledSelectedIcon pochodzi od selectedIcon, chyba że zostanie określona na AbstractButton (lub JCheckBox w tym przypadku) przez setDisabledSelectedIcon. W takim przypadku wywołanie funkcji UIManager.getIcon ("...") nie zwróci obiektu, którego szukasz.

EDIT:

Uwaga że JCheckBox ma pole icon jak określono w AbstractButton API, tak jak JButton może mieć ikonę. Jest to obraz wyświetlany obok tekstu i jest oddzielony od ikony pola "zaznaczone" lub "niezaznaczone", do której możesz się odwoływać.

Ikona wyboru/odznaczenia jest obsługiwana przez pojedynczą klasę, znalezioną pod numerem UIManager.getObject('CheckBox.icon'). Jest to podklasa Icon i obsługuje zarówno obraz stanu sprawdzonego, jak i niezaznaczonego. Możesz zobaczyć jego przykłady w różnych klasach [L&F name]IconFactory.

+1

Po prostu z prośbą o selectedIcon, CheckBox.selectedIcon lub CheckBoxUI.selectedIcon, wszystkie zwracają wartość null. –

+0

Twoja odpowiedź zainspirowała mnie do zagłębienia się w pakiet Synth, aby dowiedzieć się, jak przekonwertowano ikonę standardową. Dzięki. –

8

Najwyraźniej nie ma go domyślnie. Przynajmniej nie wtedy, gdy próbuję to nazwać.

Wystarczy dumping klucze od UIManager.getLookAndFeelDefaults().keys() produkuje następujące jeżeli klucz zawiera 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 

Po przeczytaniu akf's answer, zacząłem kopać poprzez kod UIManager w pakietach plaf.synth i stwierdził, że w zasadzie połączenia delegować null disableCheckedIcon klas wyglądu i odczuć, aby spróbować przekonwertować standardowy .icon na wersję szarej. Więc zakończyłem z tym:

Icon checkedIcon = UIManager.getIcon("CheckBox.icon"); 
Icon dsiabledCheckedIcon = 
    UIManager.getLookAndFeel(). 
     getDisabledSelectedIcon(new JCheckBox(), checkedIcon); 
Powiązane problemy