Java KeyListener 控件

标签 java swing jtextfield keylistener

我使用 Key Listener 来读取用户的输入,但我遇到了问题。首先,我读到 JTextField“请输入您的姓名”。如果用户输入一个名字,例如 John,它将更改为 John。但是,如果用户输入无效字符,例如“7”,我想写“请输入您的姓名”,但它会写“请输入您的姓名7” 。它一直持续到给出正确的输入。我该如何纠正它们??

public void keyTyped(KeyEvent e) {
                int ascii = (int)e.getKeyChar();
                if((ascii >= 65 && ascii <=122) || (ascii <= 351 && ascii >= 199 )){
                    if(TextField1.getText().equals("Please enter your name"))
                        TextField1.setText("");
                }
                else
                    TextField1.setText("Please enter your name");   
            }

最佳答案

变量名不应以大写字符开头。

if((ascii >= 65 && ascii <=122) || (ascii <= 351 && ascii >= 199 )){

不要使用魔数(Magic Number)。如果您要检查小写/大写字母字符,请使用 Character 类中的方法,例如 isLetter(...)

不要使用 KeyListener 它是一个旧的 API。 Swing 有更新更好的 API。例如,如果将文本粘贴到文本字段,您的逻辑将不起作用。使用 JFormattedTextFieldDocumentFilter 在键入文本时检查有效数据。请参阅 How to Write a Document Filter 上的 Swing 教程部分和 How to Use Text Fields获取更多信息。

我不建议在文本字段中放置文本以获得提示。对于不同的方法,请查看 Text Prompt

but it writes "Please enter your name7".

发生这种情况的原因是因为 keyTyped 事件是在用键入的文本更新 Document 之前生成的。要最后执行 setText() 方法,您可以将该语句包装在 SwingUtiltities.invokeLater(...) 中。

出于上述所有原因,我不推荐这种方法。

关于Java KeyListener 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33588825/

相关文章:

java - 如何阻止列表将 1 和 0 的混合转换为全 0?

java - 增加 JTextField 组件的高度

version - 是否有已发布的 JDK 版本列表?

java - 使用正则表达式在 Java 中拆分嵌套的 JSON

java - Maven/从构建中删除时间戳

java - 如何在 Java 中制作性感的用户界面

java - 在 JDialog 上使用滚动条 Swing TextArea

java - 如何使用 GridBagLayout 将组件放在右下角?

java - 如何使用 DOM 解析 java 中的内联/混合内容 xml 元素

java - 在java中将文本字段添加到图形