Java JFrame getContentPane.removeAll()仅在.setVisible(false)和.setVisible(true)之间工作
下面的代码用于重置游戏框架:Java JFrame getContentPane.removeAll()仅在.setVisible(false)和.setVisible(true)之间工作,java,swing,jframe,Java,Swing,Jframe,下面的代码用于重置游戏框架: private void reset() { moveCount = 0; gameFrame.setVisible(false); gameFrame.getContentPane().removeAll(); gameFrame.getContentPane().revalidate(); gameFrame.getContentPane().repaint(); board.newBoard(); c
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);
}
但是,它只能通过先将游戏框架的可见性设置为false、删除所有组件、添加一组新组件,然后将游戏框架设置为可见来工作
正确的方法是什么
谢谢
奥利
编辑:
我试过做:
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();
将所有新组件添加到框架的内容窗格后,代码不会执行重新验证()和重新绘制()。更好的方法是使用重置方法重置游戏中所有组件的状态,而不是重新创建所有组件 但是,将组件删除/添加到可见GUI的一般规则是:
panel.remove(...);
panel.add(...);
panel.revalidate();
panel.repaint();
将所有新组件添加到框架的内容窗格后,您的代码不会执行重新验证()和重新绘制()。我尝试将.revalidate和.repaint放在添加到框架的下方,但在调用重置函数时,这会冻结。有什么想法吗?@OliBates你是在
画图中调用你的reset()
方法吗?你检查过CPU是否使用100%了吗?我试着把.revalidate和.repaint放在下面添加到帧中,但现在调用重置函数时它冻结了。有什么想法吗?@OliBates你是在画图中调用你的reset()
方法吗?你检查过CPU是否100%使用了吗?张贴一篇演示问题的文章。张贴一篇演示问题的文章。