package installer; import immibis.bon.IProgressListener; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Window; import javax.swing.JDialog; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.SwingConstants; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.Random; public class ProgressDialog extends JDialog implements IProgressListener { /* not serializable */ private static final long serialVersionUID = new Random().nextLong(); public JLabel label; public JProgressBar bar; public ProgressDialog(Window parent) { super(parent); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(1); } }); setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); setTitle("MCF Installer Progress"); JPanel root = new JPanel(); setContentPane(root); root.setLayout(null); JPanel panel = new JPanel(); panel.setLayout(null); panel.setBounds(0, 0, 321, 106); root.add(panel); label = new JLabel("<label>"); label.setBounds(10, 29, 301, 14); panel.add(label); label.setHorizontalAlignment(SwingConstants.CENTER); bar = new JProgressBar(); bar.setBounds(10, 71, 301, 24); panel.add(bar); setVisible(true); setPreferredSize(panel.getSize()); pack(); Dimension clientSize = root.getSize(); Dimension windowSize = getSize(); // increase preferred size by border size setPreferredSize(new Dimension(windowSize.width*2 - clientSize.width, windowSize.height*2 - clientSize.height)); pack(); setLocationRelativeTo(null); } public static ProgressDialog openModal(Window parent, String title) { ProgressDialog dlg = new ProgressDialog(parent); dlg.setTitle(title); dlg.setVisible(true); return dlg; } public void startIndeterminate(final String string) { EventQueue.invokeLater(new Runnable() { @Override public void run() { label.setText(string); bar.setIndeterminate(true); label.repaint(); } }); } public void initProgressBar(final int min, final int max) { EventQueue.invokeLater(new Runnable() { @Override public void run() { bar.setMinimum(min); bar.setMaximum(max); bar.setValue(0); bar.setIndeterminate(false); } }); } public void incrementProgress(final int i) { EventQueue.invokeLater(new Runnable() { @Override public void run() { bar.setValue(bar.getValue()+i); } }); } @Override public void start(final int max, final String text) { EventQueue.invokeLater(new Runnable() { @Override public void run() { initProgressBar(0, max); label.setText(text); } }); } @Override public void set(final int value) { EventQueue.invokeLater(new Runnable() { @Override public void run() { bar.setValue(value); } }); } @Override public void setMax(final int max) { EventQueue.invokeLater(new Runnable() { @Override public void run() { initProgressBar(0, max); } }); } }