Para agregar una imagen de fondo a nuestro JFrame lo que hacemos es reemplazar el contenedor de componentes por defecto por uno propio.
El contenedor que utilizaremos será el JPanel con una imagen de fondo que vimos, y el gestionará la imagen de fondo (jpg, png, gif, etc.) que queramos utilizar, quedándonos el código muy simple:
package ar.lefunes.jframeconfondo;
import java.awt.Image;
import javax.swing.JFrame;
public class JFrameConFondo extends JFrame {
private final JPanelConFondo contenedor = new JPanelConFondo();
public JFrameConFondo() {
setContentPane(contenedor);
}
public void setImagen(String nombreImagen) {
contenedor.setImagen(nombreImagen);
}
public void setImagen(Image nuevaImagen) {
contenedor.setImagen(nuevaImagen);
}
}

JFrame con una imagen de fondo
La imagen se redimensionará junto con el JFrame:

JFrame redimensionado
La imagen de fondo puede ir cambiando cuando deseemos mediante los métodos setImagen()

Cambiando la imagen de fondo
En caso de que no cargemos ninguna imagen (o cargemos un null como imagen), el panel contenedor mostrará su fondo por defecto:

JFrame con fondo por defecto
Se puede descargar el ejemplo de este post de la siguiente dirección (aprox. 38.7 KB): http://lefunes.googlecode.com/files/JFrame_con_imagen_fondo.zip
Espero les sirva.
Saludos
Filed under: Java, Swing | 17 Comments
Tags: image, imagen, Java, JFrame, Swing
Hola me parece muy intersante tu código pero seria mucho mas visible si pones o cuelgas todo el codigo fuente.
permite decirte que eres la merga en vida atte kuman y benny xD…hiciste un mega parote
Post actualizado el 22 de Noviembre del 2008
@Leonix he dejado el ejemplo para descargar, con el proyecto de NetBeans inclusive
no entiendo por que , pero aun no me salen esto:
at javax.swing.ImageIcon.(ImageIcon.java:138)
at ar.lefunes.jframeconfondo.JPanelConFondo.setImagen(JPanelConFondo.java:29)
at ar.lefunes.jframeconfondo.JFrameConFondo.setImagen(JFrameConFondo.java:15)
at ar.lefunes.jframeconfondo.EjemploJFrameConFondo.btFondo1ActionPerformed(EjemploJFrameConFondo.java:158)
at ar.lefunes.jframeconfondo.EjemploJFrameConFondo.access$200(EjemploJFrameConFondo.java:4)
at ar.lefunes.jframeconfondo.EjemploJFrameConFondo$3.actionPerformed(EjemploJFrameConFondo.java:91)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
@Liv añadí la primera linea de la excepción que me pasas para poder saber cual es la misma
Saludos
yo he hecho lo mismo, pero de otra manera, incluyendo el codigo en mis clases, pero tengo un problemilla, que no me carga la imagen de fondo, en este caso quiero tener una nada mas, de forma automatica, hay alguna manera de hacerlo sin tener que recurrir a un Botton (en mi caso uso un JRadioButton), y que se cargue la foto directamente como fondo al correr el main.
gracias por responder.
saludos.
El mejor ejemplo q halla podido encontrar. Muchisimas gracias.
@Youssef lo único que tienes que hacer es asignarle la imagen por defecto en el constructor y nada más:
public class JFrameConFondo extends JFrame { public JFrameConFondo() { JPanelConFondo contenedor = new JPanelConFondo(); contenedor.setImagen("path.a.la.imagen.png"); setContentPane(contenedor); } //... }Saludos
Muy interesante tu proyecto Le funes, pero tengo un problema, existe la manera de que cargue al mismo la imagen de fondo cuando hago correr el main sin necesidad de botones?.
Por favor podras poner el codigo completo o el proyecto para descargarlo, soy estudiante de sistemas.
Saludos.
gracias por responder, pero el mio es un JDesktopPane situado dentro de un JFrame, y no le puedo aplicar el metodo setImagen(..).
@Youssef fijate el articulo Aplicación MDI (JDesktopPanel) con imagen de fondo que te será de ayuda.
Saludos
hola!!
aplique tu codigo y funciona a la perfeccion..
Pero, una pregunta!?.
como le hago si quiero imagenes de fondo que se encuentra originalmente en disco?.
por lo visto, no puedo pasarle dicha ruta como parametro al setimagen.
Ayudame!!
@Istvan tenes que usar el método para pasarle la imagen directamente (que previamente cargaste del disco).
Si queres modificar el setImagen para pasarle la ruta, dale una mirada al articulo para cargar imágenes para que te dé una idea como realizar modificaciones.
Saludos
hola Le funes , tengo un problema, cuando lo convierto a .JAR tu proyecto con netbeans 6.5 , se ubica en la siguiente direccion de mi disco: D:\Descarga Firefox\imagen\JFrame_con_imagen_fondo\dist\JFrame_con_imagen_de_fondo.jar no se me ejecuta el proyecto, ¿a que se debera?
realmente muchas gracias…estuve buscando esto por un buen rato….pq lo q yo acostumbraba era a poner una imagen en un jpanel y luego el panel pegarlo al jframe.
sos un diossssssssssss!!!
hola, ninguno de todos tus codigos con imagenes me sirve me saca exepciones, lo probe en netbeans el ultimo, ayudame porfavor estoy en un proyecto.