Esempio completo:Originariamente inviato da Salinas
Dimmi come si usa un CardLayout? Cos'è?
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.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(); } }); } }
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 .....

Rispondi quotando