3
我想回到我的Java应用程序的主面板与jMenuItem,我的面板和其他东西都设置了CardLayout。所以我有3个面板,我希望能够使用这个菜单项返回到第一个面板开始一个新的分析。我尝试过使用属性setVisible而没有任何结果。任何建议?提前致谢。如何在java中返回我的主面板?
我想回到我的Java应用程序的主面板与jMenuItem,我的面板和其他东西都设置了CardLayout。所以我有3个面板,我希望能够使用这个菜单项返回到第一个面板开始一个新的分析。我尝试过使用属性setVisible而没有任何结果。任何建议?提前致谢。如何在java中返回我的主面板?
下面的例子可以帮助你。
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),并添加了所有三个面板。现在,它在菜单项单击事件中运行良好。
使用一个控制器传递给每个面板,“知道”如何使导航工作,[例如](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
如何从父容器中移除面板并使用revalidate()方法? –
@JalalSordo:所以你会建议他放弃使用CardLayout,这是在Swing中交换视图的首选方式,而不是手工交换视图。不,谢谢。 –