2009-02-05 34 views
5

¿Cómo puedo crear en una interfaz de Swing un botón de alternar imagen? Tengo dos imágenes, imageon.jpg y imageoff.jpg, y básicamente quiero un elemento seleccionable que active las imágenes y active un evento.Java: imagen como botón de alternar

Actualización: ¿Hay alguna manera de anular el 'chrome' habitual alrededor de la imagen? Preferiría una imagen simple a un botón con una imagen adentro.

Respuesta

10

Cargue las imágenes con ImageIcon. Crea un JToggleButton. A continuación, aplique los iconos con AbstractButton.setIcon/setPressedIcon/setSelectedIcon. Retire el borde con AbstractButton.setBorderPainted(false).

+2

Mmm, se olvidó de esos métodos. (Y no aparecen en el Javadoc a menos que recuerdes que existen.) +1 –

+2

realmente extraño ... También traté de hacer que el borde pintado sea falso pero aún tenga el borde de la imagen, o el alternar. ¿Cómo resolverlo? :( – gumuruh

3

¿Qué tal JToggleButton? Puede crear una subclase y anular paint() para pintar la imagen correcta en función de si está seleccionada o no.

Otra forma sería subclase JPanel y capturar clics del mouse, anulando paintComponent() para dibujar la imagen correcta. De esta manera, lo único que se dibuja es la imagen real (a diferencia de la opción JToggleButton).

+0

¡Gracias por la sugerencia de JPanel! Encontré este recurso, espero que me enseñe a construir lo que necesito: http://java.sun.com/docs/books/tutorial/uiswing/painting/index.html – Dan

1

Su mejor opción es crear una subclase de AbstractButton y establecer propiedades como borde y fondo (en su constructor).

MyButton() { 
    setBorder(null); 
    setBackground(null); 
    } 
2

Tuve el mismo problema con JButtons. Pruebe esto:

result = new JButton(icon); 
result.setBorderPainted(false); 
result.setContentAreaFilled(false); 

width = icon.getIconWidth(); 
height = icon.getIconHeight(); 
result.setPreferredSize(new Dimension(width, height)); 

Es necesario establecer el tamaño preferido para eliminar el espacio adicional alrededor del botón. Esto funcionó para mí en Windows 7 y Mac OS X 10.6.