对每个字符输入做出反应

问题描述 投票:0回答:1

如何随时告知正在填写密码字段的用户其密码的强度是多少 就像电子邮件程序一样,当您填写密码字段时,它会随时通知您 我想要 swing 中的这个功能

我在互联网上找不到解决此问题的方法

java swing
1个回答
0
投票

我创建了一个简单的 GUI 来说明该过程。

Example

密码检查器检查密码的长度。 您可以更改此设置以测试您认为良好或优秀的密码。

这是完整的可运行代码。

import java.awt.BorderLayout;

import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;

public class JPasswordFieldExample implements Runnable {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new JPasswordFieldExample());
    }

    private JLabel strengthLabel;

    @Override
    public void run() {
        JFrame frame = new JFrame("JPasswordField Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.add(createPasswordPanel(), BorderLayout.CENTER);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private JPanel createPasswordPanel() {
        JPanel panel = new JPanel(new BorderLayout());
        panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

        JPasswordField passwordField = new JPasswordField(30);
        Document document = passwordField.getDocument();
        document.addDocumentListener(new DocumentListener() {

            @Override
            public void insertUpdate(DocumentEvent event) {
                checkPassword(event);
            }

            @Override
            public void removeUpdate(DocumentEvent event) {
                checkPassword(event);
            }

            @Override
            public void changedUpdate(DocumentEvent event) {
                checkPassword(event);
            }

            private void checkPassword(DocumentEvent event) {
                Document document = event.getDocument();
                if (document.getLength() < 8) {
                    strengthLabel.setText("Poor");
                } else if (document.getLength() < 12) {
                    strengthLabel.setText("Good");
                } else {
                    strengthLabel.setText("Excellent");
                }
            }

        });
        panel.add(passwordField, BorderLayout.CENTER);

        strengthLabel = new JLabel(" ");
        panel.add(strengthLabel, BorderLayout.SOUTH);

        return panel;
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.