我正在开发一个Java游戏,到目前为止,它有一个主菜单类和一个游戏类。正如我现在设置的那样,每个类都使用自己的JFrame,这意味着当用户点击“开始游戏”时,主菜单JFrame关闭,游戏JFrame打开。显然这并不理想,我希望两个类都使用相同的JFrame,但是我真的不知道如何解决这个问题,互联网搜索也没有用。
我的主菜单的类是:
public class Frame extends javax.swing.JFrame {
...
}
我现在设置它以便我的Game类导入我的Frame类,但是当我尝试从我的游戏中制作JFrame显示元素时没有出现。所以我的问题是:
如何跨多个类使用单个JFrame?
非常感谢任何帮助!
答案 0 :(得分:1)
而不是需要将主框架的引用传递给每个子面板,这可能会暴露您不希望它们访问的程序的某些部分(作为示例),您应该使用类似于CardLayout并使用主框架作为主显示中心,根据需要切换面板
查看How to use CardLayout了解更多示例
答案 1 :(得分:0)
不是让每个类都是自己的框架,而是可以有一个框架,有几个类操作它。我可能会设置这样的东西:
public class MainFrame extends JFrame {
public MainFrame() {
super("Cool Game!");
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
}
public class Game {
private final MainFrame mainFrame;
public Game(final MainFrame mainFrame) {
this.mainFrame = mainFrame;
mainFrame.setContentPane(createGamePanel());
}
private JPanel createGamePanel() {
//...
}
}
public class MainMenu {
private final MainFrame mainFrame;
public MainMenu(final MainFrame mainFrame) {
this.mainFrame = mainFrame;
}
public void showMainMenu() {
mainFrame.setContentPane(createMainMenuPanel());
}
private JPanel createMainMenuPanel() {
//...
}
}
答案 2 :(得分:0)
你应该在整场比赛中只使用一帧。并且应该有许多不同内容的JPanel。
决定内容和切换应该是这样的:
switch( currentState ) {
case introduction:
setContentPane(new IntroductionPanel());
break;
case insideGame:
setContentPane( new GamePanel() );
...
...
...
}
答案 3 :(得分:0)
使用cardLayout切换面板 http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html