package org.csdgn.cddatse;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.border.EmptyBorder;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.Window;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
import javax.swing.border.CompoundBorder;
import javax.swing.border.EtchedBorder;
public class ProgressDialog extends JDialog {
private static final long serialVersionUID = -3335168714276120596L;
private ExecutorService service;
private JLabel lblOperation;
private JProgressBar progressBar;
/**
* Create the dialog.
*/
public ProgressDialog(Window win) {
setUndecorated(true);
setModal(true);
JPanel content = new JPanel();
content.setPreferredSize(new Dimension(400,75));
content.setBorder(new CompoundBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), new EmptyBorder(5, 20, 5, 20)));
setContentPane(content);
GridBagLayout gbl_content = new GridBagLayout();
gbl_content.columnWidths = new int[]{0, 0};
gbl_content.rowHeights = new int[]{25, 25};
gbl_content.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_content.rowWeights = new double[]{0.0, 0.0};
content.setLayout(gbl_content);
lblOperation = new JLabel();
GridBagConstraints gbc_lblOperation = new GridBagConstraints();
gbc_lblOperation.fill = GridBagConstraints.BOTH;
gbc_lblOperation.insets = new Insets(0, 0, 5, 0);
gbc_lblOperation.gridx = 0;
gbc_lblOperation.gridy = 0;
content.add(lblOperation, gbc_lblOperation);
progressBar = new JProgressBar();
GridBagConstraints gbc_progressBar = new GridBagConstraints();
gbc_progressBar.fill = GridBagConstraints.BOTH;
gbc_progressBar.gridx = 0;
gbc_progressBar.gridy = 1;
content.add(progressBar, gbc_progressBar);
pack();
setLocationRelativeTo(win);
}
public void setLabelText(final String text) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
lblOperation.setText(text);
}
});
}
public void setProgressMinimum(final int value) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
progressBar.setMinimum(value);
}
});
}
public void setProgressMaximum(final int value) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
progressBar.setMaximum(value);
}
});
}
public void setProgress(final int value) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
progressBar.setValue(value);
}
});
}
public void execute(Runnable runnable) {
service = Executors.newSingleThreadExecutor(new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = Executors.defaultThreadFactory().newThread(r);
t.setDaemon(true);
return t;
}
});
service.submit(runnable);
setVisible(true);
service.shutdownNow();
dispose();
}
}