如何以编程方式触发正在监听 ENTER 事件的 JTextField
上的按键事件?
我的 JTextField
上关键事件的监听器声明如下:
myTextField.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ENTER) {
// Do stuff
}
}
});
谢谢。
最佳答案
不要在
JTextField
上使用KeyListener
,只需添加ActionListener
,当 ENTER 时将触发该操作监听器按下(谢谢@robin +1的建议)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
之前进行验证) .
在我看来,在数据验证时您将需要这个。
看到这个类似的问题here
它展示了如何将 DocumentFilter
添加到 JTextField
以进行数据验证。文档过滤器的原因正如我所说,允许在显示 chnage 之前进行验证,这在我看来更有用
关于java - 以编程方式触发 JTextField 中的按键事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13563042/