代码之家  ›  专栏  ›  技术社区  ›  viraptor

向JTextField发送按键

  •  2
  • viraptor  · 技术社区  · 14 年前

    我试着把文本输入模拟成 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 回复  |  直到 14 年前
        1
  •  2
  •   Grodriguez    14 年前

    在我看来就像一个虚拟键盘:-)

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

    1. 越过目标 JTextField receiver )作为 source 参数 KeyEvent 建造商,即:

      receiver.dispatchEvent(new KeyEvent(receiver,
          KeyEvent.KEY_TYPED, System.currentTimeMillis(),
          modifiers, KeyEvent.VK_UNDEFINED, keyChar);
      
    2. 文本框 有重点。

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

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

    但是,如果最后一行修改如下(目标组件作为 来源 的参数 建造商),它工作得很好:

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