Jas*_*n S 4 java swing binding
我需要一种方法将UI指标绑定到快速变化的值.
我有一个类NumberCruncher在一个关键的非UI线程中执行大量繁重的处理,每秒循环数千次迭代,其中一些导致我关注的一组参数的更改.(把它们想象成一个键值存储)
我想在UI线程中以较慢的速率显示那些; 10-20Hz就好了.如何添加MVC样式的通知,以便我的NumberCruncher代码不需要知道UI代码/绑定?
执行此操作的惯用方法是使用SwingWorker该类,并使用调用来publish(V...)定期通知Event Dispatch线程,从而使其更新UI.
在以下来自Javadoc的示例中,数字运算在doInBackground()方法中的工作线程上进行,该方法在每次迭代时调用publish.此调用导致在Event Dispatch线程上异步调用process(V ...)方法,允许它更新UI.请注意,这可确保始终从Event Dispatch线程更新用户交互.另请注意,您可以选择每N次迭代调用发布,以降低用户界面更新的频率.
来自Javadoc的示例
class PrimeNumbersTask extends
SwingWorker<List<Integer>, Integer> {
PrimeNumbersTask(JTextArea textArea, int numbersToFind) {
//initialize
}
@Override
public List<Integer> doInBackground() {
while (! enough && ! isCancelled()) {
number = nextPrimeNumber();
publish(number);
setProgress(100 * numbers.size() / numbersToFind);
}
}
return numbers;
}
@Override
protected void process(List<Integer> chunks) {
for (int number : chunks) {
textArea.append(number + "\n");
}
}
}
Run Code Online (Sandbox Code Playgroud)