package games.strategy.ui;
import static com.google.common.base.Preconditions.checkNotNull;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Frame;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
/**
* A modal dialog used to display indeterminate progress during an operation.
*/
public final class ProgressDialog extends JDialog {
private static final long serialVersionUID = -590470596784214914L;
/**
* Initializes a new instance of the {@code ProgressDialog} class.
*
* @param owner The {@code Frame} from which the dialog is displayed or {@code null} to use a shared, hidden frame as
* the owner of the dialog.
* @param message The progress message; must not be {@code null}.
*/
public ProgressDialog(final Frame owner, final String message) {
super(owner, true);
checkNotNull(message);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
setUndecorated(true);
setLayout(new BorderLayout());
add(createContent(message), BorderLayout.CENTER);
pack();
setSize(200, 80);
setLocationRelativeTo(owner);
}
private static Component createContent(final String message) {
final JPanel panel = new JPanel();
panel.setBorder(new LineBorder(Color.BLACK));
panel.setLayout(new BorderLayout());
final JLabel label = new JLabel(message);
label.setBorder(new EmptyBorder(10, 10, 10, 10));
panel.add(BorderLayout.NORTH, label);
final JProgressBar progressBar = new JProgressBar();
progressBar.setBorder(new EmptyBorder(10, 10, 10, 10));
progressBar.setIndeterminate(true);
panel.add(progressBar, BorderLayout.CENTER);
return panel;
}
}