不要KeyListener
在JTextField
简单的添加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
更新之前进行验证)。
在 IMO 数据验证的情况下,您将需要这个。
在这里看到这个类似的问题
它展示了如何将 a 添加DocumentFilter
到 a 以JTextField
进行数据验证。文档过滤器的原因正如我所说允许在显示更改之前进行验证,这对 IMO 更有用