2010-09-27 74 views
2

我试图模拟文本输入到JTextField。我有包含我要添加字母a 1个字符长的字符串,我跑:发送按键到JTextField

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

但是,这似乎并没有在所有更改内容。我在这里错过了什么?

+0

适合我。你可以发布一些代码,证明这不起作用? – lins314159 2010-09-27 07:00:58

回答

2

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

几乎是完全相同的代码不会为我工作。我建议如下:

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

    receiver.dispatchEvent(new KeyEvent(receiver, 
        KeyEvent.KEY_TYPED, System.currentTimeMillis(), 
        modifiers, KeyEvent.VK_UNDEFINED, keyChar); 
    
  2. 确保你的目标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')); 

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

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

是的,它是一个虚拟键盘,没有我不专注于文本字段。我一回到项目就会尝试一下。 – viraptor 2010-09-27 11:15:02

+0

确保检查其他建议(将目标组件作为'KeyEvent'的'source'传递)。我在一个项目中遇到了同样的问题。 – Grodriguez 2010-09-27 11:26:58

+0

和耶 - 现在作品:) – viraptor 2010-09-27 17:19:16