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.