~Java4Beginners~
~Java4Beginners~

JLayeredPane

Mit der Container-Klasse JLayeredPane stellt uns Java eine Klasse zur Verfügung, in welcher wir Objekte "geschichtet" platzieren können. Hierfür werden unseren Objekten Integer-Objekte übergeben, um die Schicht festzulegen, auf welcher Sie positioniert werden. Je höher der Wert des Integer-Objektes ist, desto höher werden die Objekte positioniert, d. h. im Umkehrschluss, ein Objekt mit dem Wert 3 überlagert ein Objekt mit dem Wert 1. Um eine Vorstellung zu bekommen, ein kleines Beispielprogramm hier nun bereits am Anfang.

Beispielprogramm


import java.awt.Color;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLayeredPane;

/**
 * Beispielprogramm JLayeredPane
 * @author Markus Badzura
 */
public class ContainerJLayeredPane extends JFrame
{
    public void ContainerJLayeredPane()
    {
        setTitle("Beispiel JLayeredPane");    
        setSize(550, 550);    
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JLayeredPane lp = getLayeredPane( );
        lp.setSize(550,550);
        JButton bt_weiss = new JButton( );    
        bt_weiss.setBackground(Color.white);    
        bt_weiss.setBounds(20, 20, 150, 150);    
        JButton bt_grau = new JButton( );    
        bt_grau.setBackground(Color.gray);    
        bt_grau.setBounds(120, 120, 150, 150);    
        JButton bt_schwarz = new JButton( );    
        bt_schwarz.setBackground(Color.black);    
        bt_schwarz.setBounds(240, 240, 150, 150);
//        // Button ohne Schicht-Angabe
//        lp.add(bt_grau);
//        lp.add(bt_weiss);
//        lp.add(bt_schwarz);
        //Button mit Schicht-Angabe
        lp.add(bt_grau,new Integer(2));    
        lp.add(bt_weiss,new Integer(3));    
        lp.add(bt_schwarz,new Integer(1));
        setVisible(true);
    }
    
    public static void main(String[] args) 
    {
        ContainerJLayeredPane jlp = new ContainerJLayeredPane();
        jlp.ContainerJLayeredPane();
    }
}
Wie im Quelltext zu sehen ist, ist ein Teil auskommentiert. Um die Auswirkung der Schichten zu demonstrieren, hier die Fensteransicht, wenn die Button ohne Schichtangabe auskommentiert sind. Somit ist dies das hinzufügen der Buttons mit Schichtangabe.

Wenn wir mit dem Mauszeiger auf einen Button zeigen, so bleibt dieser in seiner Schicht. Er drängt sich nicht in den Vordergrund. Wenn wir die Buttons ohne Schichtangabe dem JLayeredPane zuweisen werden wir feststellen, dass der Button, der durch den Mauszeiger den Fokus bekommt, sich in den Vordergrund drängt, d. h. nicht in seiner Schicht verbleibt. Dies wird sichtbar, sobald der Mauszeiger den Button wieder verlässt.

Layer-Konstanten

Mit Hilfe von 6 Konstanten sind bestimmte Schichten bereits reserviert.
Konstante Schichtwert Beschreibung
FRAME_CONTENT_LAYER -3000 Dieser Layer wird normalerweise nur benutzt, um den ContentPane und die JMenuBar auf einem JFrame-Objekt zu platzieren.
DEFAULT_LAYER 0 Dieser Layer markiert die Standardebene, auf welcher die Objekte abgelegt werden.
PALETTE_LAYER 100 Auf dem PALETTE_Layer werden im Normalfall Objekte der Klassen JToolBar, JColorChooser oder JFileChooser abgelegt.
MODAL_LAYER 200 Wie der Name schon vermuten lässt, ist dies die Standard-Ebene für modale Dialoge, wie z. B. JOptionPane's
POPUP_LAYER 300 Diese Layer-Ebene ist angedacht für Pop-Up-Fenster (Hinweisfenster, Pop-Up-Menü)
DRAG_LAYER 400 Während eines Drag & Drop-Vorganges werden die Objekte auf diese Layer-Ebene gelegt.
Grafisch dargestellt sehen diese vordefinierten Layer-Ebenen wie folgt aus.

Methoden

Wie so oft bereits erwähnt, finden sich in der API von Oracle alle Methoden, welche die Klasse enthält. Hier aufgeführt ist nur ein Teil, welcher häufig Verwendung finden wird.
Methode Beschreibung
JLayeredPane() Standardkonstruktor
getComponentCountInLayer(intLayerEbene) Liefert die Anzahl der Komponenten als int-Wert, welche sich in der angegebenen Ebene befinden.
highestLayer() Liefert als int-Wert die höchste Ebene aller Objekte.
lowestLayer() Liefert als int-Wert die niedrigste Ebene aller Objekte.
moveToBack(Component) Wenn sich mehrere Objekte in einer Ebene befinden, wird diese Komponente innerhalb der Ebene nach hinten gestellt.
moveToFront(Component) Wenn sich mehrere Objekte in einer Ebene befinden, wird diese Komponente innerhalb der Ebene nach vorne gestellt.
getIndexOf(Component) Ermittelt den Index als int-Wert der ausgewählten Komponente.
remove(intIndex) Entfernt die Komponente mit dem übergebenen Index vom JLayeredPane.
removeAll() Entfernt alle Komponenten vom JLayeredPane.
nach oben Java4Beginners -- Seitenversion 1.0 -- Stand: 2017-05-18