gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:27:51 26 4
gpt4 key购买 nike

我想做的是按下键盘的那一刻,文本字段上写的任何内容都将显示在 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) {
}

}

有什么建议吗?预先感谢:)

最佳答案

问题在于 keyPressed 在 TextBox 更新之前被调用。

而不是

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

关于java - KeyListener - 为什么 keyPressed 方法会延迟一种类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13597760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com