0

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);
4

2 回答 2

4

您声称不适用于 asetText是不正确的。请参阅以下按预期工作的代码: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 );
      }
    } );
  }

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

所以我会在另一个方向搜索。以下部分

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

让我想知道您是否JPasswordField在 UI 中看到了您的新功能。当您从 a 添加/删除组件时,Container您需要使布局无效,如Container#addandContainer#remove方法中所述。

注意:将密码作为String. 但是根据您的评论,您已经意识到了这一点。

于 2012-11-09T11:28:06.013 回答
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 :) 谢谢你的所有帮助。

于 2012-11-09T12:38:40.310 回答