Java 如何模拟点击JTextField?与JButton doClick()等效?

Java 如何模拟点击JTextField?与JButton doClick()等效?,java,awt,jbutton,jtextfield,awtrobot,Java,Awt,Jbutton,Jtextfield,Awtrobot,我正在从事一个Java项目,需要一个按键来模拟对JTextField的点击。我要寻找的是JButton doClick()方法的等价物 我试图让按键“enter”执行与单击JTextField完全相同的功能 不确定要提供什么其他信息。提前谢谢 public void simulateKey(KeyEvent e, Component c) { Field f = KeyEvent.class.getField("focusManagerIsDispatching"); f.setAc

我正在从事一个Java项目,需要一个按键来模拟对JTextField的点击。我要寻找的是JButton doClick()方法的等价物

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

不确定要提供什么其他信息。提前谢谢

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。这是从你家偷来的

将“回车”发送到JTextField。这是从你家偷来的

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

我还是不明白

当用户单击框架上的任何位置时,会发生两种情况:

a) 文本字段失去焦点

b) 其他一些组成部分获得关注

您可以向文本字段添加ActionListener。按下Enter键时将调用ActionListener。但是,如何猜测在框架上的何处生成鼠标单击?对我来说似乎是随机的逻辑

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

我还是不明白

当用户单击框架上的任何位置时,会发生两种情况:

a) 文本字段失去焦点

b) 其他一些组成部分获得关注


您可以向文本字段添加ActionListener。按下Enter键时将调用ActionListener。但是,如何猜测在框架上的何处生成鼠标单击?对我来说,这似乎是随机逻辑。

如果您希望鼠标和按键同时发生同样的事情,那么让两者都调用一个方法不是更有意义吗?也就是说,您有一个类似于
fieldClicked
的方法,它被
MouseListener
keysistener
调用。这将更容易调试——更少地处理事件,这可能会非常混乱——并且可能更容易阅读。

如果您希望鼠标和按键同时发生同样的事情,那么让两者都调用一个方法不是更有意义吗?也就是说,您有一个类似于
fieldClicked
的方法,它被
MouseListener
keysistener
调用。这将更容易调试——更少地处理事件,这可能会非常混乱——并且可能更可读。

好的,谢谢您的帮助。我想我不太清楚,但我现在发现了一种方法,可以让我的代码工作,这要感谢你的一些想法

我已经考虑过创建一个由两个函数调用的私有方法,但是部分代码需要知道用户点击了哪个JTextField。我发现了.getFocusOwner(),它允许我使用焦点(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时程序运行正常,但当按enter键时,我不知道如何调用刚刚输入的JTextField,所以我想模拟单击JTextField(这需要焦点)。我想我应该解释一下我的整个问题


谢谢。

好的,谢谢你的帮助。我想我不太清楚,但我现在发现了一种方法,可以让我的代码工作,这要感谢你的一些想法

我已经考虑过创建一个由两个函数调用的私有方法,但是部分代码需要知道用户点击了哪个JTextField。我发现了.getFocusOwner(),它允许我使用焦点(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时程序运行正常,但当按enter键时,我不知道如何调用刚刚输入的JTextField,所以我想模拟单击JTextField(这需要焦点)。我想我应该解释一下我的整个问题


谢谢。

我需要一个按键来模拟鼠标点击,而不仅仅是模拟按键。我想让按键调用鼠标点击的功能。这不适用于单元测试。我想要的是,当用户按enter键时,它调用的代码与他们单击帧中任何位置时调用的代码相同。我需要一个按键来模拟鼠标点击,而不仅仅是模拟按键。我想让按键调用鼠标点击的功能。这不适用于单元测试。我想要的是,当用户按enter键时,它调用的代码与他们单击帧中任何位置时调用的代码相同。当您单击插入符号定位到您单击的字符的文本字段时。因此,让“回车”做完全相同的事情没有任何意义,因为我们不知道你想假装点击哪个字符。因为你无法描述你的需求,所以在一个SSCCE:显示当前发生的事情。当你点击一个文本字段时,插入符号定位到你点击的字符。所以输入“执行完全相同的操作”没有任何意义,因为我们不知道您想要假装单击了哪个角色。因为你不能描述你的需求,所以在一个SSCCE上:显示当前正在发生的事情。