微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何防止 JTextField 计算退格

如何解决如何防止 JTextField 计算退格

我试图确保用户在 JTextField 中输入强密码。然而,它工作得很好,但它会计算点击时的退格、移位和 ctrl

            public void keypressed(KeyEvent e) {
            // if else make sure that the user do not enter space
            if (Character.isWhitespace(e.getKeyChar())) {
                passwordMessage.setText("spaces are not allowed!!");
                passwordtext.setEditable(false);
            } else {
                passwordMessage.setText("");
                passwordtext.setEditable(true);
            }
            
            // if elseif else to make sure that the user enter a good length
            // passwordtext.getText().length() does not count the first entered so I -1 from the length
            if(passwordtext.getText().length() >= 14) { // if length is 15 or above
                passwordMessage.setForeground(Color.GREEN);
                passwordMessage.setText("password is Strong");              
            }
            else if(passwordtext.getText().length() >= 7) { // if length is 8 or above
                passwordMessage.setForeground(Color.ORANGE);
                passwordMessage.setText("password is Good");
            }
            else if(passwordtext.getText().length() < 7) { // if length is less than 8
                passwordMessage.setForeground(Color.RED);
                passwordMessage.setText("minimum password is 8 letters or digits!!");
            }
            else if(passwordtext.getText().length() == 0) { // setting the label text to be empty
                passwordMessage.setText("");
            }
        }

-例如,如果用户输入 12345678,“password is Good”将出现在标签中,但如果他单击退格键并删除 8,则“password is Good”仍将出现在标签中,因为它删除了 8 但添加了退格的点击所以长度仍然是8

-当用户输入 1234567 然后点击 ctrl 时会发生同样的事情,因为它计算了 ctrl 的点击次数,所以会出现“密码是好的”

解决方法

但它会计算点击时的箭头和退格

您的逻辑应基于文本字段中的文本。

不要使用 KeyListener。

相反,您可以使用 DocumentListener。每次在文本字段中添加或删除文本时都会生成一个事件。

阅读关于 How to Write a DocumentListener 的 Swing 教程中的部分,了解更多信息和工作示例。

if (Character.isWhitespace(e.getKeyChar())) {

如果您想在输入文本时对其进行编辑,那么您应该:

  1. 使用JFormattedTextField,或
  2. 使用 DocumentFilter

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。