我正在尝试将文本输入模拟为JTextField
。我有一个1字符长的字符串,其中包含我要添加的字母,然后运行:
receiver.dispatchEvent(new KeyEvent(this,
KeyEvent.KEY_TYPED, 0,
this.shifted?KeyEvent.SHIFT_DOWN_MASK:0,
KeyEvent.VK_UNDEFINED, text.charAt(0)));
但这似乎并没有改变内容。我在这里缺少什么?
答案 0 :(得分:2)
对我来说看起来像一个虚拟键盘: - )
几乎完全相同的代码对我有用。我建议如下:
将目标JTextField
(在您的情况下,receiver
)作为source
参数传递给KeyEvent
构造函数,即:
receiver.dispatchEvent(new KeyEvent(receiver,
KeyEvent.KEY_TYPED, System.currentTimeMillis(),
modifiers, KeyEvent.VK_UNDEFINED, keyChar);
确保目标JTextField
具有焦点。
修改强>
为了验证上述建议,我测试了这段代码:
Frame frame = new Frame();
TextField text = new TextField();
frame.add(text);
frame.pack();
frame.setVisible(true);
text.dispatchEvent(new KeyEvent(frame,
KeyEvent.KEY_TYPED, 0,
0,
KeyEvent.VK_UNDEFINED, 'H'));
这不起作用,但是如果最后一行被修改如下(目标组件作为source
构造函数的KeyEvent
参数),它可以正常工作:
text.dispatchEvent(new KeyEvent(text,
KeyEvent.KEY_TYPED, 0,
0,
KeyEvent.VK_UNDEFINED, 'H'));