gpt4 book ai didi

java - 批量更新 JComponents。需要更好的(线程)设计的建议

转载 作者:行者123 更新时间:2023-11-29 10:20:21 26 4
gpt4 key购买 nike

我有一个 GUI,其中一些 JComponents 组得到“批量更新”,即,我有一个循环,对于循环的每次迭代,几乎,我都需要更新这些 JComponents。所以,我尝试在循环中进行计算的同时进行更新,但结果并不顺利,(如果我解释正确的话)更新被计算“减慢了速度”,效果只是最后 用户可以感觉到更新。

那时我想到将所有与更新相关的代码放在一个单独的线程中。首先,我创建了一个名为 UpdatableComponent 的接口(interface),它将包装所有必须更新的 JComponent:

public interface UpdatableComponent {
/**
* Implementors should be the one responsible for typecasting update
* into the appropriate objects.
*/
public void update(Object update);
}

例如,如果我想更新一个 JLabel

public class UpdatableJLabel implements UpdatableComponent{
private JLabel l;

public UpdatableJLabel(JLabel l){
this.l = l;
}

public void update(Object update){
l.setText((String) update);
}
}

然后,我的 Runnable 线程类:

public class UIUpdateRunnable implements Runnable {

private UpdatableComponent[] forUpdating;

public UIUpdateRunnable(UpdatableComponent[] uc) {
forUpdating = uc;
}

public void run() {
int limit = forUpdating.length;

for(int i = 0; i < limit; i++){

}
}

}

这就是我遇到障碍的地方。我怎么知道要为每个 UpdatableComponent 的更新方法传递什么参数?我考虑过维护一个对象数组 arguments,它将 UpdatableComponent 映射到其更新方法的参数(当然,我有一个 setter 方法)。但这将是 (1) 耦合太紧——糟糕的设计!——以及 (2) 对于一个线程来说太多了; run 中的循环将不断调用每个 UpdatableComponent 的更新,为其指定参数,无论是否实际更新,都会进行更新。

我不禁觉得我可能错过了一个简单的方法来做到这一点。任何建议/建议都将非常受欢迎。谢谢。

最佳答案

听起来像 SwingWorker是你要找的。计算在方法 doInBackground() 中完成,结果被 publish() 编辑,然后 process() 更新组件。

关于java - 批量更新 JComponents。需要更好的(线程)设计的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7295427/

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