在Java Swing中如何在JTextField中隐藏/显示密码

18

我一直在开发一个密码强度检查器,其工作方式是用户在文本字段中输入一些随机文本,然后即时显示可视化反馈(得分细分)。我还添加了一个复选框,选中后应该隐藏密码,即用星号替换所有字符,同时保留用户实际输入的文本。使用文档侦听器来跟踪文本字段内的更改。(每个字符进入时都会进行分析和评分)

所以我的问题是,如何准确地用星号屏蔽用户输入并保留其原始值?

这是GUI的外观:

http://speedcap.net/sharing/screen.php?id=files/51/2f/512f9abb3f92a25add7c593e9d80e9e4.png

4个回答

40
如何用星号掩盖用户输入并保留其原始值?
使用JPasswordField。该组件有一个很好的函数jPasswordField.getPassword()可用于获取密码作为char[]以进行处理。
  • 使用jPasswordField1.setEchoChar('*')将密码字符掩盖为*
  • 如果您希望看到您正在插入的值,请使用jPasswordField1.setEchoChar((char)0);。设置值为0表示您希望看到文本在输入时与标准的JTextField类似。
教程和参考:
  1. 如何使用密码字段
  2. setEchoChar(char)

将回显字符设置为0以禁用掩码:jPasswordField1.setEchoChar('\u0000') - Hollis Waite
@Sage,每当我点击隐藏复选框时,文本字段就会失去焦点,然后我必须再次点击文本字段才能使更改生效。 我曾经使用requestFocus函数来重新获取焦点,但似乎不起作用。 我可能做错了什么? - Manas Bajaj
@EnTHuSiAsTx94,请发布另一个问题并附上简短描述,这样我和其他经验丰富的社区成员可以帮助您解决问题。最好还附上一个简短而简单的工作示例,以便能够重现您的问题 :) - Sage

3

使用密码字段而不是文本字段


2

感谢您的教程,

还有一个问题,

操作复选框/双击

private void lihatActionPerformed(java.awt.event.ActionEvent evt) {  

   if (lihat.isSelected()) {
      password.setEchoChar((char)0); //password = JPasswordField
   } else {
      password.setEchoChar('*');
   }
}

欢迎来到Stack Overflow!这似乎更像是一条评论,而不是一个答案。当您的声望提高时,您将能够发布评论 - Nathan Tuggy

1
我按照以下方式解决了它:
if ( jPasswordField.getEchoChar() != '\u0000' ) {
    jPasswordField.setEchoChar('\u0000');
} else {
    jPasswordField.setEchoChar((Character) UIManager.get("PasswordField.echoChar"));
}

假设这不是一个 JTextField 而是一个 JPasswordField - Frédéric Perron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接