Java Swing JTabbedPane
Willemers Informatik-Ecke

Ein JTabbedPane implementiert die Reiter auf einem Dialog, mit dem sich der Dialog umschalten lässt. Dazu erhält der JTabbedPane im Konstruktor zwei Parameter. Der erste ist ein String, der die Beschriftung des Reiters enthält und der zweite ist ein JPanel, das den Aufbau der zugehörigen Seite enthält.

Die Ausdehnung des JTabbedPane richtet sich nach dem größten betreuten Panel.

Es soll ein Programm mit zwei Tabs entstehen. Der eine Tab enthält ein Texteingabefeld. Der andere Tab enthält einen Button.

import java.awt.Container;
import java.awt.BorderLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class TabbedCards extends JFrame {

    TabbedCards() {
        Container pane = this.getContentPane();

        JPanel buttonDialog = new JPanel();
        buttonDialog.add(new JButton("Drück mich"));

        // Baue einen zweiten Dialog mit einer Eingabezeile
        JPanel eingabeDialog = new JPanel();
        eingabeDialog.add(new JLabel("Name:"));
        eingabeDialog.add(new JTextField("", 25));

        // Hier wird die JTabbedPane angelegt und bestückt
        JTabbedPane tabbedPane = new JTabbedPane();
        tabbedPane.addTab("Eingabe", eingabeDialog);
        tabbedPane.addTab("Druck", buttonDialog);
        pane.add(tabbedPane, BorderLayout.CENTER);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setVisible(true);
    }

    public static void main(String[] args) {
        new TabbedCards();
    }
}
Beim Einbinden in das Eltern-Panel sorgt das Borderlayout.CENTER dafür, dass das JTabbedPane sich auf die volle Fläche ausbreitet.

Ereignisse

Um den Inhalt eines Unterpanels zu aktualisieren, will das Programm vielleicht erfahren, wenn der Benutzer einen der Reiter anklickt. Dazu muss ein ChangeListener aktiviert werden.
tabbedPane.addChangeListener(this);

Dann muss die Klasse ChangeListener implementieren.

public class MeinFrame extends JFrame implements ChangeListener {

Ein ChangeListener muss die Methode stateChanged() implementieren. Hier ein Beispiel:

@Override
public void stateChanged(ChangeEvent ev) {
    if (ev.getSource()==tabbedPane) {
        if (tabbedPane.getSelectedIndex()==0) { // AenderungsTab
            // ...
        } else if (tabbedPane.getSelectedIndex()==1) { // AenderungsTab
            // ...
        }
    }
}

Etwas komprimierter kann dies auch so erfolgen, dass der ChangeListener direkt erzeugt wird.

tabbedPane.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
        if (tabbedPane.getSelectedIndex()==0) { // AenderungsTab
            // ...
        } else if (tabbedPane.getSelectedIndex()==1) { // AenderungsTab
            // ...
        }
    }
});