12 Şubat 2018 Pazartesi

Swing SwingWorker Sınıfı

Giriş
Şu satırı dahil ederiz.
import javax.swing.SwingWorker;
Kalıtım
Şöyle yaparız. İlk generic parametre  doInBackground metodunun döndürdüğü tiptir. İkinci generic parametre publis() ve process() metodlarının aldığı parametre tipidir.
public class MyWorker extends SwingWorker<String, Object> { 
  ...
}
cancel metodu
Şöyle yaparız
swingWorker.cancel(true);
execute metodu
Şöyle yaparız.
SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>() {
  @Override
  protected Void doInBackground() throws Exception {
    ...
    return null;

  }
};
worker.execute();
doInBackground metodu
Worker thread tarafından çalıştırılır. Bu metod içinde UI güncellenemez. UI'ya bilgi göndermek için iki seçenek var.

1. publish() çağrısı ile process() metodu tetiklenir
2. setProgress() çağrısı ile bu nesneye addPropertyChangeListener() çağrısı ile abone olan sınıf tetiklenir.

Şöyle yaparız.
@Override
public String doInBackground() throws Exception {
  ...
  return "";
}
done metodu
Bu metod içinde UI güncellenir. Şöyle yaparız.
@Override
protected void done() {
  ...
}
process metodu
Bu metod içinde UI güncellenir. Şöyle yaparız.
class Worker extends SwingWorker<String, String>{
  ...
  @Override
  protected String doInBackground() throws Exception {
    
    //This is what's called in the .execute method
    long startTime = System.nanoTime();
    ...
    //This sends the results to the .process method
    publish(String.valueOf(System.nanoTime() - startTime));

    return null;
  }


  @Override
  protected void process(List<String> item) {
    double nanos = Long.parseLong(item.get(item.size()-1));
    //This updates the UI
    label.setText("Processing Time: " + nanos + " nanos");

  }
}

Hiç yorum yok:

Yorum Gönder