跨多个类使用单个JFrame



我正在用Java开发一款视频游戏,到目前为止,它有一个主菜单类和一个游戏类。正如我现在所设置的,每个类都使用自己的JFrame,这意味着当用户单击"开始游戏"时,主菜单JFrame关闭,游戏JFrame打开。显然,这并不理想,我希望两个类都使用相同的JFrame,但我真的不知道该怎么做,互联网搜索也没有帮助。

我的主菜单的类别是:

public class Frame extends javax.swing.JFrame { ... }

我现在已经设置好了,这样我的Game类就可以导入我的Frame类,但当我试图从游戏中制作JFrame显示元素时,什么都不会出现。所以我的问题是:

如何在多个类中使用一个JFrame?

非常感谢您的帮助!

不需要将主框架的引用传递给每个子面板,这可能会暴露出你不希望他们访问的程序部分(例如),你应该使用CardLayout之类的东西,并将主框架用作主显示集线器,根据的需要切换面板

查看如何使用CardLayout了解更多示例

与其让每个类都是自己的框架,不如让一个框架由几个类操作

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

在整个游戏中应该只使用一帧。并且应该有许多用于不同内容的JPanel。

决定内容和切换应该是这样的:

switch( currentState )  {
   case introduction: 
        setContentPane(new IntroductionPanel());
        break;
    case insideGame:
        setContentPane( new GamePanel() );
    ...
    ...
    ...
}

使用cardLayout切换面板http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html

相关内容

  • 没有找到相关文章

最新更新