Ejemplo de JLayeredPane para imagen de fondo

De ChuWiki
Saltar a: navegación, buscar

El JLayeredPane es un contenedor java que admite otros componentes. La particularidad que tiene es que sitúa estos componentes en capas, de forma que se superponen unos sobre otros. Podemos aprovechar esta característica para dibujar nuestros componentes sobre una imagen de fondo. Para ello, haremos dos capas. Una capa de fondo con un JLabel con la imagen que queremos mostrar y otra capa superior con nuestro panel con los componentes. Para nuestro ejemplo, usaremos como panel un simple JLabel con una etiqueta.

El JLayeredPane no lleva ningún tipo de layout, por lo que deberemos ponerl tamaño a los componentes con un setSize().

Cuando añadimos un componente al JLayeredPane, podemos usar el método add(Component, Object), de forma que el Component sea el componente que queremos añadir y Object sea un Integer. Cuanto más alto sea el Integer, más arriba estará el componente y tapará a los componentes cuyo Integer sea más bajo.

A continuación un ejemplo completo que muestra el JLabel con la imagen de fondo y un JLabel superpuesto encima. Por supuesto, tendrás que cambiar el nombre de la imagen por una que tengas tú.

package com.chuidiang.ejemplos.layered_pane;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.WindowConstants;

/**
 * Ejemplo de JLayeredPane con una imagen de fondo.
 * 
 * @author Chuidiang
 * 
 */
public class EjemploJLayeredPane {

	/**
	 * Crea una ventana con un JLayeredPane, le pone una imagen de fondo y una
	 * etiqueta encima.
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		// La ventana y el layered pane.
		JFrame v = new JFrame("Ejemplo de JLayeredPane");
		JLayeredPane layered = new JLayeredPane();

		// La imagen de fondo metida en un JLabel, dandole el
		// tamano adecuado.
		JLabel fondo = new JLabel();
		ImageIcon imagen = new ImageIcon("asics-gel.gif");
		fondo.setIcon(imagen);
		fondo.setSize(imagen.getIconWidth(), imagen.getIconHeight());

		// La etiqueta que ira encima de la imagen.
		JLabel primerPlano = new JLabel("Primer plano");
		primerPlano.setSize(200, 40);

		// Se mete imagen y etiqueta en el JLayeredPane.
		// Debe ser Integer, no vale int.
		// Los Integer bajos corresponden a capas del fondo.
		layered.add(fondo, new Integer(1));
		layered.add(primerPlano, new Integer(2));

		// Se visualiza todo.
		v.getContentPane().add(layered);
		v.setSize(imagen.getIconWidth(), imagen.getIconHeight());
		v.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
		v.setVisible(true);
	}

}