Kat*_*ine 0 java swing keylistener jtextfield 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) {
}
}
Run Code Online (Sandbox Code Playgroud)
有什么建议?提前致谢 :)
问题是在更新TextBox 之前keyPressed调用.
代替
tf.addKeyListener(this);
Run Code Online (Sandbox Code Playgroud)
试试这个:
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());
}
Run Code Online (Sandbox Code Playgroud)
你需要导入javax.swing.event.DocumentEvent和javax.swing.event.DocumentListener.