package jreepad.ui;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
public class PasswordDialog extends JDialog implements PropertyChangeListener
{
private JOptionPane optionPane;
private JPasswordField pwdField1;
private JPasswordField pwdField2;
private String password = null;
public PasswordDialog(String message, boolean confirm)
{
super((Frame)null, "Enter password", true);
pwdField1 = new JPasswordField();
Object[] array;
if (confirm)
{
pwdField2 = new JPasswordField();
array = new Object[] { new JLabel(message), pwdField1, new JLabel("confirm:"), pwdField2 };
}
else
{
array = new Object[] { new JLabel(message), pwdField1 };
}
optionPane = new JOptionPane(array, JOptionPane.QUESTION_MESSAGE, JOptionPane.OK_CANCEL_OPTION);
optionPane.addPropertyChangeListener(this);
setContentPane(optionPane);
pack();
setLocationRelativeTo(null);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent we) {
optionPane.setValue(new Integer(JOptionPane.CLOSED_OPTION));
}
});
}
/**
* Dialog button was pressed.
*/
public void propertyChange(PropertyChangeEvent e)
{
String prop = e.getPropertyName();
if (isVisible() && JOptionPane.VALUE_PROPERTY.equals(prop))
{
Object value = optionPane.getValue();
if (value == JOptionPane.UNINITIALIZED_VALUE)
return;
optionPane.setValue(JOptionPane.UNINITIALIZED_VALUE);
if (value.equals(Integer.valueOf(JOptionPane.OK_OPTION)))
{
String pwd1 = new String(pwdField1.getPassword());
if (pwdField2 != null)
{
String pwd2 = new String(pwdField2.getPassword());
if (!pwd1.equals(pwd2))
{
JOptionPane.showMessageDialog(this, "The passwords do not match");
return;
}
}
password = new String(pwdField1.getPassword());
}
setVisible(false);
}
}
/**
* Returns entered password or null if Cancel was pressed.
*/
public String getPassword()
{
return password;
}
/**
* Shows password dialog.
* @param message message to show in the dialog (e.g. "Please enter password:")
* @param confirm whether to show second confirmation password field
* @return enetered password or null if Cancel was pressed
*/
public static String showPasswordDialog(String message, boolean confirm)
{
PasswordDialog dialog = new PasswordDialog(message, confirm);
dialog.setVisible(true);
dialog.dispose(); // We don't need the dialog anymore
return dialog.getPassword();
}
public static String showPasswordDialog(String message)
{
return showPasswordDialog(message, false);
}
public static String showPasswordDialog(boolean confirm)
{
return showPasswordDialog("Please enter password:", confirm);
}
public static String showPasswordDialog()
{
return showPasswordDialog(false);
}
}