Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JFrame getContentPane.removeAll()仅在.setVisible(false)和.setVisible(true)之间工作_Java_Swing_Jframe - Fatal编程技术网

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%使用了吗?张贴一篇演示问题的文章。张贴一篇演示问题的文章。