你如何模拟JTextField上的点击?相当于JButton doClick()?

时间:2010-03-15 04:36:16

标签: java awt jbutton jtextfield awtrobot

我正在开发一个Java项目,需要让一个按键模拟点击JTextField。我正在寻找的是相当于JButton doClick()方法。

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

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

4 个答案:

答案 0 :(得分:2)

public void simulateKey(KeyEvent e, Component c) {
   Field f = KeyEvent.class.getField("focusManagerIsDispatching");
   f.setAccessible(true);
   f.set(e, Boolean.TRUE);
   c.dispatchEvent(e);
}

将“Enter”发送到您的JTextField。这是从here偷来的。

答案 1 :(得分: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);
        }
    }

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

谢谢。

答案 2 :(得分:1)

如果你想要同样的事情发生,因为鼠标和按键,有两个调用的方法是否更有意义?也就是说,您有一个类似fieldClicked的方法,可以由MouseListenerKeyListener调用。这将更容易调试 - 减少事件的混乱,这可能非常混乱 - 并且可能更具可读性。

答案 3 :(得分:0)

  

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

对我来说仍然没有意义。

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

a)文本字段失去焦点

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

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