//程序 
//package Test_Swing;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class CLayoutWindow extends JFrame implements ActionListener 
{
/**
 * 
 */
private static final long serialVersionUID = 2;
/**
 * @param args
 * 2011.10.15 考研班导学课,数学 ,听过已经 ,今天天气很不赖
 * 就是有点冷 ,学习 制作 计算器 初级的 
 */
JPanel cards;
CardLayout cl = new CardLayout();

public CLayoutWindow(){

setLayout(new BorderLayout());
JPanel cp = new JPanel();
JButton jb1 = new JButton("switch the card");
jb1.addActionListener(this);
cp.add(jb1);
add("North",cp);

cards = new JPanel();
cards.setLayout(cl);
JPanel j1 = new JPanel();
j1.add(new JButton("1"));
j1.add(new JButton("2"));
j1.add(new JButton("3"));

JPanel j2 = new JPanel();
j2.add(new JTextField("wjj"),20);

cards.add(j1);
cards.add(j2);

add("Center",cards);
}

public void actionPerformed(ActionEvent e){
cl.next(cards);
}

public static void main(String args[]) {
         CLayoutWindow c = new CLayoutWindow();
         c.setTitle("my first swing");
         c.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         c.pack();
         c.setVisible(true);
}
}
//程序 
//错误
  Exception in thread "main" java.lang.IllegalArgumentException: illegal component position
at java.awt.Container.addImpl(Container.java:1004)
at java.awt.Container.add(Container.java:391)
at CLayoutWindow.<init>(CLayoutWindow.java:36)
at CLayoutWindow.main(CLayoutWindow.java:49)//错误

解决方案 »

  1.   

    参数匹配有误add("North",cp);//需换成add(BorderLayout.NORTH,cp);
    add("Center",cards);//需换成add(BorderLayout.CENTER,cards);BorderLayout.NORTH是个常量,类型为int行。
    add()方法入参,第一个是int行,你用字符串"North"肯定错误。
      

  2.   

    是那两句 cards.add(p1)  
            cards.add(p2)
      出了问题 
    改成  cards.add("aa",p1)  cards.add("aa",p2) 
    就ok了
      

  3.   

    BorderLayout布局错了。
    add("North",cp)改成add(cp,BorderLayout.NORTH);
    add("Center",cards)改成add(cards,BorerLayout.CENTER);好像跟一楼重复了 
      

  4.   

    java.lang.IllegalArgumentException : 非法参数
      

  5.   

    布局 的参数错了,你用的是 borderlayout 布局方式, 布局的时候 就得这样
    add(component c,borderlayout.north/west/south/east);