Java-如果单击了按钮,则再次运行游戏,但游戏仍在进行中

时间:2018-12-05 22:21:23

标签: java

我有一个扩展JFrame的Window类。该窗口具有扩展JPanel的Game类的实例。窗口将游戏存放在JPanel中,并相应地显示它。游戏使用run()方法运行,直到满足残局标准为止。

我必须实现一个按钮(在JMenu中),无论我是否完成游戏,只要我单击它,它就会重新启动游戏。

如何从Window类重新启动游戏?我尝试将EventListener添加到JMenu按钮,并且在单击并发生以下情况时设法使游戏重新启动: 游戏重新启动(在后台运行良好),但未显示任何内容(显示了先前游戏的最后一个“帧”)。在EventListener范围结束之后-因为我从那里调用的新游戏结束了-所以显示了新游戏的最后一个“帧”。简而言之:出于某种原因,当从EventListener的作用域调用时,它什么也不显示。

Barebones窗口类:

public class Window extends JFrame implements ActionListener {

Game game;
JMenuBar menuBar;
JMenu menu;
JMenuItem newGame, highScores;

public Window() {

    //Menu
    menuBar = new JMenuBar();
    menu = new JMenu("Menu");
    menuBar.add(menu);
    newGame = new JMenuItem("New Game");
    highScores = new JMenuItem("Highscores");
    newGame.addActionListener(this);
    highScores.addActionListener(this);
    menu.add(newGame);
    menu.add(highScores);
    setJMenuBar(menuBar);

    //Components
    counter.setFont(new Font("Monaco", Font.PLAIN, 35));
    counter.setHorizontalAlignment(JLabel.CENTER);
    JPanel abovePane = new JPanel();
    abovePane.setLayout(new BorderLayout());
    this.getContentPane().setLayout(new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS));


    abovePane.add(counter, BorderLayout.PAGE_START);
    abovePane.add(timerLabel, BorderLayout.CENTER);

    getContentPane().add(abovePane, BorderLayout.PAGE_START);
    game = new Game();
    getContentPane().add(game, BorderLayout.CENTER);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
    setLocation(dim.width / 2 - getSize().width / 2, dim.height / 2 - getSize().height / 2);
    setVisible(true);

    game.initGame();
    addKeyListener(new KeyboardListener());
    game.run();

}

@Override
public void actionPerformed(ActionEvent e) {
    if (e.getSource() == newGame) {
        game = new Game();
        getContentPane().add(game, BorderLayout.CENTER);
        game.initGame();
        game.run();
    } 
}

}

0 个答案:

没有答案