~Java4Beginners~
~Java4Beginners~

CardLayout

Beim CardLayout handelt es sich um eine Art Kartenstapel. Sämtliche Elemente werden auf einer Art Kartenstapel gesammelt, wobei das Erste Element, welches dem Layout hinzugefügt wird, auch das Element ist, welches angezeigt werden. Sämtliche anderen Elemente liegen unterhalb dieses Stapels und werden nicht angezeigt. Wir haben nur die Möglichkeit über Bedienelemente, an diese Elemente zu kommen.

Das CardLayout stellt uns 2 Konstruktor zur Verfügung. Einen Standardkonstruktor und einen Konstruktor, welcher 2 int-Werte als Parameter erwartet.

CardLayout(hgab, vgab)
  • hgab - Horizontaler Abstand
  • vgab - Vertikaler Abstand

Beispielprogramm

In folgendem Beispielprogramm sind Bedienelemente und Action-Listener eingebaut, deren Funktionsweise erst in einem folgenden Kapitel erläutert werden. Aber diese brauchen uns im Moment auch nicht zu interessieren. Das wichtige sind die benötigten Methoden des CardLayouts, um die verschiedenen Elemente aufzurufen

import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSplitPane;

/**
 * Beispielprogramm CardLayout
 * @author Markus Badzura
 */
public class LayoutCard extends JFrame
{
    public void FormatCardL()
    {
        setTitle("Beispielprogramm CardLayout");
        setSize(500,500);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JSplitPane js = new JSplitPane();
        JPanel panelNav = new JPanel();
        JPanel panelButton = new JPanel();
        panelButton.add(new JButton("Button"));
        JPanel panelLabel = new JPanel();
        panelLabel.add(new JLabel("Label"));
        JPanel panelCard = new JPanel(new CardLayout());
        panelCard.add(panelButton,"Buttonpanel");
        panelCard.add(panelLabel,"Labelpanel");
        JButton btbt = new JButton("Button");
        JButton btlb = new JButton("Label");
        panelNav.add(btbt);
        btbt.setBounds(20,20,100,25);
        panelNav.add(btlb);
        btlb.setBounds(20,50,100,25);
        js.setLeftComponent(panelNav);
        js.setRightComponent(panelCard);
        add(js);
        setVisible(true);
        
        btbt.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                CardLayout cl = (CardLayout)(panelCard.getLayout());
                cl.show(panelCard, "Buttonpanel");
            }
        });

        btlb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                CardLayout cl = (CardLayout)(panelCard.getLayout());
                cl.show(panelCard, "Labelpanel");
            }
        });        
        
    }
    
    public static void main(String[] args) {
        LayoutCard fc = new LayoutCard();
        fc.FormatCardL();
    }
}
Unser kleines Beispielprogramm liefert folgende Fensteransicht beim Start.


JPanel panelCard = new JPanel(new CardLayout());
Hier erzeugen wir einen Container von der Klasse JPanel, welchem wir im Konstruktor direkt das CardLayout zuweisen. Verwendet wurde der Standardkonstruktor.

panelCard.add(panelButton,"Buttonpanel");
Unserem panelCard wird über die add-Anweisung das Objekt panelButton übergeben. Mit der String-Angabe "Buttonpanel" geben wir unserem Layout-Objekt einen eindeutigen Namen. Dieser wird benötigt, um später die Objekte, die im Layout hinzugefügt sind, eindeutig anzusprechen. Denken Sie an ein Kartenspiel. In dem Kartenstapel befinden sich 32 Karten. Nur die oberste Karte ist sichtbar. Soll eine andere Karte oben liegen, so lässt sich diese eindeutig bezeichnen (z.Kreuz 7 oder Pik Dame usw.).

CardLayout cl = (CardLayout)(panelCard.getLayout());
Diese Code-Zeile befindet sich im Action-Listener und sorgt dafür, dass wir einer Objetkvariablen vom Typ CardLayout einen Wert zuweisen. Über Typecasting (CardLayout) und der getMethode getLayout()vom Objekt panelCard stellen wir sicher, dass unsere Objektvariable cl auch ein CardLayout, und zwar das CardLayout von unserem Container panelCard erhält.

cl.show(panelCard, "Buttonpanel");
Die Klasse CardLayout enthält eine Methode show(Container, name). Mit dem Parameter Container wird der Container angesprochen, welcher das CardLayout als Layoutmanager enthält. Somit wird sichergestellt, dass das gewünschte Objekt dann auch im gewünschten Bereich sichtbar wird. Mit Name wird als String der Name des Objektes angesprochen, der angezeigt werden soll. (Deshalb bei der add-Anweisung der zusätzliche String.)

Methoden

Hier noch eine Übersicht über gängige Methoden der Klasse CardLayout.
Methode Erklärung
addLayoutComponent(Komponent, name) Fügt dem Layout eine Komponente hinzu, welche mit einem Namen eindeutig bezeichnet wird.
first(Container) Das als erstes hinzugefügte Objekt wird angesprochen.
getHgab() Gibt einen int-Wert zurück vom horizontalen Abstand.
getVgab() Gibt einen int-Wert vom vertikalen Abstand zurück.
last(Container) Spricht die als letzte hinzugefügte Layoutkomponente an.
next(Container) Spricht von der aktuell sichtbaren Layoutkomponente die als nächstes hinzugefügte Layoutkomponente an.
previous(Container) Spricht von der aktuell sichbaren Lyoutkomponente die Komponente an, die vor der aktuellen hinzugefügt wurde.
setHgap(intwert) Setzt den horizontalen Abstand zum Containerrand.
setVgap(intwert) Setzt den vertikalen Abstand zum Containerrand.
nach oben Java4Beginners -- Seitenversion 1.0 -- Stand: 2017-05-18