当前位置: 首页 > 面试题库 >

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

卢元龙
2023-03-14
问题内容

如何以编程方式触发JTextField正在侦听上的事件的上的按键事件ENTER

我的关键事件的侦听JTextField器声明如下:

myTextField.addKeyListener(new KeyAdapter() {

    @Override
    public void keyTyped(KeyEvent e) {
        if (e.getKeyChar() == KeyEvent.VK_ENTER) {
            // Do stuff
        }
    }
});

谢谢。


问题答案:
  • 不要使用KeyListenerJTextField简单地增加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数据验证时,将需要此功能。

它显示了如何将添加DocumentFilterJTextField数据验证。文件过滤器的原因是,正如我所说,它允许在显示chnage之前进行验证,这更有用IMO



 类似资料:
  • 问题内容: 我想在运行时触发一个元素,例如: 要么 如何才能做到这一点? 问题答案: 语法如下: 有关Angular Extend方式的更多信息,请参见此处。 如果使用的是 旧版本的angular ,则应使用 trigger 而不是 triggerHandler 。 如果需要应用停止传播,则可以按以下方式使用此方法:

  • 问题内容: 如果我去这里 然后单击“启动演示模态”,即可完成预期的操作。我将模式用作注册过程的一部分,并且涉及服务器端验证。如果有问题,我想将用户重定向到显示我的验证消息的相同模式。目前,除了用户的物理点击之外,我无法弄清楚如何显示模式。如何以编程方式启动模型? 问题答案: 为了手动显示模式弹出窗口,您必须执行此操作 以前,您需要使用对其进行初始化,以便在您手动执行之前不会显示它。 模态容器的ID

  • 我需要将基于“SNS”的触发器添加到Lambda函数中,但要创建事件源映射-AWS CLI命令参考中只显示DynamoDB、Kinesis、SQS。 用于基于SNS、S3等的触发器的aws lambda create event source mapping命令失败,原因是事件源arn: 调用CreateEventSourceMaps操作时发生错误(InvalidParameterValueExc

  • 问题内容: 我有一个隐藏的文件输入元素。是否可以通过按钮的单击事件来触发其 选择文件 对话框? 问题答案: 如果您希望使用自己的按钮来上传文件而不是使用,则可以执行以下操作: 请注意,我使用而不是。您不能在未显示的文件输入上调用click事件。

  • 有没有办法以编程方式创建firestore触发器? 我希望使用火还原触发器来保持复合对象在初始化位置的一致性- 但是,我不需要查看集合中的每个“主要”文档,因为只有有限数量的“主要”对象具有“次要”关系——我的假设是,只查看特定文档而不是整个集合将提高总体性能并降低成本,因为触发器只会为相关的文档触发文档,与集合中的文档总数相比,要侦听的文档数量要少得多 虽然我可以将这些具有该关系的文档放在一个单

  • 问题内容: 我想以编程方式在标签上触发click事件。 仅仅调用click()似乎没有任何作用,或者至少它没有弹出文件选择对话框。 我一直在尝试使用侦听器捕获事件并重定向事件,但是我无法像某些人单击它那样使它真正执行事件。 问题答案: 你可以这样做,在所有的浏览器,IE理应 不会 允许它,但Mozilla和Opera没有。 当您在GMail中编写邮件时,“附加文件”功能是针对IE和支持该功能的任何