package com.bagri.tools.vvm.ui;
import javax.swing.*;
import com.bagri.tools.vvm.event.ApplicationEvent;
import com.bagri.tools.vvm.util.WindowUtil;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.WindowEvent;
import java.util.Arrays;
public class ChangePasswordDialog extends JDialog {
private static final KeyStroke ESCAPE_STROKE = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
private JPasswordField currentPassword;
private JPasswordField newPassword;
private JPasswordField retypePassword;
private ActionListener successListener;
public ChangePasswordDialog(JComponent owner) {
super(WindowUtil.getFrameForComponent(owner), "Change password", true);
//
JPanel panel = new JPanel(new GridBagLayout());
GridBagConstraints cs = new GridBagConstraints();
cs.fill = GridBagConstraints.HORIZONTAL;
JLabel lbCurrentPassword = new JLabel("Current password: ");
cs.gridx = 0;
cs.gridy = 0;
cs.gridwidth = 1;
panel.add(lbCurrentPassword, cs);
currentPassword = new JPasswordField(20);
cs.gridx = 1;
cs.gridy = 0;
cs.gridwidth = 2;
panel.add(currentPassword, cs);
JLabel lbNewPassword = new JLabel("Type new password: ");
cs.gridx = 0;
cs.gridy = 1;
cs.gridwidth = 1;
panel.add(lbNewPassword, cs);
newPassword = new JPasswordField(20);
cs.gridx = 1;
cs.gridy = 1;
cs.gridwidth = 2;
panel.add(newPassword, cs);
JLabel lbRetypePassword = new JLabel("Re-type new password: ");
cs.gridx = 0;
cs.gridy = 2;
cs.gridwidth = 1;
panel.add(lbRetypePassword, cs);
retypePassword = new JPasswordField(20);
cs.gridx = 1;
cs.gridy = 2;
cs.gridwidth = 2;
panel.add(retypePassword, cs);
// panel.setBorder(new LineBorder(Color.GRAY));
JButton changeButton = new JButton("Change");
changeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (!Arrays.equals(newPassword.getPassword(), retypePassword.getPassword())) {
JOptionPane.showMessageDialog(ChangePasswordDialog.this,
"Passwords do not match.",
"New password error",
JOptionPane.ERROR_MESSAGE);
return;
}
if (null != successListener) {
successListener.actionPerformed(new ActionEvent(ChangePasswordDialog.this, e.getID(), "changePassword"));
}
dispose();
}
});
JButton cancelButton = new JButton("Cancel");
cancelButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
dispose();
}
});
JPanel bp = new JPanel();
bp.add(changeButton);
bp.add(cancelButton);
getContentPane().add(panel, BorderLayout.CENTER);
getContentPane().add(bp, BorderLayout.PAGE_END);
pack();
setResizable(false);
setLocationRelativeTo(owner);
Action dispatchClosing = new AbstractAction() {
public void actionPerformed(ActionEvent event) {
dispatchEvent(new WindowEvent(
ChangePasswordDialog.this, WindowEvent.WINDOW_CLOSING
));
}
};
JRootPane root = getRootPane();
root.setDefaultButton(changeButton);
root.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(ESCAPE_STROKE, ApplicationEvent.DISPATCH_WINDOW_CLOSING_ACTION);
root.getActionMap().put(ApplicationEvent.DISPATCH_WINDOW_CLOSING_ACTION, dispatchClosing);
}
public void setSuccessListener(ActionListener successListener) {
this.successListener = successListener;
}
public String getCurrentPassword() {
return new String(currentPassword.getPassword());
}
public String getNewPassword() {
return new String(newPassword.getPassword());
}
public String getRetypePassword() {
return new String(retypePassword.getPassword());
}
public static void main(String[] args) {
ChangePasswordDialog dlg = new ChangePasswordDialog(null) {
@Override
public void dispose() {
super.dispose();
System.exit(0);
}
};
dlg.setSuccessListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
ChangePasswordDialog src = (ChangePasswordDialog) e.getSource();
System.out.println("current =" + src.getCurrentPassword());
System.out.println("new =" + src.getNewPassword());
System.out.println("retype =" + src.getRetypePassword());
}
});
dlg.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
dlg.setVisible(true);
}
}