package nl.helixsoft.gui; import java.awt.BorderLayout; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JProgressBar; import javax.swing.SwingWorker; public class IndeterminateProgressDialog implements PropertyChangeListener { private JDialog dialog; private JLabel note = new JLabel(); public void propertyChange(PropertyChangeEvent event) { if ("state".equals(event.getPropertyName()) && SwingWorker.StateValue.DONE == event.getNewValue()) { dialog.setVisible(false); dialog.dispose(); } else if ("note".equals(event.getPropertyName())) { note.setText ("" + event.getNewValue()); } } private IndeterminateProgressDialog(JDialog owner, String title, SwingWorker<?, ?> worker) { dialog = new JDialog(owner, true); dialog.setTitle (title); dialog.setSize(300, 100); dialog.setLocationRelativeTo(owner); doRest(worker); } private IndeterminateProgressDialog(JFrame owner, String title, SwingWorker<?, ?> worker) { dialog = new JDialog(owner, true); dialog.setTitle (title); dialog.setSize(300, 100); dialog.setLocationRelativeTo(owner); doRest(worker); } private void doRest(SwingWorker<?, ?> worker) { final JProgressBar jpb = new JProgressBar(0, 100); jpb.setIndeterminate(true); dialog.getContentPane().add(jpb, BorderLayout.NORTH); dialog.getContentPane().add(note, BorderLayout.SOUTH); // JButton btnCancel = new JButton("Cancel"); // // ActionListener actionListener = new ActionListener() { // public void actionPerformed(ActionEvent e) { // //TODO send interrupt message // } // }; // btnCancel.addActionListener(actionListener); worker.addPropertyChangeListener(this); dialog.setVisible(true); } public static void createAndShow(JDialog owner, String title, SwingWorker<?, ?> worker) { new IndeterminateProgressDialog(owner, title, worker); } public static void createAndShow(JFrame owner, String title, SwingWorker<?, ?> worker) { new IndeterminateProgressDialog(owner, title, worker); } }