Скрыть данные с помощью JOptionPane - PullRequest
7 голосов
/ 29 марта 2012

Как скрыть символы, используя showInputDialog панели JOption. Например: JOptionPane.showInputDialog («Введите ваше имя:»).

Я хочу скрыть символы, когда пользователь указывает свое имя. Я был в середине приложения. Если я смогу скрыть этих персонажей, моя работа закончится. Я не хочу использовать JPasswordField, так как для этого требуется форма для хранения метки (JPasswordField).

Ответы [ 3 ]

3 голосов
/ 02 апреля 2012
public static String getName() {
    JPasswordField jpf = new JPasswordField(24);
    JLabel jl = new JLabel("Enter Your Name: ");
    Box box = Box.createHorizontalBox();
    box.add(jl);
    box.add(jpf);
    int x = JOptionPane.showConfirmDialog(null, box, "Name Entry", JOptionPane.OK_CANCEL_OPTION);

    if (x == JOptionPane.OK_OPTION) {
      return jpf.getText();
    }
    return null;
  }
2 голосов
/ 08 апреля 2012

Вот решение, которое использует JOptionPane для отображения JPasswordField, который печатает пробелы при вводе пользователем.

Действительно, все, что вы хотели бы поместить в свой код, это метод showPasswordPrompt(), нокод включает в себя метод main(), который позволяет легко проверить, как выглядит диалоговое окно.

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 );
    }
}
1 голос
/ 29 марта 2012

Вы можете использовать JPasswordField, который по умолчанию заменяет символы на '*'.

Вы можете прочитать это:

Почему JPasswordField.getPassword () создает строку с паролем в ней?

И если вы ищете альтернативу JPasswordField, вы можете прочитать это:

Есть ли альтернатива JPasswordField?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...