Cambiar fondo con botones (JAVA/JLabel)

   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:


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


4 Comentarios

Escribir Comentario
Prueba
AUTOR
11 de diciembre de 2012, 12:28 delete

Gracias me fue de mucha ayuda aunque tengo un problema con esta parte de mi código

private 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 :(

Responder
avatar
11 de diciembre de 2012, 20:50 delete

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...

Lo 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!!

Responder
avatar
Unknown
AUTOR
29 de junio de 2013, 23:21 delete

Nose que esta pasando, pero no me muestra las imagenes a pesar de estar en la misma carpeta.

Responder
avatar
1 de julio de 2013, 8:40 delete

Revisa que la extensión de la imagen sea la misma del archivo en esta línea de código:

.setIcon(new ImageIcon(evt.getActionCommand()+".gif"));

Responder
avatar

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