首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在输入JPasswordField时偷看密码

如何在输入JPasswordField时偷看密码
EN

Stack Overflow用户
提问于 2016-01-15 23:48:47
回答 1查看 905关注 0票数 0

我想创建一个可以在键入时看到字符的JPasswordField,我尝试了passtxt.setEchoChar((char) 0);,但它完全将'*'更改为文本我不想要这个,我想在逐个字符键入时查看文本(就像我们在移动浏览器中看到的那样)谢谢

代码语言:javascript
复制
import java.awt.BorderLayout;
import java.awt.Checkbox;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.Box;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

public class Main {
  public static void main(String args[]) {
    JFrame f = new JFrame("JPasswordField  ");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel p=new JPanel();
    p.add(new JLabel("Username"));
    p.add(new JTextField(20));
     p.add(new JLabel("Password"));
    JPasswordField jpassword = new JPasswordField(20);

    p.add(jpassword);

    Checkbox c=new Checkbox("type password and click");
    c.addItemListener(new ItemListener() {
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED) {
                jpassword.setEchoChar('*');
            } else {
                jpassword.setEchoChar((char) 0);
            }
        }
    });
    jpassword.setEchoChar((char)0); 
    p.add(c);
    f.add(p);
    f.setSize(300, 200);
    f.setVisible(true);


  }
}
EN

回答 1

Stack Overflow用户

发布于 2016-01-16 00:51:38

这是一个简单的解决方案。使用JTextField而不是JPasswordField和String成员分别存储真实密码:

代码语言:javascript
复制
private JTextField textField = new JTextField();
private String password = "";

实现java.awt.event.KeyListener,并覆盖keyReleased,如下所示:

代码语言:javascript
复制
public void keyReleased(KeyEvent e) {
    if (Character.isLetter(e.getKeyChar()) || 
        Character.isDigit(e.getKeyChar())) { //Add other valid characters as needed

        //Get text and last typed character
        String text = textField.getText();
        char typed = text.charAt(text.length()-1);
        //store typed letter separately for later use
        password += (text.length() > 0) ? typed : "";

        StringBuilder sb = new StringBuilder();
        for (int c=0; c<text.length()-1; c++) {
            sb.append("*");
        }
        sb.append(typed);

        //set password with asterisks, for authentication use member: password
        textField.setText(sb.toString());
}

将侦听器添加到文本字段,就完成了。

每当键入新的字母或数字时,这将覆盖除最后键入的*字符之外的所有字符。

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

https://stackoverflow.com/questions/34814840

复制
相关文章

相似问题

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