2010-09-27 72 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