JPasswordField如何设置密码

时间:2012-11-09 10:51:58

标签: java swing passwords jpasswordfield

您好我在使用JPasswordField时想要阅读它getPassword没问题,但我正在做的是当密码未设置时显示InputDialog其中您可以输入密码,然后将密码设置为JPasswordField,但是当我使用setText时,它不会设置密码而且没有方法setPassword()。所以我的问题是我如何设置密码为JPasswordField

String password = "";
JPasswordField passwordField = new JPasswordField();
passwordField.setEchoChar('*');
Object[] obj = {"Bitte ihr PAsswort eingeben:\n\n", passwordField};
Object stringArray[] = {"OK","Cancel"};

if (JOptionPane.showOptionDialog(null, obj, "Passwort", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, stringArray, obj) == JOptionPane.WARNING_MESSAGE)
{
password = new String(passwordField.getPassword());
}

txtFtpUser.setText(username);
panel_1.remove(txtFtpPassword);
txtFtpPassword = new JPasswordField(password);
txtFtpPassword.setBounds(10, 113, 206, 23);
panel_1.add(txtFtpPassword);

2 个答案:

答案 0 :(得分:3)

您认为setText的{​​{1}} 无效是不正确的。请参阅以下代码,它们按预期工作:

JPasswordField

您在构造函数中传递文本的变体(就像您在代码中所做的那样)也可以按预期工作。

所以我会朝另一个方向搜寻。以下部分

  public static void main( String[] args ) {
    EventQueue.invokeLater( new Runnable() {
      @Override
      public void run() {
        JFrame testFrame = new JFrame( "Test" );
        JPasswordField field = new JPasswordField(  );
        field.setColumns( 20 );
        field.setText( "Password" );
        testFrame.add( field );
        testFrame.pack();
        testFrame.setVisible( true );
        testFrame.setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
      }
    } );
  }

让我想知道您是否在UI中看到了新的txtFtpUser.setText(username); panel_1.remove(txtFtpPassword); txtFtpPassword = new JPasswordField(password); txtFtpPassword.setBounds(10, 113, 206, 23); panel_1.add(txtFtpPassword); 。当您从JPasswordField添加/删除组件时,您需要使布局无效,如Container#addContainer#remove方法中所述。

注意:在将密码作为Container传递时,请注意安全问题。但是根据你的评论,你已经意识到了这一点。

答案 1 :(得分:1)

我在这里发现了错误:

if (JOptionPane.showOptionDialog(null, obj, "Passwort", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, stringArray, obj) == JOptionPane.WARNING_MESSAGE)
{
password = new String(passwordField.getPassword());
}

它检查了它是一条警告信息,但它是一个YES_OPTION :)谢谢你的帮助。