Java:新组件何时会显示在屏幕上?

时间:2014-05-21 15:21:33

标签: java swing jframe jpanel

以下代码用于更新UI。但是当我调试第一行时,我发现即使它已被执行,帧也不会立即更新。而且我发现如果我在这些代码之后进行一些长时间的计算,它就不会再发生变化而且框架也无法关闭。

frame.getContentPane().add(gamePanel);
((JPanel)frame.getContentPane()).revalidate();
frame.repaint();

所以我的问题是什么时候会显示帧中的一些变化?

2 个答案:

答案 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