Incluyendo una imagen de fondo en un JFrame
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); } }
La imagen se redimensionará junto con el JFrame:
La imagen de fondo puede ir cambiando cuando deseemos mediante los métodos setImagen()
En caso de que no cargemos ninguna imagen (o cargemos un null como imagen), el panel contenedor mostrará su 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 | 33 Comments
Etiquetas: image, imagen, Java, JFrame, Swing
tengo una duda de novato jejejeje x k en el pack pones (lefunes) cual es su funcion alguna clase u es el panel
pero que no se borren los bottones
hola amiga interesnte codigo necesito de su ayuda
por favor me puede decir como pongo una imagen al iniciar el programa
solo eso0
INTERESANTE SU APORTE GRACIAS, ME HA SERVIDO, una pregunta, se podra llamar jpanel desde los botones para mostrar las imaganes, bueno lo que me interesa es incluir los paneles en el jframe, pero que se adapte al tamaño maximizado, he estado batallando, porque cuando mando a llamarlo, si tenia el JFrame maximizado se reduce al tamaño del JPanel…Espero contar con su ayuda…Gracias y buen aporte
ME SALEE ERROR PORFAVOR AYUDAAAAAAAAA:
ESTE ES EL ERROR:
Exception in thread «AWT-EventQueue-0» java.lang.NullPointerException
at javax.swing.ImageIcon.(ImageIcon.java:167)
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)
at java.awt.Component.processMouseEvent(Component.java:6289)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6054)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4652)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:603)
at java.awt.EventQueue$1.run(EventQueue.java:601)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$2.run(EventQueue.java:617)
at java.awt.EventQueue$2.run(EventQueue.java:615)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
muchas gracias por el ejemplo, he encontrado varios aportes respecto al tema, pero el tuyo es el más completo y fácil de entender. 😀
Este aporte que hicistes en su día me acaba de venir de perlas.
Me ha llevado un ratillo pero pasito a pasito de codigo ya rula perfecto.
Menuda ventanuca mas maja que me ha quedauuu 😉
Gracias!
ke tal da lo mismo korrerlo en eclipse ????? x ke me bota error en el setimagen :S no c x kee
hola me gusto tu trabajo
es justo lo que necesito
pero como le hago
no me sale la imagen
ayuda pasame tu codigo descarge el k tenias pero
no me corre
ayuda porfis
me urge
hey muchas gracias por
el aporte y me da mucho gusto que
el post este tan activo desde hace tanto tiempo
::gracias desde chihuahua
por ke me sale eze error respondan pliz me urge «cannot find symbol method setImagen(javax.swing.ImageIcon)»
maaannnn!!
ayudame me urge trato de poner una imagen
sin usar un boton sino ke me cargue la imagen automaticamente
al ejecutar el main pero me da el sig error:
cannot find symbol method setImagen(java.lang.String)
aka el codigo de mi programa
package Fx;
import java.awt.Image;
import javax.swing.JFrame;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ventana extends JFrame {
JPanel ventana=new JPanel();
JToolBar barradmenu=new JToolBar();
JButton bsuma=new JButton();
JButton bresta=new JButton();
JButton bmulti=new JButton();
JButton bdiv=new JButton();
JLabel label1=new JLabel();
JLabel label2=new JLabel();
JLabel resultao=new JLabel();
JTextField caja1=new JTextField();
JTextField caja2=new JTextField();
JTextField result=new JTextField();
JButton bSalir=new JButton();
public ventana ()
{
//Titulo y tamaño de la ventana
ventana contenedor = new ventana();
contenedor.setImagen(«knk.gif»);
setContentPane(contenedor);
setSize(300,300);
setTitle(«Operaciones Basicas»);
InicializaVentana();
getContentPane().add(ventana);
ventana.setLayout(null);
//Configurar botones
bsuma.setToolTipText(«Este boton suma»);
bresta.setToolTipText(«Este boton resta»);
bmulti.setToolTipText(«waaaaa… ya sabez lo que hace este botón «);
bdiv.setToolTipText(«waaaaaaaa»);
bSalir.setToolTipText(«Cierra el programa»);
bsuma.setFocusPainted(false);
bresta.setFocusPainted(false);
bmulti.setFocusPainted(false);
bdiv.setFocusPainted(false);
bSalir.setFocusPainted(false);
barradmenu.add(bsuma);
barradmenu.add(bresta);
barradmenu.add(bmulti);
barradmenu.add(bdiv);
barradmenu.add(bSalir);
ventana.add(barradmenu);
barradmenu.setBounds(0,0,299,30);
label1.setText(«Teclea el número 1»);
label2.setText(«Teclea el número 2»);
resultao.setText(«Resultado»);
label1.setBounds(10,30,90,30);
caja1.setBounds(10,60,90,30);
label2.setBounds(10,90,90,30);
caja2.setBounds(10,120,90,30);
resultao.setBounds(10,150,90,30);
result.setBounds(10,180,90,30);
InicializaComponentes();
ventana.add(label1);
ventana.add(caja1);
ventana.add(label2);
ventana.add(caja2);
ventana.add(resultao);
ventana.add(result);
setVisible(true);
//CAMBIO DE CURSOR…
bsuma.setCursor(new Cursor(Cursor.HAND_CURSOR));
bresta.setCursor(new Cursor(Cursor.HAND_CURSOR));
bmulti.setCursor(new Cursor(Cursor.HAND_CURSOR));
bdiv.setCursor(new Cursor(Cursor.HAND_CURSOR));
bSalir.setCursor(new Cursor(Cursor.HAND_CURSOR));
//Iconoz…
bsuma.setIcon(new ImageIcon(«suma.gif»));
bresta.setIcon(new ImageIcon(«resta.gif»));
bmulti.setIcon(new ImageIcon(«multi.gif»));
bdiv.setIcon(new ImageIcon(«div.gif»));
bSalir.setIcon(new ImageIcon(«out.gif»));
}
private void InicializaComponentes()
{
//Manejador de eventos
java.awt.event.ActionListener ME = new java.awt.event.ActionListener()
{
public void actionPerformed(java.awt.event.ActionEvent evt)
{
Object Componente = evt.getSource();
if(Componente==bsuma)
bsumaActionPerformed(evt);
if(Componente==bresta)
brestaActionPerformed(evt);
if(Componente==bmulti)
bmultiActionPerformed(evt);
if(Componente==bdiv)
bdivActionPerformed(evt);
if(Componente==bSalir)
bSalirActionPerformed(evt);
}
};
bsuma.addActionListener(ME);
bresta.addActionListener(ME);
bmulti.addActionListener(ME);
bdiv.addActionListener(ME);
bSalir.addActionListener(ME);
}
private void bsumaActionPerformed(java.awt.event.ActionEvent evt)
{
int n1,n2,s;
n1= Integer.parseInt(caja1.getText());
n2=Integer.parseInt(caja2.getText());
s=n1+n2;
result.setText(«»+s);
}
private void brestaActionPerformed(java.awt.event.ActionEvent evt)
{
int n1,n2,s;
n1= Integer.parseInt(caja1.getText());
n2=Integer.parseInt(caja2.getText());
s=n1-n2;
result.setText(«»+s);
}
private void bmultiActionPerformed(java.awt.event.ActionEvent evt)
{
int n1,n2,s;
n1= Integer.parseInt(caja1.getText());
n2=Integer.parseInt(caja2.getText());
s=n1*n2;
result.setText(«»+s);
}
private void bdivActionPerformed(java.awt.event.ActionEvent evt)
{
double n1,n2,s;
n1= Double.parseDouble(caja1.getText());
n2=Double.parseDouble(caja2.getText());
s=n1/n2;
result.setText(«»+s);
}
private void bSalirActionPerformed(java.awt.event.ActionEvent evt)
{
//Codigo a ejecutar al dar clic en salir
this.SalirVentana(null);
}
private void InicializaVentana()
{
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent evt)
{
SalirVentana(evt);
}
}
);
}
private void SalirVentana(WindowEvent evt)
{
System.exit(0);
dispose();
}
}
A mi me daba el mismo erros peo lo que tienes que hacer es darle Clean and Built y ya funciona.
Lefunes de verdad hemano me salvo la vida no sabe todo lo que he luchado por hacer esto.
GRACIAS!!!
hola corri el programa en netbeans y me arroja la siguiente exceptio ojala puedas ayudarme, al parecer esta mal ruta de la imagen
Exception in thread «AWT-EventQueue-0» java.lang.NullPointerException
at javax.swing.ImageIcon.(ImageIcon.java:138)
at ar.lefunes.jframeconfondo.JPanelConFondo.setImagen(JPanelConFondo.java:29)
at ar.lefunes.jframeconfondo.JFrameConFondo.(JFrameConFondo.java:12)
at ar.lefunes.jframeconfondo.EjemploJFrameConFondo.(EjemploJFrameConFondo.java:6)
at ar.lefunes.jframeconfondo.EjemploJFrameConFondo$4.run(EjemploJFrameConFondo.java:165)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
Cuando abre el proyecto en netbeans tiene un error. lo corregi el error es de los layout
les asigno absolute desing y caso resuelto. pero si le cambio el nombre al paquete el codigo se explota no se porque tengo una par de dias analizando el codigo y no encuentro la logica el porque da error al asignar la imagen al Jframe cuando le hace click al boton. puedes contestar gracias
NOMBRE BIEJO, EL QUE SABE SABE. MUY BUENA APORTACION AHORA MIS FRAMES SE VEN MAS BONITOS, MUCHISIMAS GRACIAS
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.
sos un diossssssssssss!!!
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.
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?
@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!!
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!!
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
@Youssef lo único que tienes que hacer es asignarle la imagen por defecto en el constructor y nada más:
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.
El mejor ejemplo q halla podido encontrar. Muchisimas gracias.
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.
@Liv añadí la primera linea de la excepción que me pasas para poder saber cual es la misma
Saludos
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)
Post actualizado el 22 de Noviembre del 2008
@Leonix he dejado el ejemplo para descargar, con el proyecto de NetBeans inclusive
permite decirte que eres la merga en vida atte kuman y benny xD…hiciste un mega parote 🙂
Hola me parece muy intersante tu código pero seria mucho mas visible si pones o cuelgas todo el codigo fuente.