如果标题措辞有点不对,我很抱歉。
我最近开始了一个新的Game项目,并考虑过在Java中使用多个JFrame
。
原因是我的游戏有2 JFrame
s:
1)主菜单(单身)
2)战斗。
现在MainMenu JFrame
将在其自己的EDT上初始化战斗JFrame
,然后通过setVisible(false)
隐藏自己,当游戏结束时setVisible(true)
可以从MainMenu框架单兵上的战斗框架。
注意:我这样做的原因是MainMenus EDT可以重新用于Battle JFrame
,因此只有1个EDT而是2个JFrame。为了防止战斗帧被激活(因为在相同的EDT上关闭之后),我做setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
问题:
这是允许的还是有更好的方法?
我想到的是CardLayout
,但是因为每次用户按下“开始GamePanel
时都必须创建新的JButton
”我无法启动单个实例并将其设置为卡< / p>
询问的原因是我知道在使用Java进行游戏编程时你会做很多不考虑好习惯的事情(比如设置位置和整体不使用LayoutManager)
为了帮助在我的MainMenu UI中澄清开始游戏 JButton
的actionPerformed()方法,我有:
class MainMenu extends JFrame implements ActionListener {
...
public void actionPerformed(..){
NarutoGame narutoGame = null;
narutoGame = new NarutoGame(...);
narutoGame.setVisible(true);//running in MainMenu EDT
//set this panels containing frame (MainMenu) to not visible
}
...
MainMenu getInstance() {
...
}
}
当Battle JFrame游戏结束时:
class BattleField extends JFrame {
...
private void gameOver() {
MainMenu.getInstance().setVisible(true);
dispose();//dipsose of Battle JFrame
}
...
}
答案 0 :(得分:2)
为了培养自愿的suspension of disbelief,以及简单的多样性,游戏经常以新颖的方式推动用户界面设计。在实践中,多个框架的吸引力可能不超过风险。除了引用的众所周知的问题here之外,我还要加上引用的噩梦here。
如果CardLayout
不合适,Buttons
就是一个仅在removeAll()
中调用resetGame()
的示例。