Oto rozwiązanie, które używa JOptionPane
do wyświetlania JPasswordField
, który drukuje puste miejsca jako użytkownik typy.
Naprawdę wszystko, co chcesz umieścić w kodzie, to metoda showPasswordPrompt()
, ale kod zawiera metodę main()
, która pozwala łatwo przetestować wygląd okna dialogowego.
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);
}
}
W związku z tym, że użytkownik wpisze znaki, nie pojawiają się one w polu tekstowym? Po prostu pozostaje puste? – Adam
Tylko uważaj, aby nie mylić użytkowników. Jeśli zaczniesz pisać, użytkownicy oczekują jakiejś informacji zwrotnej. Posiadanie skrzynki, która nie wyświetla żadnych opinii, może być mylące. – BlueFish