JFrame getContentPane.removeAll()仅在.setVisible(false)和.setVisible(true)之间工作

 卡哇伊--欣欣_749 发布于 2023-02-08 16:08

以下代码应该重置框架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);

}

但是,当按下重置按钮时,现在只是冻结程序.

1 个回答
  • 更好的方法是使用重置方法重置游戏中所有组件的状态,而不是重新创建所有组件.

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

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

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

    2023-02-08 16:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有