【问题标题】:JPasswordField how to set passwordJPasswordField如何设置密码
【发布时间】:2012-10-29 16:35:22
【问题描述】:

您好,当我想阅读它时,我正在使用JPasswordFieldgetPassword 没有问题,但我正在做的是,当未设置密码时,它会显示 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);

【问题讨论】:

  • 没有一些代码 sn-p 很难告诉你哪里出了问题。
  • 我做了 txtPassword = new JPasswordField("PASSWORD");但它仍然没有工作。我也试过 panel.remove(txtPassword);定义它新的,setBounds 并用 panel.add(txtPassword) 再次添加它,它也没有工作。
  • 你不能做类似 [this][1] [1]: stackoverflow.com/a/9108316/37298
  • “panel_1”的布局是否为空?为什么我会看到 2 个 JPasswordField(即“passwordField”和“txtFtpPassword”)。你确定你用对了吗?

标签: java swing passwords jpasswordfield


【解决方案1】:

您声称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);

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

注意:当以String 传递密码时,请注意安全问题。但是根据您的 cmets,您已经意识到了这一点。

【讨论】:

  • @alexj 未显示在您的代码中。考虑发布SSCCE,这样我们就可以停止猜测并提供一些真实的答案
  • 当我删除它时,当我添加它时它被删除,它里面没有任何东西
  • @alexj:您可能还想尽量减少肩部冲浪,如 here 所示。
【解决方案2】:

我在这里发现了错误:

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 :) 谢谢你的帮助。

【讨论】:

    猜你喜欢
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 2012-07-23
    • 1970-01-01
    • 2011-11-24
    • 2015-11-01
    • 1970-01-01
    相关资源
    最近更新 更多