2012-10-23 66 views
0

这里是问题。我有一个JApplet,在applet中有两个JPanel,panel1和panel2。每个面板都有一个标签,显示为“panel1”或“panel2”,每个面板都有一个称为“开关”的按钮。当我运行小程序时,我只想让panel1可见。当我点击开关按钮时,我希望panel1不可见(或消失),并且panel2可见。我还想要点击面板2中的开关按钮切换回面板1。谁能帮我这个?在JApplet中切换JPanel

public class MyApplet extends JApplet 
{ 
    private Panel1 panel1; 
    private Panel2 panel2; 

    public void init() 
    { 
     setLayout(new FlowLayout()); 

     panel1 = new Panel1(); 
     panel2 = new Panel2(); 

     add(panel1); 
     //add(panel2); 
    } 
} 

public class Panel1 extends JPanel 
{ 
    private JLabel label; 
    private JButton button; 

    public Panel1() 
    { 
     setLayout(new FlowLayout()); 

     label = new JLabel("Panel1"); 
     button = new JButton("Switch1"); 

     add(label); 
     add(button); 
    } 
} 

public class Panel2 extends JPanel 
{ 
    private JLabel label; 
    private JButton button; 

    public Panel2() 
    { 
     setLayout(new FlowLayout()); 

     label = new JLabel("Panel2"); 
     button = new JButton("Switch2"); 

     add(label); 
     add(button); 
    } 
} 

回答

1

向小程序添加一个“内容”,在该小程序中要切换面板进出。

设置此面板的布局管理器来CardLayout

添加您的其他面板的 “内容” 窗格中

content.add(aPanel, "PanelA"); 
content.add(bPanel, "PanelB"); 

使用CardLayout API切换面板...

cardLayout.show(content, "PanelB"); 

请通过How to Use CardLayout了解详情

+0

谢谢,但有没有办法做到这一点没有cardlayout? – tianz

+0

['Container#remove'](http://docs.oracle.com/javase/7/docs/api/java/awt/Container.html#remove%28java.awt.Component%29)和['Container#添加'](http://docs.oracle.com/javase/7/docs/api/java/awt/Container.html#add%28java.awt.Component%29) – MadProgrammer

+0

*“..有什么办法这样做没有cardlayout?“*是否有任何理由**不**使用'CardLayout'?在这些情况下将“为什么”添加到“什么”总是方便的。 –

0

将它们添加到小程序中,并将它们中的一个添加到setVisible(false)。

为按钮添加侦听器。

监听器将切换相应面板的setVisible。

+0

问题该按钮位于面板内部。我可以将面板本身设置为不可见,但如何将其他面板设置为可见? – tianz

+1

查看上面的CardLayout事物。面板像卡片一样堆叠在彼此的顶部。 – case1352