将按键发送到JTextField

时间:2010-09-27 03:04:05

标签: java events swing keyboard-events

我正在尝试将文本输入模拟为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 个答案:

答案 0 :(得分:2)

对我来说看起来像一个虚拟键盘: - )

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

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

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

  3. 修改

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

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