Aquí hay una solución que usa JOptionPane
para mostrar un JPasswordField
que imprime espacios en blanco como el usuario tipos.
Realmente todo lo que desea colocar en su código es el método showPasswordPrompt()
, pero el código incluye un método main()
que le permite probar fácilmente cómo se ve el diálogo.
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
public class JOptionPaneTest
{
public static String showPasswordPrompt(Component parent, String title)
{
// create a new JPasswordField
JPasswordField passwordField = new JPasswordField();
// display nothing as the user types
passwordField.setEchoChar(' ');
// set the width of the field to allow space for 20 characters
passwordField.setColumns(20);
int returnVal = JOptionPane.showConfirmDialog(parent, passwordField, title, JOptionPane.OK_CANCEL_OPTION);
if (returnVal == JOptionPane.OK_OPTION)
{
// there's a reason getPassword() returns a char[], but we ignore this for now...
// see: http://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords
return new String(passwordField.getPassword());
}
else
{
return null;
}
}
public static void main(String[] args)
{
final JFrame frame = new JFrame();
final JButton button = new JButton("Push Me For Dialog Box");
button.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
String password = showPasswordPrompt(frame, "Enter Password:");
button.setText(password);
}
});
frame.add(button);
frame.setSize(400, 400);
frame.setVisible(true);
}
}
De modo que cuando el usuario escribe los caracteres no aparecen en el campo de texto? Simplemente permanece en blanco? – Adam
Solo tenga cuidado de no confundir a sus usuarios. Si comienza a escribir, los usuarios esperan algún tipo de comentario. Tener una caja que no muestra ningún comentario puede ser confuso. – BlueFish