【问题标题】:How do you simulate a click on a JTextField? Equivalent of JButton doClick()?如何模拟对 JTextField 的单击?相当于 JButton doClick()?
【发布时间】:2011-01-27 13:20:43
【问题描述】:

我正在处理一个 Java 项目,并且需要一个按键来模拟对 JTextField 的单击。我正在寻找的是 JButton doClick() 方法的等效项。

我试图让按键“输入”执行与单击 JTextField 完全相同的功能。

不确定要提供哪些其他信息。提前致谢。

【问题讨论】:

  • 当您单击文本字段时,插入符号位于您单击的字符上。所以让“输入”做完全相同的事情没有任何意义,因为我们不知道你想假装你点击了什么字符。因为你无法在 SSCCE 后描述你的要求:sscce.org 显示什么目前正在发生。

标签: java awt jbutton jtextfield awtrobot


【解决方案1】:
public void simulateKey(KeyEvent e, Component c) {
   Field f = KeyEvent.class.getField("focusManagerIsDispatching");
   f.setAccessible(true);
   f.set(e, Boolean.TRUE);
   c.dispatchEvent(e);
}

向您的 JTextField 发送“Enter”。这是从here 窃取的。

【讨论】:

  • 我需要一个按键来模拟鼠标点击,而不仅仅是模拟按键。我希望按键调用鼠标单击的功能。这不适用于单元测试。我想要的是当用户按下回车键时,它调用与单击框架中任意位置时相同的代码。
【解决方案2】:

好的,感谢您的帮助。我想我并不清楚,但由于您的一些想法,我现在找到了一种使我的代码工作的方法。

我已经想过只创建一个由两个函数调用的私有方法,但是部分代码需要知道用户单击了哪个 JTextField。我发现了 .getFocusOwner(),它允许我使用 Focus(JTextField)引用当前项目。像这样的

    public void keyPressed(KeyEvent e) {
        if(e.getKeyCode()==KeyEvent.VK_ENTER) {
            Object which = JFrame.getFocusOwner();                
            if(which.getClass() == JTextField.class)
                foo(which);
         }
    }

    public void mouseClicked(MouseEvent e) {                
        Object which = e.getSource();
        if(which.getClass()== JTextField.class) {
            foo(which);
        }
    }

可能有更好的方法来做到这一点,但基本上我有一个 JTextField 数组,当用户单击下一个 JTextField 时程序运行正常,但是当按下回车时我不知道如何调用 JTextField刚刚输入,所以我想模拟点击 JTextField(需要焦点)。我想我应该解释一下我的整个问题。

谢谢。

【讨论】:

    【解决方案3】:

    如果您希望鼠标和按键同时发生相同的事情,那么让两者都调用一个方法不是更有意义吗?也就是说,你有一个像fieldClicked 这样的方法,它被MouseListenerKeyListener 调用。这会更容易调试 - 减少对事件的处理,这可能会非常令人困惑 - 并且可能更具可读性。

    【讨论】:

      【解决方案4】:

      我想要的是当用户按下 输入,它调用与何时相同的代码 他们点击框架中的任意位置

      对我来说仍然没有意义。

      当用户点击框架上的任何位置时,会发生几件事:

      a) 文本字段失去焦点

      b) 其他一些组件获得焦点

      您可以在文本字段中添加一个 ActionListener。当按下 Enter 键时调用 ActionListener。但是那么你如何猜测框架上的哪个位置会产生鼠标点击呢?对我来说似乎是随机逻辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-11
        • 2018-10-29
        • 2011-07-16
        • 1970-01-01
        • 2019-10-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多