package com.aerodynelabs.habtk.ui;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.Timer;
/**
* A non-modal dialog that displays a message with a timeout.
* @author Ethan Harstad
*
*/
@SuppressWarnings("serial")
public class MessageDialog extends JDialog implements ActionListener {
private Timer timer;
public MessageDialog(Frame parent, String title, String message) {
this(parent, title, message, 0);
}
public MessageDialog(Frame parent, String title, String message, int timeout) {
super(parent, false);
setTitle(title);
if(timeout > 0) {
timer = new Timer(timeout, this);
timer.start();
}
final JOptionPane pane = new JOptionPane(message,
JOptionPane.INFORMATION_MESSAGE,
JOptionPane.OK_OPTION);
pane.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent e) {
String prop = e.getPropertyName();
if(isVisible() && e.getSource() == pane && (prop.equals(JOptionPane.VALUE_PROPERTY))) {
setVisible(false);
}
}
});
setContentPane(pane);
pack();
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((screen.width - getWidth()) / 2, (screen.height - getHeight()) / 2);
setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
timer.stop();
dispose();
}
}