以下代码应该重置框架gameFrame:

private void reset()
{
    moveCount = 0;
    gameFrame.setVisible(false);

    gameFrame.getContentPane().removeAll();
    gameFrame.getContentPane().revalidate();
    gameFrame.getContentPane().repaint();

    board.newBoard();
    createGameUI(board.getWidth(),board.getHeight());

    gameFrame.setVisible(true);

}


但是,它只能通过首先将gameFrame的可见性设置为false,删除所有组件,添加一组新的组件,然后将gameFrame设置为visible来起作用。

正确的方法是什么?

谢谢,

奥利

编辑:

我试着做:

private void reset()
{
    moveCount = 0;

    //gameFrame.setVisible(false);
    gameFrame.getContentPane().removeAll();

    createGameUI(board.getWidth(),board.getHeight());

    gameFrame.getContentPane().revalidate();
    gameFrame.getContentPane().repaint();
    //gameFrame.setVisible(true);

}


但是,当我按下重置按钮时,这只会冻结程序。

最佳答案

更好的方法是使用重置方法来重置游戏中所有组件的状态,而不是重新创建所有组件。

但是,将组件删除/添加到可见GUI的一般规则是:

panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();


将所有新组件添加到框架的内容窗格后,您的代码不会执行revalidate()和repaint()。

08-18 10:58