Lo más fácil es utilizar JOptionPane
's showConfirmDialog
método y pasar de 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 una costumbre JPanel
para mostrar un mensaje junto con la JPasswordField
. Según el comentario más reciente, también (apresuradamente) agregué código para permitir que el JPasswordField
se enfoque cuando se muestra el cuadro de diálogo 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);
}
}
}
JPasswordField (10) no acepta las contraseñas son más largas que 10. Es mejor hacer esto mucho más amplio o usar el constructor no-arg como @Adamski a continuación. También OK debería ser la opción predeterminada, ya que muchos usuarios dejarán de usar Intro después de escribir su contraseña. Si Cancelar es el predeterminado, escribir la contraseña y luego ingresar simplemente cancelará el diálogo. – gb96
esta es una buena, una etiqueta con JPasswordField en JOptionPane y en mi caso acepta una contraseña de más de 10. –
¿Cómo se da al campo de contraseña el foco cuando aparece el cuadro de diálogo? – mjaggard