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 .....