【发布时间】:2011-02-07 11:54:47
【问题描述】:
在 Swing 上做一些操作后更新 UI 的正确方法是什么?
例如,单击按钮后,调用可能几乎是即时的或需要几秒钟的方法。事实上,所有的应用程序逻辑都是通过 Web 服务远程完成的,所以等待应用程序响应是正常的。
我的按钮事件处理程序可能如下所示:
myButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
//callWebService();
//do stuff
//updateUI(); // <----- repaint? revalidate? what?
}
});
我当前的实现调用 updateUI 方法,该方法在内部调用 validate() 和 repaint() 到拥有 UI 的父组件。这可行,但有时我可以看到屏幕闪烁。我做错了吗?有没有更好的方法?
【问题讨论】:
-
据我了解,这个问题是关于在做某事后更新 UI,而不是在另一个线程中做某事以保持 UI 响应。不过,我不太明白为什么问题中提到了该方法的执行时间。
-
我提到了执行时间,因为看起来 Swing 在尝试加载组件时的行为有点不同,加载时间过长,因此可能需要重绘屏幕。
-
我仍然会使用 SwingWorker 提供的回调来执行此操作 - 这是一个已经提供的模型,虽然 OP 没有提到保持 UI 响应作为问题的一部分,但这是一个很好的做法无论如何都要这样做。
标签: java swing user-interface