SwingWorkerを使用してGUIのラベルとプログレスバーを更新するJavaアプリがあり、うまく機能します。ただし、この設定に機能を追加したいと思います。
私のSwingWorkerは、長さのあるタスクを実行し、n
そのタスクを繰り返しますm
。現在、私のGUIは、タスクが繰り返された回数を教えてくれますが、タスクの長さも教えてもらいたいのです。言ってn=300
みてください。m=50
次のようにしたいと思います。
Task 49 is at 248 ()
Task has been repeated 48 times
SwingWorkerで何を変更する必要がありますか?
/**
*
* @author digitaldust
*/
public class Model extends SwingWorker<Integer, Integer> {
private HashMap<String, Number> GUIparams;
private int session;
private int ticks;
Model(HashMap<String, Number> KSMParams) {
GUIparams = KSMParams;
session = (Integer)GUIparams.get("experimentsInSession");
ticks = (Integer)GUIparams.get("howManyTicks");
}
/**
* Actual simulation
*/
@Override
protected Integer doInBackground() throws Exception {
int i=0;
while(!isCancelled() && i<session){
i++;
int ii=0;
while(!isCancelled() && ii<ticks){
// this is n, the task length and I'd like to update the GUI with this value
ii++;
}
System.out.println(i);
// this is m, how many time the task has been repeated, and now it is updated in the GUI
publish(i);
setProgress(i);
Thread.sleep(1000);
}
return i;
}
/**
* Invoked when simulation exits
*/
@Override
protected void done() {
if (isCancelled()) {
Logger.getLogger(Model.class.getName()).log(Level.WARNING, "Experiment session cancelled by user. Closing Session...");
} else {
// do stuff
Logger.getLogger(Model.class.getName()).log(Level.WARNING, "Experiment session ended.");
}
}
}