在使用CardLayout时总是出错。谢谢!
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Frm extends JFrame{
JPanel curr;

JPanel jp1=new JPanel();
JPanel jp2=new JPanel();
JPanel jp3=new JPanel();
JPanel jp4=new JPanel();
JLabel lab1=new JLabel();
JLabel lab2=new JLabel();
JLabel lab3=new JLabel();
JButton but1=new JButton();
JButton but2=new JButton();

BorderLayout borderLayout=new BorderLayout();
CardLayout cardLayout=new CardLayout();

Frm(){
this.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
jIni();
}

private void jIni(){
curr=(JPanel)this.getContentPane();
this.setSize (300,300);
this.setLocation (300,300);
curr.setLayout(borderLayout);
curr.add(jp1,BorderLayout.CENTER);
curr.add(jp2,BorderLayout.SOUTH);
jp1.setBackground (new Color(255,0,0));
jp2.setBackground (new Color(0,255,0));
jp2.add (but1,BorderLayout.NORTH);
jp2.add (but2,BorderLayout.EAST);
but1.setText ("next");
but2.setText ("previous");
jp1.setLayout (cardLayout);
jp1.add (jp3,"j3");
jp1.add (jp4,"j4");

jp3.add (lab1);
jp4.add (lab2);

lab1.setText ("No.1");
lab2.setText ("No.2");

but1.addActionListener (new ActionListener(){
public void actionPerformed(ActionEvent e){
but1_Click(e);
}
});

but2.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
but2_Click(e);
}
});
}

private void but1_Click(ActionEvent e){
cardLayout.show(jp3,"j3");
}

private void but2_Click(ActionEvent e){
cardLayout.show(jp4,"j4");
}

public static void main(String[] args){
     Frm frm=new Frm();
    
     frm.show ();
    }
}

解决方案 »

  1.   

    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    class Frm extends JFrame
    {
        JPanel curr;    JPanel jp1 = new JPanel();
        JPanel jp2 = new JPanel();
        JPanel jp3 = new JPanel();
        JPanel jp4 = new JPanel();
        JLabel lab1 = new JLabel();
        JLabel lab2 = new JLabel();
        JLabel lab3 = new JLabel();
        JButton but1 = new JButton();
        JButton but2 = new JButton();    BorderLayout borderLayout = new BorderLayout();
        CardLayout cardLayout = new CardLayout();    Frm()
        {
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            jIni();
        }    private void jIni()
        {
            curr = (JPanel)this.getContentPane();
            this.setSize(300, 300);
            this.setLocation(300, 300);
            
            curr.setLayout(borderLayout);
            curr.add(jp1, BorderLayout.CENTER);
            curr.add(jp2, BorderLayout.SOUTH);
            
            jp2.setBackground(new Color(0, 255, 0));
            jp2.add(but1, BorderLayout.NORTH);
            jp2.add(but2, BorderLayout.EAST);
            
            but1.setText("next");
            but2.setText("previous");
            
            lab1.setText("No.1");
            lab2.setText("No.2");
            
            jp3.add(lab1);
            jp4.add(lab2);
            
            jp1.setBackground(new Color(255, 0, 0));
            jp1.setLayout(cardLayout);
            jp1.add("j3", jp3);
            jp1.add("j4", jp4);        but1.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    but1_Click(e);
                }
            });        but2.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent e)
                {
                    but2_Click(e);
                }
            });
        }    private void but1_Click(ActionEvent e)
        {
           ( (CardLayout) jp1.getLayout()).show(jp1, "j4"); //card的父容器是jp1
        }    private void but2_Click(ActionEvent e)
        {
           ( (CardLayout) jp1.getLayout()).show(jp1, "j3");
        }    public static void main(String[] args)
        {
            Frm frm = new Frm();        frm.setVisible(true);
        }
    }