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

あなたsetTextは、のために働いていない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);

JPasswordFieldUIに新しいものが表示されるかどうか疑問に思います。およびメソッドに記載されているように、からコンポーネントを追加/削除する場合はContainer、レイアウトを無効にする必要があります。Container#addContainer#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 に答える