我正在开发一个Java项目,需要让一个按键模拟点击JTextField。我正在寻找的是相当于JButton doClick()方法。
我试图让按键“enter”执行与点击JTextField完全相同的功能。
不确定要提供的其他信息。提前谢谢。
答案 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
的方法,可以由MouseListener
和KeyListener
调用。这将更容易调试 - 减少事件的混乱,这可能非常混乱 - 并且可能更具可读性。
答案 3 :(得分:0)
我想要的是用户按下时 输入,它调用与何时相同的代码 他们点击框架中的任何地方
对我来说仍然没有意义。
当用户点击框架上的任何位置时,会发生以下几件事情:
a)文本字段失去焦点
b)其他一些组件获得重点
您可以在文本字段中添加ActionListener。按下Enter键时调用ActionListener。但那么如何猜测框架上的哪个位置可以生成鼠标?对我来说似乎是随机逻辑。