/** * ProgressBarPanel.java * Created On 2007, Sep 4, 2007 12:57:06 PM * @author E. Rajasekar */ package app.astrosoft.ui.comp; import java.awt.BorderLayout; import java.awt.Dimension; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.SwingUtilities; import javax.swing.SwingWorker; import app.astrosoft.ui.util.UIConsts; public class ProgressBarPanel extends JPanel { private static final Logger log = Logger.getLogger(ProgressBarPanel.class.getName()); private JProgressBar pbar; private FutureTask<Object> task; private String taskName; private ProgressListener listener; private class Worker extends SwingWorker<Void, Void>{ @Override public Void doInBackground() { try { task.get(); taskCompleted(); } catch (Exception e){ log.log(Level.SEVERE, "Exception in " + taskName , e); } return null; } } public ProgressBarPanel(Dimension size, FutureTask<Object> task, String taskName, ProgressListener listener){ this.task = task; this.taskName = taskName; this.listener = listener; addComponents(); setPreferredSize(size); new Worker().execute(); } private void addComponents() { setLayout(new BorderLayout()); pbar = new JProgressBar(); pbar.setIndeterminate(true); pbar.setStringPainted(true); pbar.setString(taskName + "..."); add(BorderLayout.CENTER, pbar); } private void taskCompleted() { pbar.setString("Completed!"); pbar.setIndeterminate(false); listener.completed(); } }