我正在开发游戏,我正在使用CardLayout在同一个JFrame中的不同JPanel之间切换。
问题:我有一个帮助面板,我可以按下主菜单面板中的按钮并按下gamePanel中的按钮。
我想要的是什么:
我希望能够在JButton
中放置helpPanel
(按下时)返回主菜单面板或游戏面板(取决于你是来自主菜单面板还是来自gamePanel) 。
我尝试了什么:我尝试将actionlistener
与.previous(container parent)
结合使用,但这只会让我回到JPanel
添加到helpPanel之前位置的CardLayout
。我也试过嵌套actionListeners
试图获得不同的情况,但这不起作用。
我搜索的内容:我在其他问题中搜索了解决方案,但总是在2个不同的JPanels
之间切换而不是3个。
有人能帮帮我吗?我发现这是一个非常困难的情况。
答案 0 :(得分:2)
阅读How to Use Card Layout上的Swing教程中的部分。它通过指定标识要显示的卡的字符串向您展示如何在卡之间切换。
答案 1 :(得分:0)
我最近一直在制作游戏菜单(你会看到这里的点点滴滴),其中一种方法就是为所有面板按钮设置一个共同的ActionListener。然后将其操作命令设置为具有特定的字符串。 在此示例中,overallgame是主CardLayout面板。 GAME,CREDITS和MAIN-MENU是用于在整体游戏面板中标题面板的字符串常量
ActionListener listener=new ActionListener()
{public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("start")){
//dummyframe.add(newgame);
//mainmenupanel=null;
CardLayout layout=(CardLayout)(overallgame.getLayout());//retrieves the overall layout
layout.show(overallgame, GAME);//uses it to switch to main game panel
newgame.requestFocus(true);//need to redirect focus to the game rather than original main menu
dummyframe.repaint();
}
else if(e.getActionCommand().equals("show credits")){
CardLayout layout=(CardLayout)(overallgame.getLayout());
layout.show(overallgame, CREDITS);
}
else if(e.getActionCommand().equals("switch to main")){
CardLayout layout=(CardLayout)(overallgame.getLayout());
layout.show(overallgame, MAIN_MENU);
}
else if(e.getActionCommand().equals("show chapter panel")){
CardLayout layout=(CardLayout)(overallgame.getLayout());
layout.show(overallgame, CHAPTERSTART);
}
else{
JOptionPane.showMessageDialog(null, "hey");
}
}
};

NewGame.setActionCommand("start");

要使面板具有可由CardLayout使用的标题,您必须在将面板添加到CardLayout时定义名称。这一行将一个名为mainmenupanel的JPanel添加到我的totalgame JPanel中,然后允许totalgame面板使用String常量MAIN_MENU引用它。
overallgame.add(mainmenupanel, MAIN_MENU);