«

»

May 27 2014

JAVA – Añadir background a JPanel

Si estamos desarrollando una aplicacion en java y queremos darle algo mas de vida nos encontramos que tanto JFrame como JPanel solo tienen un metodo setBackground(Color), por lo que solo podemos añadirle un color de background pero no la imagen.

Login

Para ello vamos a crear nuestra propia clase y añadir lo necesario para que podamos poner de fondo una imagen.

Ahora cuando vayamos a crear un nuevo JPanel simplemente cambiamos JPanel por JPanelBackground (nombre que le he dado a esta clase) y le ponemos un background. Podemos ponerle un GIF animado, JPG, PNG… pero cuidado con poner imagenes de demasiada resolucion (6000x…) porque depende en que maquina se ejecute puede tardar mas o menos en hacer el repintado.

Ads Patrocinados / Publicidad

22 comentarios

Ir al formulario de comentarios

  1. Antonio

    Disculpa, podrías mandarme tu código?

    1. Guille Rodríguez

      Si te refieres al código de la aplicación donde use esto, es lo que está aquí colgado.

      Si te refieres a toda la aplicación, lo siento eso no es posible.

  2. jose manuel gomez alavez

    ola amigo y en donde pongo la ruta de la imagen que quiero poner

    1. Guille Rodríguez

      Perdona la tardanza, para ello puedes ponerlo algo asi

      String imagepath = “./bin/Imagenes/imagen.png”;

      Luego solo deberías instanciar una clase del tipo del objeto y pasarle al metodo el imagePath.

  3. sauri2013

    y si tengo el jpanel dentro de otro jpanel, en este caso como lo podría hacer

    1. Ucha

      El JPanel que está más adentro, al crearlo renombrás donde pusiste JPanel como JPanelBackground y luego llamás al método .setBackground(“ruta_del_archivo”);
      Sólo hay que agregar una cosa más y es el método .setOpaque(false); para que te deje ver la imagen y no te la tape el fondo del panel.

  4. Kailcor

    Saludos amigo, justamente estaba buscando algo así. Sin embargo, a pesar de que se ejecuta sin error, el panel no agarra la imagen, copie tu código tal cual, lo probé aparte, y no me funciona.¿Que podría ser? Ya que no me da error alguno y la imagen esta en el proyecto…
    Gracias de antemano.

    1. Guille Rodríguez

      Como se puede ver un par de comentarios arriba, indico de donde cargar la imagen.

    2. Ucha

      Puede ser que te falte llamar al método .setOpaque(false);

  5. Ucha

    Guille, sos un genio, mil gracias por este artículo!!! Fue copiarlo, crear una clase JPanelBackground y pegar la clase que vos hiciste tal cual y ya sólo me quedó hacer tres cambios en la clase en la cual había hecho mi JPanel.

    1º Donde generaba mi JPanel, que en mi caso era
    JPanel titulares = new JPanel();
    pasó a llamarse
    JPanelBackground titulares = new JPanelBackground();

    2º Para que se pueda ver la imagen poner en falso el fondo del panel con
    titulares.setOpaque(false);

    3º Llamar al método setBackground y pasarle la ruta de mi imagen
    titulares.setBackground(“campo_de_futbol.jpg”);

    Y me funcionó de maravilla!!! Había visto mil tutoriales por ahí que hacían muy complicado el poder poner una imagen a un JPanel que ya tuviese creado de antemano, pero con el tuyo fue todo muy sencillo.

    Mil gracias por tu artículo nuevamente!!!

    1. Guille Rodríguez

      Hola! Me alegro que te haya servido. Seguramente se me olvido añadir que se tenia que poner el setOpaque a false al pasarlo del proyecto aquí al blog (copiandolo a mano). Ahora con tu comentario ya esta completo.

      1. Geny

        ¡Hola! Disculpa la molestia, pero no tengo mucha experiencia en esto de java y he tenido algunos problemas para hacer que aparezca la imagen de fondo. Hice los mismos pasos que Ucha y de todos modos no aparece la imágen que estoy pasando como parametro. El código que hice es una clase sencilla con un main donde creo un JFrame, el panel y dos botones.

        1. Guille Rodríguez

          Hola, perdona que tarde tanto en contestarte. A ver, estaría bien que subieras el código a algun site donde podamos verlo. La parte de JPanelBackground y donde lo instancias.

          Pastebin puede ser un buen sitio donde colgarlo. Otra opción es hacer un .zip / .tar.gz y subirlo a alguna web tipo Mega.co.nz para que pueda descargarlo y verlo.

  6. Geny

    http://pastebin.com/cWu7Pk4u
    Esta es la clase que hice.

  7. Matias

    Buenas, use parte de tu codigo para crear un JPanel con fondo, y funciona de diez, mi unica duda es que no lo puedo hacer andar con una direccion que en vez que sea del disco, sea de un paquete de java donde se encuentra la imagen, ojala puedo ayudarme con esto ultimo.
    Saludos!

  8. Matias

    Me gustaria saber como pasarle una direccion de una imagen que se encuentra dentro de un paquete de java. Ya he probado casi todas las formas y no logro hacerlo. Gracias

  9. Sikandar

    Muchas gracias por el ejemplo me sirvio perfectamente :D

    1. Guille Rodríguez

      ^^ me alegro que te haya servido.

  10. Pichi

    Qué tal? vale, he hecho lo que has hecho tu, ahora como hago para que este fondopanel salga en mi pantalla principal(de login por ejemplo)? un saludo y muchas gracias

    1. Guille Rodríguez

      Tu pantalla principal seguramente sea un JPanel, pues simplemente en vez de JPanel haces que sea un JPanelBackground y le añades la imagen (desde la ruta del disco duro relativa a los .class)

  11. Fernando

    Amigo, el enlace esta caido.
    He intentando de varias formas implementar la clase que construiste pero no obtengo la imagen de fondo y no me arroja ningún error. Puedes subir la implementación de la clase que hiciste? Si puedes muchas gracias amigo

    1. Guille Rodríguez

      Hola Fernando, perdona la tardanza. La implementación que hice de la clase es la que ves en el post. Como puedes en ver los comentarios, a mucha gente le ha funcionando. También es cierto que cuando cree este post, la versión de Java creo que era la 6. Quizá haya algún método que haya cambiado en el JPanel original del que esta clase hereda, pero no creo que sea eso.

Deja un comentario