首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPasswordField如何设置密码

JPasswordField如何设置密码
EN

Stack Overflow用户
提问于 2012-11-09 18:51:58
回答 2查看 11.6K关注 0票数 0

您好,我使用的是JPasswordField,当我想要读取它时,getPassword没有问题,但我所做的是,当没有设置密码时,它会显示一个InputDialog,您可以在其中输入密码,然后它应该将密码设置到JPasswordField中,但是当我使用setText时,它不会设置它,也没有setPassword()方法。因此,我的问题是如何设置JPasswordField的密码

代码语言:javascript
复制
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);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-09 20:38:40

我发现这里的错误是:

代码语言:javascript
复制
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 :)谢谢您的帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-11-09 19:28:06

您声称JPasswordField无法使用setText是不正确的。请看下面这段代码,它可以像预期的那样工作:

代码语言:javascript
复制
  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 );
      }
    } );
  }

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

所以我会从另一个方向去寻找。下面的部分

代码语言:javascript
复制
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传递时,请注意安全问题。但根据你的评论,你已经意识到了这一点。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13306689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档