用于游戏场景的多个JFrames

问题描述:

如果标题的表述有误,我很抱歉。用于游戏场景的多个JFrames

我最近开始了一个新的游戏项目,并考虑过在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要创建我不能启动一个实例,并设置为卡

之所以问的是我知道什么时候做游戏编程在Java中你做了很多的事情没有考虑好的做法(比如设置位置和整体没有使用布局管理)

为了帮助我的MainMenu UI澄清开始的actionPerformed()方法中游戏JButton我有:

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() { 
     ... 
    } 
} 

当游戏结束了在战斗的JFrame:

class BattleField extends JFrame { 
    ... 
    private void gameOver() { 
     MainMenu.getInstance().setVisible(true); 
     dispose();//dipsose of Battle JFrame 
    } 
    ... 
} 
+2

请参阅[使用多个JFrames,好/坏实践?](http://*.com/a/9554657/418556) –

+0

@AndrewThompson谢谢,但正如我所说,我知道它不是好的做法,但当创建游戏时,我们经常需要模糊这些好的和不好的做法以实现我们所需要的。正如在问题中所说的我不能使用CardLayout,并且我陈述了为什么 –

+0

“自己的EDT”是什么?只有一个EDT可用于绘制所有组件 – MadProgrammer

为了促进愿意suspension of disbelief,以及简单的品种,游戏常常推用户界面设计以新颖的方式。实际上,多个框架的吸引力可能不是而不是大于风险。除了引用的众所周知的问题here之外,我还会加上梦魇here

如果CardLayout不合适,Buttons是一个简单调用resetGame()中的removeAll()的示例。

+1

+1谢谢你的问题解决,实际上选择后者('removeAll()'),我可以动态地做到这一点(每次创建一个新的面板)谢谢你! –