KeyListener - 为什么keyPressed方法被一种类型延迟?

时间:2012-11-28 04:19:19

标签: java swing jtextfield keylistener documentlistener

我想要做的是当我按下键盘时,文本字段上写的任何内容都将显示在System.out.printLn()中。但对于我制作的每种类型,只有在我按下另一个键时才会显示。

例如..我按下' A' ......然后会显示一个空白区域。 我按下' B' ......然后' A'将会显示。 我按下' C' ......然后' AB'将会出现。

我想要的是如果我按下A' ......然后' A'将显示...等 可能吗?我也在keyTyped()上尝试了这个,但结果是一样的..

这是我的短代码......

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class NewClass extends JFrame implements KeyListener{
JTextField tf = new JTextField();
NewClass(){
    this.setLayout(null);
    tf.setBounds(50, 50, 200, 30);

    add(tf);
    tf.addKeyListener(this);
}

public static void main(String[] args) {
    NewClass r = new NewClass();
    r.setVisible(true);
    r.setSize(300, 200);
    r.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

@Override
public void keyTyped(KeyEvent e) {
}

@Override
public void keyPressed(KeyEvent e) {
    System.out.println(tf.getText());
}

@Override
public void keyReleased(KeyEvent e) {
}

}

有什么建议吗?提前谢谢:)

1 个答案:

答案 0 :(得分:5)

问题是在更新TextBox之前,keyPressed被称为

而不是

tf.addKeyListener(this);

尝试使用:

tf.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent e) {
    printIt();
}
public void removeUpdate(DocumentEvent e) {
    printIt();
}
public void insertUpdate(DocumentEvent e) {
    printIt();
}

public void printIt() {
    System.out.println(tf.getText());
}

您需要导入javax.swing.event.DocumentEventjavax.swing.event.DocumentListener