【问题标题】:KeyListener - Why is the keyPressed method is delayed by one type?KeyListener - 为什么 keyPressed 方法被一种类型延迟?
【发布时间】:2012-11-15 20:56:24
【问题描述】:

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

}

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

【问题讨论】:

  • 如果您要过滤进入该字段的文本,请改用DocumentFilter
  • @MadProgrammer 是的。稍后我实际上会将它用于搜索框。我会试试那个文档过滤器。谢谢

标签: java swing jtextfield keylistener documentlistener


【解决方案1】:

问题是 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 2011-10-27
    • 2018-06-24
    • 2017-01-15
    • 1970-01-01
    相关资源
    最近更新 更多