以下代码用于更新UI。但是当我调试第一行时,我发现即使它已被执行,帧也不会立即更新。而且我发现如果我在这些代码之后进行一些长时间的计算,它就不会再发生变化而且框架也无法关闭。
frame.getContentPane().add(gamePanel);
((JPanel)frame.getContentPane()).revalidate();
frame.repaint();
所以我的问题是什么时候会显示帧中的一些变化?
答案 0 :(得分:2)
当你通过把“this.setVisible(true);”
告诉它时答案 1 :(得分:0)
以下代码用于更新UI。
我无法判断您是要尝试最初显示框架,还是更新当前可见框架上的组件。
如果您只是想让框架可见,那么基本代码是:
frame.add(...)
frame.pack();
frame.setVisible(true);
如果您尝试将组件添加到可见框架,则基本代码为:
panel.add(...);
panel.revalidate();
panel.repaint();
我发现在这些代码之后我是否进行了长时间的计算...
该面板将立即重新绘制,除非您有一些代码阻止Event Dispatch Thread (EDT)
,这会阻止GUI重新绘制。
我发现如果我在这些代码之后做了一些长时间的计算,
这表示您阻止了EDT
。您需要为长时间运行的任务创建单独的线程。有关详细信息,请阅读Concurrency in Swing上Swing教程中的部分。您可以查看使用教程中讨论的SwingWorker
。