Questa e' la classe:
codice:
/*
* DeKProgressBar.java
*
* Created on 10 aprile 2005, 18.38
*/
package dek;
import static dek.DeKTaskObserver.Bounds;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JProgressBar;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
/**
* @version 1.1
* @author DeK
*/
public class DeKProgressBar extends JProgressBar {
private DeKTaskObserver monitorDPB;
private Timer updater;
private int milli;
private final Azione setProgress = new Azione();
public static final int DEFAULT_TIME = 500; // Timer di default a mezzo secondo
public DeKProgressBar() {
this(DEFAULT_TIME);
}
public DeKProgressBar(int milliseconds) {
this(milliseconds, null);
}
public DeKProgressBar(DeKTaskObserver dto) {
this(DEFAULT_TIME, dto);
}
public DeKProgressBar(int milliseconds, DeKTaskObserver task) {
super();
setTaskObserver(task);
setMillis(milliseconds);
}
private void createUpdater() {
updater = new UpdatePB();
}
public void setTaskObserver(DeKTaskObserver dto) {
monitorDPB = dto;
createUpdater();
}
public DeKTaskObserver getTaskObserver() {
return monitorDPB;
}
public void setMillis(int t) {
milli = t;
}
public int getMillis() {
return milli;
}
private void start() {
setMinimum(getTaskObserver().taskStatus(Bounds.MIN));
setMaximum(getTaskObserver().taskStatus(Bounds.MAX));
run();
updater.start();
}
private void stop() {
updater.stop();
run();
}
public boolean setRunning(boolean flag) {
if (updater==null)
return false;
assert (monitorDPB != null);
if (flag && !updater.isRunning())
start();
else if (!flag && updater.isRunning())
stop();
else return false;
return true;
}
private void run() {
SwingUtilities.invokeLater(setProgress);
}
// Timer
private final class UpdatePB extends Timer {
public UpdatePB() {
super(DeKProgressBar.this.getMillis(), setProgress);
}
}
// Callback Action
private class Azione extends AbstractAction implements Runnable {
public void run() {
setValue(getTaskObserver().taskStatus());
}
public void actionPerformed(ActionEvent e) {
run();
}
}
}
La classe UpdatePB forse non serve piu'. Inizialmente conteneva... praticamente tutto il codice!!!