自动重置JFrame

时间:2019-05-23 02:48:13

标签: java swing

我正在制作一个游戏,在其中创建一个JFrame,在该JFrame中初始化所有游戏对象,并且在框架内是一个新的JPanel,其中是paintComponent。游戏结束后,我希望游戏自动重启,创建新对象并将JPanel中所有内容的位置重置为开始状态,但同时使用相同的整体JFrame。

我有一个start方法,该方法在用于启动游戏的main方法中的当前类的新对象(称为Runner)上被调用:

private void start() {

/*initialized game elements here */

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setResizable(false);
        JPanel panel = new JPanel() {
            @Override
            public void paintComponent(Graphics g) {
                /* Drew objects here */
        };

        panel.setPreferredSize(new Dimension(800,600));
        frame.add(panel);
        frame.pack();
        frame.setVisible(true);
        mapKeyStrokesToActions(panel);

        /* Timer */
        timer = new Timer(10, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                updateGame();
                panel.repaint();
            }
        });
        timer.start();
    }

在尝试重置游戏时,此代码最接近工作状态:

if(gameOver()) {
            frame.getContentPane().removeAll();
            runner.start();
        }

但是,在重置JFrame之后,任何映射到操作的击键均无效。我认为我的操作方式不正确,但是我不知道怎么做。

此外,我之前从未在这里问过问题,所以我不确定是否给出了足够的示例代码或说明,如果不够,我可以添加更多内容。

0 个答案:

没有答案