Quantcast
Viewing all articles
Browse latest Browse all 2

Answer by MadProgrammer for JProgressBar from Oracle

First, I'd recommend by defining a concept of a "progressable" state

public interface Progressable {
    public void setProgress(int progress); // I prefer double, but we'll keep it inline with the rest of the API
}

Then, the entry point for your tasks would take a reference to Progressable

public class MySuperAwesomeLongRunningTask ... {
    //...
    private Progressable progressable;

    public void performTask(Progressable progressable) {
        this.prgressable = progressable
    }

    protected void methodThatDoesSomeWork() {
        // Do some super duper work...
        // calculate the progress of that work some how,
        // based on your implementation...
        int progress = ...;
        progressable.setProgress(progress);
    }
}

Then, create a SwingWorker which implements Progressable and calls your work...

class Task extends SwingWorker<Void, Void> implements Progressable {
    private MySuperAwesomeLongRunningTask taskToBeDone;

    public Task(MySuperAwesomeLongRunningTask taskToBeDone) {
        self.taskToBeDone = taskToBeDone;
    }

    /*
     * Main task. Executed in background thread.
     */
    @Override
    public Void doInBackground() {
        taskToBeDone.performTask(this);
        return null;
    }

    /*
     * Executed in event dispatch thread
     */
    public void done() {
        // What ever you need to do...
    }
}

Now, because SwingWorker already has a method called setProgress(int) it automatically conforms to Progressable (so long as you implement it), so when MySuperAwesomeLongRunningTask calls setProgress, it will actually be calling the SwingWorkers implementation.

This means, that the rest of the code basically remains the same, expect, I'd change

if ("progress" == evt.getPropertyName()) {

to

if ("progress".equals(evt.getPropertyName())) {

because comparing Strings with == is bad idea (and freaks me out :P)


Viewing all articles
Browse latest Browse all 2

Trending Articles