2015-06-22 45 views
3

我想回到我的Java应用程序的主面板与jMenuItem,我的面板和其他东西都设置了CardLayout。所以我有3个面板,我希望能够使用这个菜单项返回到第一个面板开始一个新的分析。我尝试过使用属性setVisible而没有任何结果。任何建议?提前致谢。如何在java中返回我的主面板?

enter image description here

+4

使用一个控制器传递给每个面板,“知道”如何使导航工作,[例如](http://stackoverflow.com/questions/24296505/how-to-effectively-use-cardlayout- in-java-in-order-to-switch-from-panel-using-bu/24296872#24296872)或[例如](http://stackoverflow.com/questions/23352226/singleton-with-cardlayout-wont- show-card-when-another-class-calls-singleton-ins/23352348#23352348) – MadProgrammer

+0

如何从父容器中移除面板并使用revalidate()方法? –

+2

@JalalSordo:所以你会建议他放弃使用CardLayout,这是在Swing中交换视图的首选方式,而不是手工交换视图。不,谢谢。 –

回答

0

下面的例子可以帮助你。

import java.awt.CardLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 

public class cardLayout { 
    JFrame objFrm = new JFrame("CardLayout Demo"); 
    JPanel pnl1, pnl2, pnl3, pnlMain; 
    JMenuBar mBar; 
    JMenu mnu; 
    JMenuItem mnuItem; 
    public void show() { 
     pnl1 = new JPanel(new CardLayout()); 
     pnl1.add(new JLabel("Panle 1")); 
     pnl2 = new JPanel(new CardLayout()); 
     pnl2.add(new JLabel("Panle 2")); 
     pnl3 = new JPanel(new CardLayout()); 
     pnl3.add(new JLabel("Panle 3")); 

     pnlMain = new JPanel(); 
     pnlMain.setLayout(new CardLayout()); 

     pnlMain.add(pnl1); 
     pnlMain.add(pnl2); 
     pnlMain.add(pnl3); 

     objFrm.setLayout(new CardLayout()); 
     objFrm.add(pnlMain); 

     objFrm.setSize(300, 300); 
     mBar = new JMenuBar(); 
     mnu = new JMenu("Menu"); 
     mnuItem = new JMenuItem("Change Panel"); 
     mnuItem.addActionListener((java.awt.event.ActionEvent evt) -> { 
      ((CardLayout) pnlMain.getLayout()).next(pnlMain); 
     }); 
     mBar.add(mnu); 
     mnu.add(mnuItem); 
     objFrm.setJMenuBar(mBar); 
     objFrm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     objFrm.setVisible(true); 
    } 
    public static void main(String[] args) { 
     new cardLayout().show(); 
    } 
} 

起初,我加入三个Jpanels(PNL1,PNL2,pnl3)到JFrame中有卡的布局,并没有工作,并抛出错误。因此,我创建了一个带cardlayout的面板(pnlMain),并添加了所有三个面板。现在,它在菜单项单击事件中运行良好。