2009-11-02 15 views
8

Quiero cambiar el ícono seleccionado para un JCheckbox a un ícono diferente, digamos por ejemplo el ícono deshabilitado seleccionado para un JCheckbox. ¿Cómo puedo obtener el icono de deshabilitado seleccionado de UIManager?¿Tiene acceso a los iconos predeterminados de buscar y sentir?

Intenté UIManager.getIcon("CheckBoxUI.disabledSelectedIcon"); ¿Es ese el nombre de propiedad incorrecto del icono o es solo la forma incorrecta de llegar a ese recurso?

Respuesta

3

Mirando a través del código para AbstractButton, parece que la disabledSelectedIcon se deriva de la selectedIcon, a menos que se especifica en la AbstractButton (o JCheckBox en este caso) a través de setDisabledSelectedIcon. Siendo este el caso, llamar a UIManager.getIcon ("...") no devolverá el objeto que está buscando.

EDIT:

Tenga en cuenta que una JCheckBox tiene un campo icon como se define en la API AbstractButton, al igual que un JButton puede tener un icono. Es una imagen que se muestra junto al texto y está separada del icono de casilla "marcada" o "no marcada" a la que se puede estar refiriendo.

El icono de marcar/desmarcar está manejado por una sola clase, que se encuentra con UIManager.getObject('CheckBox.icon'). Es una subclase Icon y maneja tanto la pintura de su estado marcado como no comprobado. Puede ver ejemplos de él en las diversas clases [L&F name]IconFactory.

+1

Simplemente solicitando selectedIcon, CheckBox.selectedIcon o CheckBoxUI.selectedIcon, todos devuelven nulo. –

+0

Su respuesta me inspiró a profundizar en el paquete Synth para descubrir cómo se convirtió el ícono estándar. Gracias. –

8

Aparentemente no hay uno por defecto. Al menos, no cuando intento llamarlo.

Sólo vertido las llaves de UIManager.getLookAndFeelDefaults().keys() produce lo siguiente si la clave 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 

Después de leer akf's answer, empecé a cavar a través del código UIManager en los paquetes plaf.synth y encontré llamadas que esencialmente delegar la null disableCheckedIcon a las clases de apariencia para tratar de convertir el .icon estándar en una versión en gris. Así que terminé con esto:

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