Como poner una imagen de fondo en una ventana hecha en JAVA

Posted: 13 septiembre 2011 in JAVA

Usaremos la herramienta IDE Netbeans en mi caso 7.0

Y en este crearemos un nuevo proyecto con 2 paquetes dentro quedando de esta manera para que se mas ordenado:

Si se fijan tenemos un JFRAME llamado Ventana y una clase de java llamada JPanelConFondo y mas abajo un paquete que contiene la foto que usaremos para poner en el fondo de nuestra ventana.

Ahora programaremos nuestra JPanelConFondo

package ejemplofotofondo;

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class JPanelConFondo extends JPanel {

    private Image imagen;

    public JPanelConFondo() {
    }

    //constructor con parametro para setear la imagen que queremos mostrar cargandola como ruta
    public JPanelConFondo(String nombreImagen) {
        if (nombreImagen != null) {
            imagen = new ImageIcon(getClass().getResource(nombreImagen)).getImage();
        }
    }
//constructor con parametro para setear la imagen que queremos mostrar cargandola como una imagen almacenada e algun atributo tipo Image
    public JPanelConFondo(Image imagenInicial) {
        if (imagenInicial != null) {
            imagen = imagenInicial;
        }
    }
//de la misma forma que en el primer constructor tengo mi set de la imagen desde una ruta como String  y usando el repaint para actualizar
//el componente de la imagen contenida
//  repaint(): Lo llamamos explícitamente para que cuando cambiemos la imagen esta se muestre inmediatamente.

//  Si el parámetro nuevaImagen es null, veremos el fondo por defecto.

    public void setImagen(String nombreImagen) {
        if (nombreImagen != null) {
            imagen = new ImageIcon(getClass().getResource(nombreImagen)).getImage();
        } else {
            imagen = null;
        }

        repaint();
    }
//igual como el segundo constructor tengo mi set de la imagen desde un atributo tipo Image  y usando el repaint para actualizar
//el componente de la imagen contenida
    public void setImagen(Image nuevaImagen) {
        imagen = nuevaImagen;

        repaint();
    }
//sobreecribo mi metodo paint agregandole los valores de la imagen ya seteada (imagen con su ancho y alto)
    @Override
    public void paint(Graphics g) {
        if (imagen != null) {
            //    g.drawImage: dibujamos la imagen (guardada en el atributo “imagen”) en toda la extension del panel
            g.drawImage(imagen, 0, 0, getWidth(), getHeight(), this);

            //    setOpaque(false): le indicamos al panel que no dibuje su fondo por defecto (sino este taparía la imagen)
            setOpaque(false);
        } else {

            setOpaque(true);
        }

//    super.paint(g): le indicamos al panel que continúe dibujando el resto de los componentes
        super.paint(g);
    }
}

Con esto ya tenemos casi todo el trabajo hecho ahora solo falta invocar a nuestra clase JPanelConFondo en nuestro JFrame en el constructor casteando un Jpanel que añadiremos al diseño.
Aquí el codigo que pondremos en nuestro constructor del JFrame Ventana seteando la imagen en el setImagen, esta puede ser desde el paquete como la que usaremos ahora o directamente desde una ruta de nuestro pc.

public class Ventana extends javax.swing.JFrame {

    /** Creates new form Ventana */
    public Ventana() {
        initComponents();
//aki es donde ponemos nuestra foto como fondo de nuestra ventana//
        ((JPanelConFondo) panelFondo).setImagen("foto/foto.jpg");

    }
//......

Con esto hecho ya solo ejecutamos y tenemos una ventana con un fondo editado o una imagen personalizada.
=D

This slideshow requires JavaScript.

Advertisement

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s