2009-11-02 12 views
8

Desidero modificare l'icona selezionata per un JCheckbox con un'icona diversa, ad esempio l'icona selezionata disattivata per un JCheckbox. Come posso ottenere l'icona selezionata disabilitata da UIManager?Accesso alle icone predefinite look and feel?

Ho provato UIManager.getIcon("CheckBoxUI.disabledSelectedIcon"); È che il nome della proprietà dell'icona è errato o è solo il modo sbagliato per ottenere quella risorsa?

risposta

3

Guardando attraverso il codice per AbstractButton, sembra che il disabledSelectedIcon deriva dalla selectedIcon, a meno che non sia specificato sul AbstractButton (o JCheckBox in questo caso) attraverso setDisabledSelectedIcon. In questo caso, la chiamata a UIManager.getIcon ("...") non restituirà l'oggetto che si sta cercando.

EDIT:

Nota che un JCheckBox ha un campo icon come definito nel AbstractButton API, proprio come un JButton può avere un'icona. È un'immagine che viene visualizzata accanto al testo ed è separata dall'icona della casella 'checked' o 'unchecked' a cui potresti fare riferimento.

L'icona di controllo/deselezione è gestita da una singola classe, trovata con UIManager.getObject('CheckBox.icon'). Si tratta di una sottoclasse Icon e gestisce sia la verniciatura dello stato selezionato sia deselezionato. Puoi vedere alcuni esempi nelle varie classi [L&F name]IconFactory.

+1

Solo chiedendo selectIcon, CheckBox.selectedIcon, o CheckBoxUI.selectedIcon, tutti restituiscono null. –

+0

La tua risposta mi ha ispirato a scavare più a fondo nel pacchetto Synth per scoprire come è stata convertita l'icona standard. Grazie. –

8

Apparentemente non ce n'è uno di default. Almeno, non quando sto cercando di chiamarlo.

Proprio scarico le chiavi UIManager.getLookAndFeelDefaults().keys() produce seguente se la chiave contiene 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 

Dopo aver letto akf's answer, ho iniziato a scavare attraverso il codice UIManager nei pacchetti plaf.synth e scoperto chiamate che delegano essenzialmente null disableCheckIIcon alle classi look and feel per provare a convertire lo standard .icon in una versione in grigio. Così ho finito con questo:

Icon checkedIcon = UIManager.getIcon("CheckBox.icon"); 
Icon dsiabledCheckedIcon = 
    UIManager.getLookAndFeel(). 
     getDisabledSelectedIcon(new JCheckBox(), checkedIcon); 
Problemi correlati