Poner imagen de fondo en JFrame de Java

Hola a todos, hoy os voy a enseñar como poner una imagen de fondo en un JFrame de Java

Ya vimos como poner un imagen en un JFrame pero y ¿si queremos poner una imagen de fondo? No podemos usar el método anterior.

Lo primero que necesitamos es incluir esta clase a nuestro proyecto.

import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.image.BufferedImage;
import javax.swing.border.Border;

/**
 * @author DiscoDurodeRoer
 */
public class FondoSwing implements Border {
    
    private BufferedImage mImagen = null;
   
    /**
     * Constructor, indicamos la imagen que queremos que se redimensione
     * @param pImagen ImageIO.read(new File(ruta imagen))
     */
    public FondoSwing(BufferedImage pImagen) {
        mImagen = pImagen;       
    }
    
    @Override
    public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) {
        if (mImagen != null) {
            g.drawImage(mImagen, 0, 0, width, height, null);
        }
    }
    
    @Override
    public Insets getBorderInsets(Component c) {
        return new Insets(0, 0, 0, 0);
    }
    
    @Override
    public boolean isBorderOpaque() {
        return true;
    }
}

Ahora que tenemos nuestra clase, ponemos el siguiente código después de initComponents(); del JFrame que queramos poner ese fondo.


try {
            FondoSwing fondo = new FondoSwing(ImageIO.read(new File("img/fondo.png")));
            JPanel panel = (JPanel) this.getContentPane();
            panel.setBorder(fondo);
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(this, ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }

Este será el resultado:

Os dejo un proyecto de ejemplo para que lo veáis. Aquí lo puedes descargar.

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

¿Te ha gustado y quieres apoyarme? ¡Sé mi patrón!
Etiquetas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *