0

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

我的主菜单类是:

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

我现在已经设置好了,以便我的 Game 类导入我的 Frame 类,但是当我尝试从我的游戏中制作 JFrame 显示元素时,什么也没有出现。所以我的问题是:

如何跨多个类使用一个 JFrame?

任何帮助深表感谢!

4

4 回答 4

1

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

查看如何使用 CardLayout以获得更多示例

于 2013-02-08T20:59:46.273 回答
0

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

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

switch( currentState )  {

   case introduction: 
        setContentPane(new IntroductionPanel());
        break;
    case insideGame:
        setContentPane( new GamePanel() );
    ...
    ...
    ...

}
于 2013-02-08T20:56:43.630 回答
0

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

于 2013-02-08T20:59:24.583 回答
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() {
        //...
    }
}
于 2013-02-08T20:49:57.143 回答