【发布时间】:2010-11-13 18:57:36
【问题描述】:
我的 Java Swing UI 没有像我认为的那样更新/重新绘制。应用程序发送 XMPP 消息并在不同线程上接收响应。处理该响应并更新 UI 以反映消息中包含的信息。
收到响应后,我使用更新 JPanel 组件
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() { /* execute logic to update panel */ }
});
自从我使用 Java 开发以来已经有一段时间了,但是根据我的在线研究,invokeLater 将可运行对象排队等待在 GUI 线程上执行。但是,直到我在应用程序中执行导致重绘的其他操作(例如调整窗口大小)时,我的 GUI 才会更新。我错过了什么?在更新面板的逻辑之后,我尝试了 invalidate() 和 repaint() 的各种组合,但结果仍然相同 - 直到我调整窗口大小时 GUI 才会更新。
编辑:当我说更新面板时,具体来说,我是在执行 removeAll() 然后添加一些 JLabels。
【问题讨论】:
标签: java user-interface swing