Introducción a JLayeredPane

JLayeredPane es un componente Swing que nos permite agregar componentes a una capa diferente. Un ejemplo común de una "capa diferente" es un JLayeredPane emergente. Cuando debemos mostrar algún diálogo, advertencia o información, usamos una ventana emergente. Esto se puede lograr usando JLayeredPane.

Declaración:

public class JLayeredPane extends JComponent implements Accessible

Capas de JLayeredPane

Aquí hay algunas capas de JLayeredPane como se explica a continuación en detalle:

  • DEFAULT_LAYER: esta es la capa estándar y más inferior, donde se insertan la mayoría de los componentes.
  • PALETTE_LAYER: esta capa de JLayeredPanes se ubica sobre la capa predeterminada y es útil para paletas y barras de herramientas flotantes.
  • MODAL_LAYER: esta capa de JLayeredPane se utiliza para los diálogos del modelo y se muestra sobre la capa de la paleta.
  • POPUP_LAYER: esta capa de JLayeredPane se usa para mostrar ventanas emergentes sobre la capa modal.
  • DRAG_LAYER: se muestra un componente en esta capa (encima de la capa emergente) mientras se arrastra. Cuando finaliza el arrastre, el componente se muestra en su capa original.

Detalles del constructor: este es el único constructor que crea un JLayeredPane.

public JLayeredPane()

Detalles del método de JLayeredPane

Aquí hay algunos métodos que usamos, explicados a continuación en JLayeredPane:

1. addImpl protegido de vacío (Comp componente, restricciones de objeto, índice int): este método agrega un componente a este contenedor en el índice especificado. Además, LayoutManager recibe una notificación para agregar el componente especificado al diseño de este contenedor utilizando el objeto de restricciones especificado. Para esto se utiliza el método addLayoutComponent.

2. public void remove (int index): este método elimina un componente del índice especificado de este panel.

3. public void removeAll (): elimina todos los componentes de este panel.

4. public boolean isOptimizedDrawingEnabled (): si las capas en el panel pueden superponerse, hace que el dibujo optimizado sea imposible y devuelve falso. De lo contrario cierto.

5. public static void putLayer (JComponent c, int layer): este método establece la capa para un JComponent. Este método no causa ningún efecto secundario como pintar, agregar, quitar, etc. Para tener estos efectos secundarios, puede usar el método setLayer ().

6. public static int getLayer (JComponent c): este método devuelve el atributo de capa de JComponent especificado.

7. public static JLayeredPane getLayeredPaneAbove (Componente c): este método devuelve el primer JLayeredPane que contiene el componente especificado o devuelve un valor nulo si no se encuentra JLayeredPane.

8. public void setLayer (Componente c, capa int): este método establece el atributo JLayeredPane del componente especificado. Hace que el componente esté más abajo en la capa especificada.

9. public void setLayer (Componente c, capa int, posición int): este método establece el atributo de capa del componente especificado y establece la posición del componente en esa capa.

10. public int getLayer (Componente c): este método devuelve el atributo de capa del Componente especificado.

11. public int getIndexOf (Componente c): este método devuelve el índice del componente especificado en el panel ignorando las capas. El componente superior está en el índice cero y el componente inferior está en el índice más alto.

12. public void moveToFront (Componente c): este método mueve el componente especificado a la parte superior de su capa actual (posición 0).

13. public void moveToBack (Componente c): este método mueve el componente especificado hacia abajo en su capa actual (posición -1).

14. public void setPosition (Componente c, posición int): este método establece la posición del componente especificado dentro de su capa donde 0 es la posición más alta y –1 es la posición más baja.

15. public int getPosition (Componente c): este método devuelve la posición relativa del componente dentro de su capa.

16. public int highestLayer (): este método devuelve el valor de la capa más alta de todos los elementos secundarios actuales. Si no hay hijos, devuelve 0.

17. public int lowerLayer (): este método devuelve el valor de la capa más baja de todos los elementos secundarios actuales. Si no hay hijos, devuelve 0.

18. public int getComponentCountInLayer (int layer): este método devuelve el número de hijos presentes actualmente en la capa especificada.

19. public Component () getComponentsInLayer (int layer): este método devuelve los componentes en una matriz presente en la capa especificada.

20. pintura vacía pública (Gráficos g): este método pinta este JLayeredPane dentro del contexto gráfico especificado.

21. protegido Hashtable getComponentToLayer (): este método devuelve una HashTable que asigna componentes a capas.

22. Integer protegido getObjectForLayer (int layer): este método devuelve el entero asociado con la capa especificada.

23. protegido int insertIndexForLayer (capa int, posición int): este método determina y devuelve la ubicación adecuada para insertar un nuevo elemento secundario en función de la capa y la posición especificadas.

24. protegido String paramString (): este método devuelve la representación de cadena de este panel. Este método se usa internamente para fines de depuración.

25. public AccessibleContext getAccessibleContext (): este método devuelve el AccessibleContext asociado con este panel.

Ejemplo de JLayeredPane

Aquí hay un ejemplo de JLayeredPane a continuación con explicación:

Código:

import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;
public class JLayeredPaneDemo (
public static void main(String() args) (
JFrame frame = new JFrame("JLayeredPane Demo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(520, 530);
JLayeredPane jLayeredPane = new JLayeredPane();
JButton jButton1 = new JButton("Open");
jButton1.setBackground(Color.green);
jButton1.setBounds(175, 50, 150, 100);
jLayeredPane.add(jButton1, JLayeredPane.DEFAULT_LAYER);
JButton jButton2 = new JButton("Open");
JButton jButton3 = new JButton("Close");
jButton2.setVisible(false);
jButton3.setVisible(false);
jButton2.setBackground(Color.RED);
jButton3.setBackground(Color.RED);
jButton2.setBounds(75, 125, 150, 100);
jButton3.setBounds(275, 125, 150, 100);
jLayeredPane.add(jButton2, JLayeredPane.PALETTE_LAYER);
jLayeredPane.add(jButton3, JLayeredPane.PALETTE_LAYER);
JButton jButton4 = new JButton("Open");
JButton jButton5 = new JButton("Close");
jButton4.setVisible(false);
jButton5.setVisible(false);
jButton4.setBackground(Color.MAGENTA);
jButton5.setBackground(Color.MAGENTA);
jButton4.setBounds(95, 200, 150, 100);
jButton5.setBounds(255, 200, 150, 100);
jLayeredPane.add(jButton4, JLayeredPane.MODAL_LAYER);
jLayeredPane.add(jButton5, JLayeredPane.MODAL_LAYER);
JButton jButton6 = new JButton("Open");
JButton jButton7 = new JButton("Close");
jButton6.setVisible(false);
jButton7.setVisible(false);
jButton6.setBackground(Color.CYAN);
jButton7.setBackground(Color.CYAN);
jButton6.setBounds(75, 275, 150, 100);
jButton7.setBounds(275, 275, 150, 100);
jLayeredPane.add(jButton6, JLayeredPane.POPUP_LAYER);
jLayeredPane.add(jButton7, JLayeredPane.POPUP_LAYER);
JButton jButton8 = new JButton("Close");
jButton8.setVisible(false);
jButton8.setBackground(Color.GRAY);
jButton8.setBounds(175, 350, 150, 100);
jLayeredPane.add(jButton8, JLayeredPane.DRAG_LAYER);
frame.add(jLayeredPane);
frame.setVisible(true);
jButton1.addActionListener(e -> (
jButton2.setVisible(true);
jButton3.setVisible(true);
));
jButton2.addActionListener(e -> (
jButton4.setVisible(true);
jButton5.setVisible(true);
));
jButton3.addActionListener(e -> (
jButton2.setVisible(false);
jButton3.setVisible(false);
));
jButton4.addActionListener(e -> (
jButton6.setVisible(true);
jButton7.setVisible(true);
));
jButton5.addActionListener(e -> (
jButton4.setVisible(false);
jButton5.setVisible(false);
));
jButton6.addActionListener(e -> (
jButton8.setVisible(true);
));
jButton7.addActionListener(e -> (
jButton6.setVisible(false);
jButton7.setVisible(false);
));
jButton8.addActionListener(e -> (
jButton8.setVisible(false);
));
)
)

Explicación

En este ejemplo, hemos implementado un programa que muestra diferentes capas de JLayeredPane y cómo insertar / eliminar componentes del panel.

  • Primero, hemos creado un marco y le hemos agregado un JLayeredPane.
  • Luego se agregaron botones en diferentes capas de JLayeredPane.
  • Adjunto oyentes de acción a los botones para mostrar u ocultar la siguiente capa.
  • La posición de los botones con la capa se establece para que se vea correctamente.

Salida:

1. Esta es nuestra aplicación y este botón verde se agrega a la capa inferior.

2. Cuando un usuario hace clic en un botón verde de la primera capa, se abre la segunda capa.

3. Cuando se hace clic en el botón Abrir en la segunda capa, se abre la tercera capa en JLayeredPane.

4. Cuando se hace clic en el botón Abrir en la tercera capa, se abre la cuarta capa.

5. Cuando se hace clic en el botón Abrir en la cuarta capa, se abre la quinta capa.

6. Cuando se hace clic en el botón Cerrar en la quinta capa, la capa de JLayeredPane se cierra.

7. Cuando se hace clic en el botón Cerrar en la cuarta capa, la capa de JLayeredPane se cierra.

8. Cuando se hace clic en el botón Cerrar en la tercera capa, la capa de JLayeredPane se cierra.

9. Cuando se hace clic en el botón Cerrar en la segunda capa, la capa se cierra.

Conclusión

JLayeredPane es fácil de usar y un componente importante en Swing. Facilita la decisión entre componentes mientras se superponen situaciones.

Artículos recomendados

Esta es una guía para JLayeredPane. Aquí discutimos las capas, el constructor y los métodos de JLayeredPane junto con el ejemplo y su implementación de código. También puede consultar los siguientes artículos para obtener más información:

  1. JFrame en Java
  2. JComponent en Java
  3. JCheckBox en Java
  4. ¿Qué es la JVM?
  5. Ejemplos de casillas de verificación en Bootstrap