以下代码应该重置框架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设置为可见来实现.
这样做的正确方法是什么?
谢谢,
奥利
编辑:
我试过做:
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().