将按键发送到JTextField

我正在尝试将文本输入模拟到JTextField 。 我有一个1字符长的字符串,其中包含我要添加的字母,然后运行:

 receiver.dispatchEvent(new KeyEvent(this, KeyEvent.KEY_TYPED, 0, this.shifted?KeyEvent.SHIFT_DOWN_MASK:0, KeyEvent.VK_UNDEFINED, text.charAt(0))); 

但这似乎并没有改变内容。 我在这里想念的是什么?

看起来像我的虚拟键盘:-)

几乎完全相同的代码对我有用。 我建议如下:

  1. 将目标JTextField (在您的情况下, receiver )作为source参数传递给KeyEvent构造函数,即:

     receiver.dispatchEvent(new KeyEvent(receiver, KeyEvent.KEY_TYPED, System.currentTimeMillis(), modifiers, KeyEvent.VK_UNDEFINED, keyChar); 
  2. 确保您的目标JTextField具有焦点。

编辑:

为了validation上述建议,我测试了这段代码:

 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')); 

这不起作用,但是如果最后一行被修改如下(目标组件作为KeyEvent构造函数的source参数),它可以正常工作:

 text.dispatchEvent(new KeyEvent(text, KeyEvent.KEY_TYPED, 0, 0, KeyEvent.VK_UNDEFINED, 'H'));