Imagen de fondo en JPanel o JFrame

Hola amigos, esta es mi primer publicación que realizo, y para empezar quiero compartir con ustedes una manera que quizá no es la mejor ni la mas profesional pero si es una manera muí fácil, incluso antes de poder realizar este proceso me rompí la cabeza por 2 días intentando poner una imagen de fondo en un JPanel o JFrame y que se acoplara al tamaño de mis formularios.
Les comento que no soy un profesional en la programación pero lo poco que se quiero compartirlo con ustedes, y si algo no se lo investigamos y buscamos la manera de solucionar los detalles.
Bueno para no tomarnos mas tiempo contando mi historia comenzare a explicarles como realizar este proceso que nos facilitara de gran manera y les evitara romperse la cabeza.
Bien en este pequeño ejemplo no voy a comenzar explicando como insertar un objeto a nuestro formulario, simplemente explicare el proceso para colocar una imagen de fondo a nuestros frames.

Empezaremos colocando un panel en nuestro formulario.
en el código definiremos una variable de tipo JLabel

JLabel jlbl_Fondo = new JLabel();

El siguiente paso es definir en nuestro codigo
una variable de tipo ImageIcon e iniciarla con la ruta de nuestra imagen. (en mi caso la imagen se encuentra dentro de un paquete llamado img) de la siguiente manera:


private ImageIcon ImagenIcono = new ImageIcon(getClass().getResource("../img/mi_fondo.jpg"));


En mi caso yo quería poner el fondo a la medida del formulario. Para esto vamos a tratar la imagen para que tome el las medidas(ancho y alto) del JFrame o incluso del Jpanel.
una imagen guardada en una variable del tipo ImageIco en java no puede ser modificada de tamaño, pero eso es fácil de solucionar la pasaremos a una variable de tipo Image de la siguiente manera para poder redimensionarla.


Image img = ImagenIcono.getImage();


De esta manera tenemos guardado nuestro gráfico en una variable tipo Image y podremos tomar las medidas del formulario o Panel y colocar esas dimensiones a la figura.
Para esto definimos una nueva variable de tipo Image en la cual guardaremos la imagen ya con las nuevas medidas.

Image imcopia = img.getScaledInstance(panelname.getWidth(),panelname.getHeight(),java.awt.Image.SCALE_SMOOTH);

Donde formulario es el nombre que le den al Jframe pero no solo puedes tomar las medidas de un JFrame si no también de un Jpanel u otro objeto incluso un Botón.
Ahora que tenemos nuestra imagen con las nuevas medidas procedemos a guardarla en una variable de tipo ImageIcon para poder colocarla en la etiqueta .

ImageIcon  ImagenNueva = new ImageIcon(imcopia);

Para mostrar eficazmente la imagen en pantalla borramos el texto de la etiqueta y le damos las medidas que ha tomado la nueva imagen que son las mismas del formulario.

jlbl_Fondo.setText(null);
jlbl_Fondo.setSize(panelname.getWidth(),panelname.getHeight());

ahora colocamos la imagen en la etiqueta

jlbl_Fondo.setIcon(ImagenNueva);
panelname.add(jlbl_Fondo);

Bien con estos sencillos pasos lo único que resta es correr el programa y hacerle alguna que otra mejora como pasar este proceso de tratado de la imagen a una función y colocarla en una clase para poder utilizarlo desde cualquier otra clase bien si quieres saber como hacer eso pueden preguntar y con gusto les diré la manera en como lo hice yo.
Espero que este sencillo ejemplo les aya servido de mucho como a mi.

Comentarios

  1. Holaaa... muy buenas!

    Gracias por el post. He tratado de aplicar el código que has dado para poner una imagen de fondo a un jPanel en el que tengo jLabels, jTextAreas y jTextFields pero no consigo establecer la etiqueta con la imagen ya cargada, como imagen de fondo del jPanel. Sólo condigo ponerla al lado de las etiquetas y áreas de texto, pero no "debajo" de ellas. Cómo puedo hacerle???

    Gracias,
    Patty

    ResponderEliminar
  2. Hola Patty, Buen día si me percate de ese detalle es por eso que actualice mi post, en ocasiones ponía la etiqueta y se colocaba a un lado de los demás controles y en ocasiones si se colocaba en el fondo, me imagino que es por el orden en que agregamos los controles a la ventana, el echo es que haciendo varias pruebas logre colocar efectivamente la etiqueta en el fondo y es tan fácil, que la única modificación que hice fue definir la etiqueta de fondo en el código y no arrastrándola directamente en la ventana, el demás código quedo igual, solo al final se agrega la etiqueta al panel. Espero que si te sirva este código a mi me funciono tanto para un JFrame como JInternalFrame, puedes volver a verificar el código de este ejemplo para ver cuales fueron las modificaciones. Y cualquier duda que tengas aquí estoy para resolverlas.

    ResponderEliminar

Publicar un comentario