import java.awt.*;
import java.awt.event.*;
class myFrame extends Frame
{
    Panel pMain,pTop,p1,p2,p3,p4;
    CardLayout card;
    Choice ch;
    myFrame(String s)
    {
        super(s);
    pTop=new Panel();
ch=new Choice();
ch.add("红");
ch.add("蓝");
ch.add("绿");
ch.add("黑");
pTop.add(ch);
p1=new Panel();
p1.setBackground(Color.red);
p2=new Panel();
p2.setBackground(Color.blue);
p3=new Panel();
p3.setBackground(Color.green);
p4=new Panel();
p4.setBackground(Color.black);
card=new CardLayout();
pMain=new Panel();
pMain.setLayout(card);
pMain.add("红",p1);
pMain.add("蓝",p2);
pMain.add("绿",p3);
pMain.add("黑",p4);
ch.addItemListener(new Ch_Lis());
this.addWindowListener(new Win_Lis());
this.add(pMain,BorderLayout.CENTER);
this.add(pTop,BorderLayout.NORTH);
this.setSize(300,300);
this.setBackground(Color.orange);
this.show();
    }
    private class Ch_Lis implements ItemListener
    {
      public void itemStateChanged(ItemEvent e)
      {
       if(((String)e.getItem()).equals("红"))
       card.show(pMain,"红");
       else if(((String)e.getItem()).equals("蓝"))
       card.show(pMain,"蓝");
       else if(((String)e.getItem()).equals("绿"))
       card.show(pMain,"绿");
       else
       card.show(pMain,"黑");
      
      }    }
   
    private class Win_Lis extends WindowAdapter
    {
public void windowClosing(WindowEvent e) {System.exit(0);}
    }
}
public class LayoutShow
{
    public static void main(String[] args)
    {
myFrame f=new myFrame("卡片布局");
        
    }
}

解决方案 »

  1.   

    还是用cardLayout比较好吧
    具体用法查API吧 好像是要new出个cardLayout的对象来 然后用addLayoutComponent()在上面加panel,加的时候给每个panel起个名字,最后在setLayout()的时候把刚才那个cardLayout当参数传进去,点击事件的时候直接用panel的名字调用cardLayout对象的show方法,应该是这样吧,记不太清了