下面的代码用于更新UI。但是当我调试第一行时,我发现即使它已经执行,帧现在也没有更新。我发现如果我在这些代码之后做一些长时间的计算,它不会再改变,帧不能关闭。
frame.getContentPane().add(gamePanel);
((JPanel)frame.getContentPane()).revalidate();
frame.repaint();
所以我的问题是什么时候会显示帧中的一些变化?
当你输入"this.setVisible(true);"
下面的代码用于更新UI。
我不知道你是在尝试初始显示框架,还是在当前可见的框架上更新组件。
如果你只是想让框架可见,那么基本代码是:
frame.add(...)
frame.pack();
frame.setVisible(true);
如果你想添加组件到一个可见的框架,那么基本代码是:
panel.add(...);
panel.revalidate();
panel.repaint();
我发现如果我在这些代码之后做一些长时间的计算…
面板将立即重新绘制,除非你有一些代码阻塞Event Dispatch Thread (EDT)
,这阻止了GUI重新绘制自己。
我发现如果我在这些代码之后做一些长时间的计算,
这表明您正在阻塞EDT
。您需要为长时间运行的任务创建一个单独的Thread。有关更多信息,请阅读Swing教程中的并发部分。您可以查看使用SwingWorker
在教程中讨论。