gpt4 book ai didi

java - Swing,如何正确更新UI

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:44:13 25 4
gpt4 key购买 nike

在对 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 的父组件。这有效,但有时我会看到屏幕闪烁。我做错了吗?有更好的方法吗?

最佳答案

正确的方法是使用 SwingWorker , 但如果您想手动执行此操作,则必须实现以下模式:

@Override public void actionPerformed(java.awt.event.ActionEvent evt) {
new Thread() {
@Override public void run () {
//callWebService();
//do stuff
SwingUtilities.invokeLater(new Runnable(){
@Override public void run() {
//updateUI(); // <----- repaint? revalidate? what?
}
});
}
}.start();
}

对于重绘/重新验证问题,通常调用revalidate() 然后调用repaint()。当然,这仅对您手动绘制的组件有效。对于您复用的组件,只需调用它们的值更改方法即可。

关于java - Swing,如何正确更新UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4921009/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com