Originariamente inviato da Salinas
Dimmi come si usa un CardLayout? Cos'è?
Esempio completo:

codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class TestFrame extends JFrame implements PageController {
    private Container contentPane;
    private CardLayout cardLayout;

    public TestFrame() {
        super("Test");
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(400, 300);

        cardLayout = new CardLayout();

        contentPane = getContentPane();
        contentPane.setLayout(cardLayout);
        contentPane.add(new PrimaPagina(this), "pag1");
        contentPane.add(new SecondaPagina(this), "pag2");
    }

    public void attivaPrimaPagina() {
        cardLayout.show(contentPane, "pag1");
    }

    public void attivaSecondaPagina() {
        cardLayout.show(contentPane, "pag2");
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new TestFrame().setVisible(true);
            }
        });
    }
}


interface PageController {
    void attivaPrimaPagina();
    void attivaSecondaPagina();
}


class PrimaPagina extends JPanel {
    private PageController pageCtrl;

    public PrimaPagina(PageController pageController) {
        pageCtrl = pageController;
        setLayout(new FlowLayout());
        setBackground(new Color(255, 192, 192));

        JButton b = new JButton("Seconda pagina");

        add(new JLabel("Prima pagina"));
        add(b);

        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                pageCtrl.attivaSecondaPagina();
            }
        });
    }
}


class SecondaPagina extends JPanel {
    private PageController pageCtrl;

    public SecondaPagina(PageController pageController) {
        pageCtrl = pageController;
        setLayout(new FlowLayout());
        setBackground(new Color(255, 255, 192));

        JButton b = new JButton("Prima pagina");

        add(new JLabel("Seconda pagina"));
        add(b);

        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                pageCtrl.attivaPrimaPagina();
            }
        });
    }
}
In questo esempio i pulsanti per il cambio della pagina sono nei pannelli, quindi i pannelli dovrebbero "sapere" come cambiare pagina. Per evitare troppo accoppiamento tra i pannelli e il frame ho "disaccoppiato" la cosa definendo una interfaccia PageController che ha solo i due metodi per attivare una certa pagina. I pannelli quindi non "vedono" il TestFrame ma solo una semplice interfaccia.

Se i controlli (pulsanti o altro) per cambiare la pagina fossero fuori dai pannelli, pensa ad esempio ad un classico "wizard" con i pulsanti "Avanti" e "Indietro" messi comuni nel frame, allora sarebbe ancora più semplice, perché solo il frame deve controllare il cambio della pagina.

Non so quanto ti sia chiaro .... lo ripeto, è solo questione di "design" delle classi, sfruttare la OOP, "incapsulazione", "astrazione" e altro .....