Saltar al contenido

JOptionPane para obtener la contraseña

Emilio, parte de este equipo, nos hizo el favor de crear esta reseña ya que conoce a la perfección este tema.

Solución:

Sí, es posible usar JOptionPane.showOptionDialog(). Algo como esto:

JPanel panel = new JPanel();
JLabel label = new JLabel("Enter a password:");
JPasswordField pass = new JPasswordField(10);
panel.add(label);
panel.add(pass);
String[] options = new String[]"OK", "Cancel";
int option = JOptionPane.showOptionDialog(null, panel, "The title",
                         JOptionPane.NO_OPTION, JOptionPane.PLAIN_MESSAGE,
                         null, options, options[1]);
if(option == 0) // pressing OK button

    char[] password = pass.getPassword();
    System.out.println("Your password is: " + new String(password));

Lo más fácil es usar JOptionPane‘s showConfirmDialog y pasar una referencia a un JPasswordField; p.ej

JPasswordField pf = new JPasswordField();
int okCxl = JOptionPane.showConfirmDialog(null, pf, "Enter Password", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);

if (okCxl == JOptionPane.OK_OPTION) 
  String password = new String(pf.getPassword());
  System.err.println("You entered: " + password);

Editar

A continuación se muestra un ejemplo utilizando un personalizado JPanel para mostrar un mensaje junto con el JPasswordField. Según el comentario más reciente, también agregué (a toda prisa) código para permitir que JPasswordField para obtener el foco cuando el cuadro de diálogo se muestra por primera vez.

public class PasswordPanel extends JPanel 
  private final JPasswordField passwordField = new JPasswordField(12);
  private boolean gainedFocusBefore;

  /**
   * "Hook" method that causes the JPasswordField to request focus the first time this method is called.
   */
  void gainedFocus() 
    if (!gainedFocusBefore) 
      gainedFocusBefore = true;
      passwordField.requestFocusInWindow();
    
  

  public PasswordPanel() 
    super(new FlowLayout());

    add(new JLabel("Password: "));
    add(passwordField);
  

  public char[] getPassword() 
      return passwordField.getPassword();
  

  public static void main(String[] args) 
      PasswordPanel pPnl = new PasswordPanel();
      JOptionPane op = new JOptionPane(pPnl, JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);

      JDialog dlg = op.createDialog("Who Goes There?");

      // Wire up FocusListener to ensure JPasswordField is able to request focus when the dialog is first shown.
      dlg.addWindowFocusListener(new WindowAdapter() 
        @Override
        public void windowGainedFocus(WindowEvent e) 
            pPnl.gainedFocus();
        
      );

      if (op.getValue() != null && op.getValue().equals(JOptionPane.OK_OPTION)) 
          String password = new String(pPnl.getPassword());
          System.err.println("You entered: " + password);
      
  

Puede crear su propio diálogo que amplíe JDialog y luego puede poner lo que quiera en él.

Eres capaz de añadir valor a nuestro contenido aportando tu veteranía en las aclaraciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *