如何解决如何防止 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())) {
如果您想在输入文本时对其进行编辑,那么您应该:
- 使用
JFormattedTextField
,或 - 使用
DocumentFilter
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。