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/