package org.lodder.subtools.multisubdownloader.gui.dialog; import net.miginfocom.swing.MigLayout; import javax.swing.*; import org.lodder.subtools.multisubdownloader.Messages; import org.lodder.subtools.multisubdownloader.gui.extra.progress.Messenger; import org.lodder.subtools.multisubdownloader.gui.extra.progress.StatusMessenger; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class ProgressDialog extends MultiSubDialog implements Messenger { /** * */ private static final long serialVersionUID = -2320149791421648965L; private JProgressBar progressBar; private JLabel label; private Cancelable worker; /** * @param sft * @wbp.parser.constructor */ public ProgressDialog(JFrame frame, Cancelable sft) { super(frame, Messages.getString("ProgressDialog.Title"), false); worker = sft; StatusMessenger.instance.addListener(this); initialize_ui(); setDialogLocation(frame); repaint(); } public ProgressDialog(Cancelable sft) { super(Messages.getString("ProgressDialog.Title"), false); worker = sft; StatusMessenger.instance.addListener(this); initialize_ui(); repaint(); } private void initialize_ui() { addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { worker.cancel(true); } }); setBounds(100, 100, 501, 151); getContentPane().setLayout(new MigLayout("", "[][475px,center][]", "[][40px:n][][]")); label = new JLabel(""); getContentPane().add(label, "cell 1 0 2 1,alignx left"); progressBar = new JProgressBar(0, 100); progressBar.setIndeterminate(true); getContentPane().add(progressBar, "cell 1 1,grow"); JButton btnStop = new JButton("Stop!"); btnStop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { worker.cancel(true); } }); getContentPane().add(btnStop, "cell 1 2 1 2,alignx left"); } public void setMessage(String message) { label.setText(message); repaint(); } public String getMessage() { return label.getText(); } public JProgressBar getProgressBar() { return progressBar; } @Override public void message(String message) { setMessage(message); } public void updateProgress(int progress) { if (progress == 0) { getProgressBar().setIndeterminate(true); } else { getProgressBar().setIndeterminate(false); getProgressBar().setValue(progress); getProgressBar().setString(Integer.toString(progress)); } } }