如何以编程方式触发正在 ENTER 上侦听事件的JTextField
按键事件?
JTextField
上关键事件的监听器声明如下:
myTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ENTER) {
// Do stuff
}
}
});
感谢。
答案 0 :(得分:13)
不要在KeyListener
上使用JTextField
,只需添加ActionListener
,当按下 ENTER 时会触发(感谢@robin +1 for建议)
JTextField textField = new JTextField();
textField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
//do stuff here when enter pressed
}
});
要触发KeyEvent
在组件上使用requestFocusInWindow()
并使用Robot
课程模拟按键
像这样:
textField.requestFocusInWindow();
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
} catch (AWTException e) {
e.printStackTrace();
}
示例:
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class Test {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTextField textField = new JTextField();
textField.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
System.out.println("Here..");
}
});
frame.add(textField);
frame.pack();
frame.setVisible(true);
textField.requestFocusInWindow();
try {
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_ENTER);
} catch (AWTException e) {
e.printStackTrace();
}
}
});
}
}
<强>更新强>
像@Robin和@mKorbel这样的人建议您可能需要DocumentListener
/ DocumentFiler
(过滤器允许在更新JTextField
之前进行验证)。
在IMO数据验证的情况下,您将需要这个。
看到类似的问题here
它显示了如何将DocumentFilter
添加到JTextField
以进行数据验证。文档过滤的原因就像我说的那样,在显示chnage之前允许验证,这是更有用的IMO
答案 1 :(得分:4)
您可以自己构造Event,然后在JTextField上调用dispatchEvent。
KeyEvent keyEvent = new KeyEvent(...); //create
myTextField.dispatchEvent();
对于KeyEvent的参数,可以参考KeyEvent constructors