public class Pinfo extends WindowAdapter implements ActionListener,
ItemListener {
Frame f; Panel p1, p2, p20, p21, p22, p23, p3, p31, p32, p33, p4, p5; Button b1, b2, b3, b4, b5, b6; Label lb1, lb2, lb3, lb4, lb5, lb6, lb7, lb8, lb9, lb10, lb11, lb12, lb13,
lb14, lb15, lb16, lb17, lb18; TextField tf1, tf2, tf3, tf4, tf5, tf6, tf7, tf8, tf9, tf10, tf11, tf12,
tf13, tf14, tf15, tf16, tf17, tf18; List ls1, ls2, ls3; int it1, it2, it3; String str1, str2, str3; CardLayout ca = new CardLayout(); CardLayout cb = new CardLayout(); public static void main(String args[]) {
(new Pinfo()).display();
} public void display() {
f = new Frame("出版物管理系统");
f.setSize(550, 450);
f.setLocation(200, 150);
f.setBackground(Color.cyan);
f.setLayout(new BorderLayout());
p1 = new Panel(); // 上部面板
p2 = new Panel(); // 中部大面板
f.add(p2, BorderLayout.CENTER);
p5 = new Panel(); // 底部面板 b1 = new Button("书籍");
b1.addActionListener(this);
b2 = new Button("CD");
b2.addActionListener(this);
b3 = new Button("磁带");
b3.addActionListener(this);
p1.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 10));
p1.add(b1);
p1.add(b2);
p1.add(b3);
f.add(p1, BorderLayout.NORTH);
p2.setLayout(new GridLayout(1, 2, 0, 50)); p20 = new Panel();
p20.setLayout(cb); // 框架f左中部分卡片布局
p21 = new Panel(new BorderLayout());
p22 = new Panel(new BorderLayout());
p23 = new Panel(new BorderLayout());
p20.add(p21, "书籍");
p20.add(p22, "CD");
p20.add(p23, "磁带");
p2.add(p20);
ls1 = new List();
ls2 = new List();
ls3 = new List();
ls1.addItemListener(this);
ls2.addItemListener(this);
ls3.addItemListener(this);
p21.add(ls1);
p22.add(ls2);
p23.add(ls3); p3 = new Panel(); // 中部右面板
p3.setLayout(ca); // 框架f右半部分卡片布局
p31 = new Panel();
p32 = new Panel();
p33 = new Panel();
p3.add(p31, "书籍卡片");
p3.add(p32, "CD卡片");
p3.add(p33, "磁带卡片");
p2.add(p3);
p31.setLayout(new GridLayout(6, 1, 0, 30));// 关于书籍卡片的设置
lb1 = new Label("书名");
lb1.setAlignment(Label.CENTER);
tf1 = new TextField(20);
lb2 = new Label("作者");
lb2.setAlignment(Label.CENTER);
tf2 = new TextField(20);
lb3 = new Label("出版社");
lb3.setAlignment(Label.CENTER);
tf3 = new TextField(20);
lb4 = new Label("价格");
lb4.setAlignment(Label.CENTER);
tf4 = new TextField(20);
lb5 = new Label("出版日期");
lb5.setAlignment(Label.CENTER);
tf5 = new TextField(20);
lb6 = new Label("ISBN");
lb6.setAlignment(Label.CENTER);
tf6 = new TextField(20);
p31.add(lb1);
p31.add(tf1);
p31.add(lb2);
p31.add(tf2);
p31.add(lb3);
p31.add(tf3);
p31.add(lb4);
p31.add(tf4);
p31.add(lb5);
p31.add(tf5);
p31.add(lb6);
p31.add(tf6); p32.setLayout(new GridLayout(6, 1, 0, 30));// 关于CD卡片的设置
lb7 = new Label("CD名");
lb7.setAlignment(Label.CENTER);
tf7 = new TextField(20);
lb8 = new Label("演唱者");
lb8.setAlignment(Label.CENTER);
tf8 = new TextField(20);
lb9 = new Label("出版社");
lb9.setAlignment(Label.CENTER);
tf9 = new TextField(20);
lb10 = new Label("价格");
lb10.setAlignment(Label.CENTER);
tf10 = new TextField(20);
lb11 = new Label("发行者");
lb11.setAlignment(Label.CENTER);
tf11 = new TextField(20);
lb12 = new Label("ISRC");
lb12.setAlignment(Label.CENTER);
tf12 = new TextField(20);
p32.add(lb7);
p32.add(tf7);
p32.add(lb8);
p32.add(tf8);
p32.add(lb9);
p32.add(tf9);
p32.add(lb10);
p32.add(tf10);
p32.add(lb11);
p32.add(tf11);
p32.add(lb12);
p32.add(tf12); p33.setLayout(new GridLayout(6, 1, 0, 30));// 关于磁带卡片的设置
lb13 = new Label("磁带名");
lb13.setAlignment(Label.CENTER);
tf13 = new TextField(20);
lb14 = new Label("演唱者");
lb14.setAlignment(Label.CENTER);
tf14 = new TextField(20);
lb15 = new Label("出版社");
lb15.setAlignment(Label.CENTER);
tf15 = new TextField(20);
lb16 = new Label("价格");
lb16.setAlignment(Label.CENTER);
tf16 = new TextField(20);
lb17 = new Label("发行者");
lb17.setAlignment(Label.CENTER);
tf17 = new TextField(20);
lb18 = new Label("ISRC");
lb18.setAlignment(Label.CENTER);
tf18 = new TextField(20);
p33.add(lb13);
p33.add(tf13);
p33.add(lb14);
p33.add(tf14);
p33.add(lb15);
p33.add(tf15);
p33.add(lb16);
p33.add(tf16);
p33.add(lb17);
p33.add(tf17);
p33.add(lb18);
p33.add(tf18); p5.setLayout(new FlowLayout(FlowLayout.CENTER, 50, 10));// 底部小面板
b4 = new Button("添加");
b4.addActionListener(this);
b5 = new Button("修改");
b5.addActionListener(this);
b6 = new Button("删除");
b6.addActionListener(this);
p5.add(b4);
p5.add(b5);
p5.add(b6);
f.add(p5, BorderLayout.SOUTH);
f.addWindowListener(this);
f.setVisible(true);
} public void windowClosing(WindowEvent e) {
System.exit(0);
} public void itemStateChanged(ItemEvent ie) {
it1 = ls1.getSelectedIndex();
it2 = ls2.getSelectedIndex();
it3 = ls3.getSelectedIndex(); } private Panel showWhat = null; public void actionPerformed(ActionEvent e) {
if (e.getSource() == b1) // 点击书籍按钮,切换到书籍界面
{
ca.show(p3, "书籍卡片");
showWhat = p31;
} if (e.getSource() == b2) // 切换到CD界面
{
ca.show(p3, "CD卡片");
showWhat = p32;
} if (e.getSource() == b3) // 切换到磁带界面
{
ca.show(p3, "磁带卡片");
showWhat = p32;
}
if (e.getSource() == b4)// 添加
{
if (showWhat == p31) {
// TODO 自己补
}
if (showWhat == p32) {
//  TODO 自己补
}
if (showWhat == p33) {
//  TODO 自己补
} }
if (e.getSource() == b5)// 修改
{
if (showWhat == p31) {
//  TODO 自己补
}
if (showWhat == p32) {
//  TODO 自己补
}
if (showWhat == p33) {
//  TODO 自己补
}
}
if (e.getSource() == b6) {
if (showWhat == p31) {
//  TODO 自己补
}
if (showWhat == p32) {
//  TODO 自己补
}
if (showWhat == p33) {
//  TODO 自己补
}
} }}

解决方案 »

  1.   

    CardLayout.show(parent,name)中parent必须是使用这个layout的主件:
    这个是其代码:
        void checkLayout(Container parent) {
    if (parent.getLayout() != this) {
        throw new IllegalArgumentException("wrong parent for CardLayout");
    }
        }可以看出为什么你上面会出错,另外你的逻辑有问题,如这种代码:
    if (e.getSource()==b3) //切换到磁带界面
    { ca.show(p33,"磁带卡片");
    cb.show(p20,"磁带");
    if(e.getSource()==b4)//添加
    {str1=tf13.getText()+" "+tf14.getText()+" "+tf15.getText()+" "+tf16.getText()+" "+tf17.getText()+" "+tf18.getText();
    ls3.add(str3);
    }
    其中e.getSource都已经等于b3了,还怎么有可能等于b3呢。