java - KeyTyped 方法说 TextField 为空...但实际上不是

标签 java swing user-interface jtextfield keylistener

        Jtxtfield.addKeyListener(new KeyListener() {
        public void keyPressed(KeyEvent e) {};
        public void keyTyped(KeyEvent e) {
            if(Jtxtfield.getText().equals(""))
            System.out.println("hello1");
        }public void keyReleased(KeyEvent e) {
            if(Jtxtfield.getText().equals(""))
            System.out.println("hello2");
        }
    });

按下的第一个键(例如“a”)的输出是:hello1。 如果我按第二个键(例如再次按“a”),则不会有输出(如预期)。 如果我按两次删除键,我会得到 hello1 hello2。

为什么会发生这种情况?为什么 keyTyped 方法将 txtfield 视为其中没有任何内容?更具体地说,为什么当我按下文本字段中第一个按下的键时,我只得到 hello1?

最佳答案

文本字段按顺序触发三个事件:按键按下事件、按键键入事件和按键释放事件。按键事件没有按键码信息;他们也没有修饰符信息。如果您只关心用户键入哪些字符,则应该处理按键键入事件。如果您关心用户按下/释放哪些键,您应该处理按键按下/释放事件。

如果您想要文本字段的值,请使用 keyReleased(KeyEvent e) 作为

JTextField txt = (JTextField) e.getSource();
System.out.println(txt.getText());

您可以找到一个示例 here

您也可以使用DocumentListener

关于java - KeyTyped 方法说 TextField 为空...但实际上不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9528052/

相关文章:

java - 如何在java中更新ComBobox的值?我正在使用 Netbeans

java - 如何让代码等待 GUI 完成?

.net - 为 Windows Forms .NET 寻找一些好的 GUI 测试框架/GUI 自动化测试工具

java - 使用套接字从服务器获取实时数据

java - 在同一个项目中使用 'javax.swing.Timer'和 'java.util.Timer'?

C# => JAVA : Filling a static ArrayList on declaration. 可能吗?

java - ssh -X(X11 转发)java swing 应用程序有缓慢的下拉列表

python - GUI 测试工具 PyUseCase 与 Dogtail 相比如何?

java - 多态和抽象父类

java - 使用注解创建时,默认情况下如何命名Bean?