Mega Code Archive

 
Categories / Java / Swing Components
 

Password Dialog

/*  * Copyright (C) 2001-2007 Stephen Ostermiller  * http://ostermiller.org/contact.pl?regarding=Java+Utilities  *  * This program is free software; you can redistribute it and/or modify  * it under the terms of the GNU General Public License as published by  * the Free Software Foundation; either version 2 of the License, or  * (at your option) any later version.  *  * This program is distributed in the hope that it will be useful,  * but WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  * GNU General Public License for more details.  *  * See COPYING.TXT for details.  */ import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; /**  * A modal dialog that asks the user for a user name and password.  * More information about this class is available from <a target="_top" href=  * "http://ostermiller.org/utils/PasswordDialog.html">ostermiller.org</a>.  *  * <code>  * <pre>  * PasswordDialog p = new PasswordDialog(null, "Test");  * if(p.showDialog()){  *     System.out.println("Name: " + p.getName());  *     System.out.println("Pass: " + p.getPass());  * } else {  *     System.out.println("User selected cancel");  * }  * </pre>  * </code>  *  * @author Stephen Ostermiller http://ostermiller.org/contact.pl?regarding=Java+Utilities  * @since ostermillerutils 1.00.00  */ public class PasswordDialog extends JDialog {   /**    * Serial version id    */   private static final long serialVersionUID = -832548326686122133L;   /**    * Locale specific strings displayed to the user.    *    * @since ostermillerutils 1.00.00    */   protected ResourceBundle labels;   /**    * Set the locale used for getting localized    * strings.    *    * @param locale Locale used to for i18n.    *    * @since ostermillerutils 1.00.00    */   @Override public void setLocale(Locale locale){     labels = ResourceBundle.getBundle("com.Ostermiller.util.PasswordDialog",  locale);   }   /**    * Where the name is typed.    *    * @since ostermillerutils 1.00.00    */   protected JTextField name;   /**    * Where the password is typed.    *    * @since ostermillerutils 1.00.00    */   protected JPasswordField pass;   /**    * The OK button.    *    * @since ostermillerutils 1.00.00    */   protected JButton okButton;   /**    * The cancel button.    *    * @since ostermillerutils 1.00.00    */   protected JButton cancelButton;   /**    * The label for the field in which the name is typed.    *    * @since ostermillerutils 1.00.00    */   protected JLabel nameLabel;   /**    * The label for the field in which the password is typed.    *    * @since ostermillerutils 1.00.00    */   protected JLabel passLabel;   /**    * Set the name that appears as the default    * An empty string will be used if this in not specified    * before the dialog is displayed.    *    * @param name default name to be displayed.    *    * @since ostermillerutils 1.00.00    */   @Override public void setName(String name){     this.name.setText(name);   }   /**    * Set the password that appears as the default    * An empty string will be used if this in not specified    * before the dialog is displayed.    *    * @param pass default password to be displayed.    *    * @since ostermillerutils 1.00.00    */   public void setPass(String pass){     this.pass.setText(pass);   }   /**    * Set the label on the OK button.    * The default is a localized string.    *    * @param ok label for the ok button.    *    * @since ostermillerutils 1.00.00    */   public void setOKText(String ok){     this.okButton.setText(ok);     pack();   }   /**    * Set the label on the cancel button.    * The default is a localized string.    *    * @param cancel label for the cancel button.    *    * @since ostermillerutils 1.00.00    */   public void setCancelText(String cancel){     this.cancelButton.setText(cancel);     pack();   }   /**    * Set the label for the field in which the name is entered.    * The default is a localized string.    *    * @param name label for the name field.    *    * @since ostermillerutils 1.00.00    */   public void setNameLabel(String name){     this.nameLabel.setText(name);     pack();   }   /**    * Set the label for the field in which the password is entered.    * The default is a localized string.    *    * @param pass label for the password field.    *    * @since ostermillerutils 1.00.00    */   public void setPassLabel(String pass){     this.passLabel.setText(pass);     pack();   }   /**    * Get the name that was entered into the dialog before    * the dialog was closed.    *    * @return the name from the name field.    *    * @since ostermillerutils 1.00.00    */   @Override public String getName(){     return name.getText();   }   /**    * Get the password that was entered into the dialog before    * the dialog was closed.    *    * @return the password from the password field.    *    * @since ostermillerutils 1.00.00    */   public String getPass(){     return new String(pass.getPassword());   }   /**    * Finds out if user used the OK button or an equivalent action    * to close the dialog.    * Pressing enter in the password field may be the same as    * 'OK' but closing the dialog and pressing the cancel button    * are not.    *    * @return true if the the user hit OK, false if the user canceled.    *    * @since ostermillerutils 1.00.00    */   public boolean okPressed(){     return pressed_OK;   }   /**    * update this variable when the user makes an action    *    * @since ostermillerutils 1.00.00    */   private boolean pressed_OK = false;   /**    * Create this dialog with the given parent and title.    *    * @param parent window from which this dialog is launched    * @param title the title for the dialog box window    *    * @since ostermillerutils 1.00.00    */   public PasswordDialog(Frame parent, String title) {     super(parent, title, true);     setLocale(Locale.getDefault());     if (title==null){       setTitle(labels.getString("dialog.title"));     }     if (parent != null){       setLocationRelativeTo(parent);     }     // super calls dialogInit, so we don't need to do it again.   }   /**    * Create this dialog with the given parent and the default title.    *    * @param parent window from which this dialog is launched    *    * @since ostermillerutils 1.00.00    */   public PasswordDialog(Frame parent) {     this(parent, null);   }   /**    * Create this dialog with the default title.    *    * @since ostermillerutils 1.00.00    */   public PasswordDialog() {     this(null, null);   }   /**    * Called by constructors to initialize the dialog.    *    * @since ostermillerutils 1.00.00    */   @Override protected void dialogInit(){     if (labels == null){       setLocale(Locale.getDefault());     }     name = new JTextField("", 20);     pass = new JPasswordField("", 20);     okButton = new JButton(labels.getString("dialog.ok"));     cancelButton = new JButton(labels.getString("dialog.cancel"));     nameLabel = new JLabel(labels.getString("dialog.name") + " ");     passLabel = new JLabel(labels.getString("dialog.pass") + " ");     super.dialogInit();     KeyListener keyListener = (new KeyAdapter() {       @Override public void keyPressed(KeyEvent e){         if (e.getKeyCode() == KeyEvent.VK_ESCAPE ||             (e.getSource() == cancelButton             && e.getKeyCode() == KeyEvent.VK_ENTER)){           pressed_OK = false;           PasswordDialog.this.setVisible(false);         }         if (e.getSource() == okButton &&             e.getKeyCode() == KeyEvent.VK_ENTER){           pressed_OK = true;           PasswordDialog.this.setVisible(false);         }       }     });     addKeyListener(keyListener);     ActionListener actionListener = new ActionListener() {       public void actionPerformed(ActionEvent e){         Object source = e.getSource();         if (source == name){           // the user pressed enter in the name field.           name.transferFocus();         } else {           // other actions close the dialog.           pressed_OK = (source == pass || source == okButton);           PasswordDialog.this.setVisible(false);         }       }     };     GridBagLayout gridbag = new GridBagLayout();     GridBagConstraints c = new GridBagConstraints();     c.insets.top = 5;     c.insets.bottom = 5;     JPanel pane = new JPanel(gridbag);     pane.setBorder(BorderFactory.createEmptyBorder(10, 20, 5, 20));     c.anchor = GridBagConstraints.EAST;     gridbag.setConstraints(nameLabel, c);     pane.add(nameLabel);     gridbag.setConstraints(name, c);     name.addActionListener(actionListener);     name.addKeyListener(keyListener);     pane.add(name);     c.gridy = 1;     gridbag.setConstraints(passLabel, c);     pane.add(passLabel);     gridbag.setConstraints(pass, c);     pass.addActionListener(actionListener);     pass.addKeyListener(keyListener);     pane.add(pass);     c.gridy = 2;     c.gridwidth = GridBagConstraints.REMAINDER;     c.anchor = GridBagConstraints.CENTER;     JPanel panel = new JPanel();     okButton.addActionListener(actionListener);     okButton.addKeyListener(keyListener);     panel.add(okButton);     cancelButton.addActionListener(actionListener);     cancelButton.addKeyListener(keyListener);     panel.add(cancelButton);     gridbag.setConstraints(panel, c);     pane.add(panel);     getContentPane().add(pane);     pack();   }   /**    * Shows the dialog and returns true if the user pressed ok.    *    * @return true if the the user hit OK, false if the user canceled.    *    * @since ostermillerutils 1.00.00    */   public boolean showDialog(){     setVisible(true);     return okPressed();   } }