为什么这个程序中添加到p中的组件看不到,只能看到加入p1中的3个JButton 按钮?ChangePass_SYS p2,p4;Changepass p3;这2个都是定义好JPanel类(测试没有问题的);
import java.awt.*;
import java.awt.event.*;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;class exw extends JFrame implements ActionListener
{
CardLayout my;
JButton b1,b2,b3;
JPanel p,p1;
ChangePass_SYS p2,p4;Changepass p3;
exw()
{   Container con=this.getContentPane();
    my=new CardLayout();
con.setLayout(new BorderLayout());
p1=new JPanel();
b1=new JButton("上");
b2=new JButton("中");
b3=new JButton("下");
p1.add(b1);p1.add(b2);p1.add(b3);
b1.addActionListener(this);b2.addActionListener(this);b3.addActionListener(this);
p1.validate();

p=new JPanel();
p.setLayout(my);
p2=new ChangePass_SYS();//这个是用panel做的界面,测试过了没问题
p3=new Changepass();
p4=new ChangePass_SYS();
my.addLayoutComponent(p2, "p2");
my.addLayoutComponent(p3," p3");
my.addLayoutComponent(p4, "p4");

con.add(p1,BorderLayout.SOUTH);
con.add(p,BorderLayout.CENTER);

this.validate();      
this.addWindowListener(new WindowAdapter(){  
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
this.setBounds(200, 300, 400,400);  
this.setVisible(true);            

}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==b1)
{
my.first(p);
}
else if(e.getSource()==b2)
{
my.next(p);
}
else if(e.getSource()==b3)
{
my.last(p);
}
}
}
public class ex
{
public static void main(String args[])
{
System.out.println("htmmp");
new exw();
}
}

解决方案 »

  1.   

    把这三句
    my.addLayoutComponent(p2, "p2");
    my.addLayoutComponent(p3," p3");
    my.addLayoutComponent(p4, "p4");
    换成
    p.add 试一下布局最好使用ide进行操作
    比如netbean jb ec等可视化编辑
      

  2.   

    把这三句
    my.addLayoutComponent(p2, "p2");
    my.addLayoutComponent(p3," p3");
    my.addLayoutComponent(p4, "p4");
    换成
    p.add 试一下换了程序没法运行 出错了
      

  3.   

    没错   稍微改了下
    import java.awt.BorderLayout;
    import java.awt.CardLayout;
    import java.awt.Container;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;class exw extends JFrame implements ActionListener
    {
        CardLayout my;
        JButton    b1, b2, b3;
        JPanel     p, p1;
    //    ChangePass_SYS p2, p4;
    //    Changepass     p3;    exw()
        {
            Container con = this.getContentPane();
            my = new CardLayout();
            con.setLayout(new BorderLayout());
            p1 = new JPanel();
            b1 = new JButton("上");
            b2 = new JButton("中");
            b3 = new JButton("下");
            p1.add(b1);
            p1.add(b2);
            p1.add(b3);
            b1.addActionListener(this);
            b2.addActionListener(this);
            b3.addActionListener(this);
            p1.validate();        p = new JPanel();
            p.setLayout(my);
    //        p2 = new ChangePass_SYS();// 这个是用panel做的界面,测试过了没问题
    //        p3 = new Changepass();
    //        p4 = new ChangePass_SYS();
    //        my.addLayoutComponent(p2, "p2");
    //        my.addLayoutComponent(p3, " p3");
    //        my.addLayoutComponent(p4, "p4");
            JPanel p2 = new JPanel();
            p2.add(new JButton("1"));
            p.add(p2, "p2");
            
            JPanel p3 = new JPanel();
            p3.add(new JButton("2"));
            p.add(p3, "p3");
            
            JPanel p4 = new JPanel();
            p4.add(new JButton("3"));
            p.add(p4, "p4");
            con.add(p1, BorderLayout.SOUTH);
            con.add(p, BorderLayout.CENTER);        this.validate();
            this.addWindowListener(new WindowAdapter()
            {
                public void windowClosing(WindowEvent e)
                {
                    System.exit(0);
                }
            });
            this.setBounds(200, 300, 400, 400);
            this.setVisible(true);    }    public void actionPerformed(ActionEvent e)
        {
            if (e.getSource() == b1)
            {
                my.first(p);
            }
            else if (e.getSource() == b2)
            {
                my.next(p);
            }
            else if (e.getSource() == b3)
            {
                my.last(p);
            }
        }
    }public class ex
    {
        public static void main(String args[])
        {
            System.out.println("htmmp");
            new exw();
        }
    }