Hace algún tiempo publique como hacer para colocar un fondo en Java, utilizando JLabel, JPanel o JDesktopPane, todo explicado en estas entradas:
Sin embargo, el día de ayer me preguntaron "¿que tal si quiero que un botón me cambie la imagen?", bueno, entonces hacemos ciertas modificaciones a lo anteriormente explicado, lo primero las imágenes. Para mayor comodidad, la imagen llevará el mismo nombre del botón (del label del botón), así que para este ejemplo usaremos las siguientes:
Luego de esto debemos emplear los métodos "validate()" y "repaint()" de java, entonces nuestro listener quedará de la siguiente manera:
Sin embargo, el día de ayer me preguntaron "¿que tal si quiero que un botón me cambie la imagen?", bueno, entonces hacemos ciertas modificaciones a lo anteriormente explicado, lo primero las imágenes. Para mayor comodidad, la imagen llevará el mismo nombre del botón (del label del botón), así que para este ejemplo usaremos las siguientes:
NOTA: Colocar los nombres "Fondo A", "Fondo B" y "Fondo C" respectivamente para el funcionamiento de este ejemplo.
Luego de esto debemos emplear los métodos "validate()" y "repaint()" de java, entonces nuestro listener quedará de la siguiente manera:
public void actionPerformed(ActionEvent evt) { Fondo.setIcon(new ImageIcon(evt.getActionCommand()+".gif")); Fondo.repaint(); Fondo.validate(); }Y eso es todo, de tal forma que nuestro ejemplo queda de la siguiente manera:
import java.awt.*; import java.awt.event.*; import javax.swing.*; @SuppressWarnings("deprecation") public class FrameFondoBoton extends JFrame { JLabel Fondo = new JLabel(); JPanel PanelBotones = new JPanel(); JButton BotonA = new JButton("Fondo A"); JButton BotonB = new JButton("Fondo B"); JButton BotonC = new JButton("Fondo C"); public FrameFondoBoton() { super("Probando el cambio de fondo"); setLocation(100,100); setSize(510,565); add("North", Fondo); add("South",PanelBotones); PanelBotones.add(BotonA); PanelBotones.add(BotonB); PanelBotones.add(BotonC); BotonA.addActionListener(new elBoton()); BotonB.addActionListener(new elBoton()); BotonC.addActionListener(new elBoton()); PanelBotones.setLayout(new GridLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } class elBoton implements ActionListener { public void actionPerformed(ActionEvent evt) { Fondo.setIcon(new ImageIcon(evt.getActionCommand()+".gif")); Fondo.repaint(); Fondo.validate(); } } public static void main(String[] arg) { JOptionPane.showMessageDialog(null,"Cambiar fondo con botones....\n"); JOptionPane.showMessageDialog(null,"By Carlitox ("+ "http://calitoxenlaweb.blogspot.com)"); FrameFondoBoton app = new FrameFondoBoton(); app.setVisible(true); } }NOTA: Recuerda colocar las imágenes junto con el archivo ".java" en una misma carpeta.
Imagen de Ejemplo
Recibe notificaciones por correo
4 Comentarios
Escribir ComentarioGracias me fue de mucha ayuda aunque tengo un problema con esta parte de mi código
Responderprivate void ProbarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your
Probar.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
//JOptionPane.showMessageDialog(null,"precionado");
String ani = Ingre_anima.getText();
Ingre_anima.setText("");
if (ani.equals("toro")){
JOptionPane.showMessageDialog(null,"logrado");
Imagen.setIcon(new ImageIcon(evt.getActionCommand()+".png"));//<---- aqui marca error*
Imagen.repaint();
Imagen.validate();
} else
JOptionPane.showMessageDialog(null,"no logrado");
}
});
}
Quiero hacer que despues de confirmado el valor me cambie la imagen en automatico, pero me sale este error ya lo estube checandoy nada :(
Lo mas seguro sea por el nombre del archivo que no fue encontrado, recuerda colocarlo en la misma carpeta donde tienes el archivo y colocar correctamente las mayúsculas y minúsculas...
ResponderLo que puedo notar es que utilizas un string para distinguir esto, yo coloco "evt.getActionCommand()" porque el nombre de la imagen es exactamente lo mismo que tiene el botón escrito. en tu caso puede que quieras probar con: Imagen.setIcon(new ImageIcon(ani+".png"));
Otra cosa es que deberías mostrar el mensaje luego de cambiar la imagen y no antes, también colócalo en un método con otra clase aparte como lo muestro en el ejemplo, así sería más fácil... Saludos!!
Nose que esta pasando, pero no me muestra las imagenes a pesar de estar en la misma carpeta.
ResponderRevisa que la extensión de la imagen sea la misma del archivo en esta línea de código:
Responder.setIcon(new ImageIcon(evt.getActionCommand()+".gif"));
Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.
Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión