java - 以编程方式触发 JTextField 中的按键事件?

标签 java swing jtextfield keyevent

如何以编程方式触发正在监听 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/

相关文章:

java - 安卓 Java : Modification of instance variable inside button click handler

java - 如何在 ODL Controller 中配置拒绝服务过滤器

java - 为什么我的 ArrayList 创建一个对象的两个副本?

java - 如何编写自己的 ListSelectionEvent?

java - 保持 java textField 中的文本始终处于选中状态

java - 在 JTextField 上添加约束

java - 对象不同,但通过 .equals 函数和 '==' 运算符获得

java - 当多行作为 JTextarea 的输入时,如何在文件中写入多行?

java - 验证 JTextField 值,使其以 "RA"开头,然后包含 8 位数字

java - 在 Nimbus 中,当鼠标悬停时如何绘制 TextField?