import java.awt.GridLayout;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.SwingWorker;
public class Main {
public static void main(String[] args) {
TwoRoot t = new TwoRoot();
}
}
class TwoRoot extends JFrame {
JProgressBar progressBar = new JProgressBar(0, 100);
JLabel label = new JLabel("", JLabel.CENTER);
public TwoRoot() {
setLayout(new GridLayout(0, 1));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(progressBar);
add(label);
setSize(300, 100);
setVisible(true);
progressBar.setIndeterminate(true);
TwoWorker task = new TwoWorker();
task.addPropertyChangeListener(new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent e) {
if ("progress".equals(e.getPropertyName())) {
progressBar.setIndeterminate(false);
progressBar.setValue((Integer) e.getNewValue());
}
}
});
task.execute();
}
class TwoWorker extends SwingWorker<Double, Double> {
int N = 5;
double x = 1;
@Override
protected Double doInBackground() throws Exception {
for (int i = 1; i <= N; i++) {
x = x - i;
setProgress(i * (100 / N));
publish(x);
Thread.sleep(1000);
}
return Double.valueOf(x);
}
@Override
protected void process(List<Double> chunks) {
for (double d : chunks) {
label.setText(""+d);
}
}
}
}