Newsgroup: it.comp.java
Titolo: CardLayout

Ho un problema con CardLayout, faccio un esempio per rendere più chiara la
situazione:
/**/
JPanel pannello=new Jpanel();
CardLayout cl=new CardLayout();
pannello.setLayout(cl);
cl.addLayoutComponent(pan1,"UNO");
cl.addLayoutComponent(pan2,"DUE");
/**/
'pan1'  e 'pan2' sono due altri pannelli contenenti vari oggetti.
Per visualizzare pan1 utilizzo   cl.show(pannello,"UNO")   ma non appare
nulla (allo stesso modo per pan2), vedo sempre e solo lo sfondo di
'pannello'.
Qualcuno sa dirmi dove sbaglio?
Grazie.

 nulla (allo stesso modo per pan2),
Non usare CardLayout.addLayoutComponent(pannello, nome).
Usa: pannelloContenitore.add(pannello, nome):
pannello.add(pan1,"UNO");
pannello.add(pan1,"DUE");
cl.show(pannello,"UNO")
Ciao Ciao
Kerol


Innanzitutto credo che sia stato un tuo errore di digitazione scrivere
'pannello.add(pan1,"DUE");' probabilmente volevi scrivere
'pannello.add(pan2,"DUE");'.
Comunque avevo già provato questa soluzione e il problema e' che anche
eseguendo 'cl.show(pannello,"UNO");' continuo a vedere tutti i campi di
'pan2' oltre a quelli di 'pan1'. Aiuto!!!!
Grazie.

 Grazie.
Strano, se posti un pò di codice è meglio.
Ti allego il corpo della classe che ho usato come prova:
        Container contentPane = getContentPane();
        final JPanel pannello=new JPanel();
        final CardLayout cl=new CardLayout();
        pannello.setLayout(cl);
        JPanel pan1=new JPanel();
        JPanel pan2=new JPanel();
        JButton btn1 = new JButton("Button 1");
        JButton btn4 = new JButton("Button 4");
        pan1.add(btn1);
        pan1.add(new JButton("Button 2"));
        pan1.add(new JButton("Button 3"));
        pan2.add(btn4);
        pan2.add(new JButton("Button 5"));
        pan2.add(new JButton("Button 6"));
        pannello.add(pan1,"UNO");
        pannello.add(pan2,"DUE");
        contentPane.add(pannello, BorderLayout.CENTER);
        cl.show(pannello, "UNO");
    btn1.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        cl.show(pannello, "DUE");
      }
    });
    btn4.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        cl.show(pannello, "UNO");
      }
    });
.........
.........
Se hai ancora dei problemi mandami un pò di codice.
Ciao ciao
Kerol
ker...@libero.it

Forse il problema e' risolto anche se non ho capito come!
La tua classe di prova non l'ho capita molto (sono alle prime armi con
queste classi) cmq guarda il seguente codice:
 /*--------------------------------*/
import java.awt.*;
import javax.swing.*;
public class Provacl extends Frame{
 JPanel pannello,pan1,pan2;
 Label lbl1=new Label("Primo"),
       lbl2=new Label("Secondo");
 Provacl(){
  setBackground(new Color(192,192,192));
  setSize(300,300);
  setLayout(new GridLayout(1,2,10,10));
  pannello=new JPanel();
  CardLayout cl=new CardLayout();
  pannello.setLayout(cl);
  pan1=new JPanel();
  pan1.setLayout(null);
  pan1.setBackground(new Color(192,192,192));
                lbl1.setBounds(16,56,88,16);
                pan1.add(lbl1);
                pannello.add(pan1,"UNO");
  pan2=new JPanel();
  pan2.setLayout(null);
  pan2.setBackground(new Color(192,192,192));
                lbl2.setBounds(16,32,88,16);
                pan2.add(lbl2);
                pannello.add(pan2,"DUE");
                add(pannello);
  show();
  cl.show(pannello,"UNO");  // -----> ISTRX
 }
 public static void main(String arg[]){
  new Provacl();
 }
}
/*-----------------------------*/
Con  questo codice vedo sia la scritta "Primo" che la scritta "Secondo", ma
se sostituisco la ISTRX con
'cl.show(pannello,"DUE")'
allora vedo solo la scritta "Secondo" e se in seguito scrivo
'cl.show(pannello,"UNO")'
allora vedo solo la scritta "Primo".
In pratica mi sembra che il primo show che eseguo debba necessariamente
riguardare l'ultimo pannello, perche'? E' forse un bug di Java oppure e' un
mio bug?
Cmq quando inseriro' la gestione degli eventi il tutto dovrebbe funzionare!!
A tal proposito ho già postato un altro msg con oggetto 'chiudere un frame',
magari potresti dargli una letta, la tua esperienza mi potrebbe essere
d'aiuto.
Ciao Kerol e grazie.


CUT
il codice dovrebbe andar bene......
Perchè usi componenti AWT insieme a componenti SWING?
Ti consiglio vivamente di usare le swing ovunque (JFrame, JLabel ....... ) onde evitare
probabili casini.
Usa getContentPane().setLayout(new GridLayout(1,2,10,10));
al posto di setLayout(new GridLayout(1,2,10,10));
Con le swing non è possibile (giustamente) associare un layout ad un JFrame.
Devi per forza ricavare la parte del frame dove inserirai i vari pannelli con il metodo getContentPane().
Spero di essere stato abbastanza chiaro.....
Ciao Ciao
Kerol