在多个类中使用单个JFrame

时间:2013-02-08 20:35:00

标签: java swing user-interface jframe

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

我的主菜单的类是:

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

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

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

非常感谢任何帮助!

4 个答案:

答案 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)