2013-03-24 63 views
0

我正在處理一個JTexfield,它將自己的文本設置爲在窗口焦點時按下的鍵的名稱。我已經成功地讓它只有一個字的代碼:關於JTextFields和打字

@Override 
public void keyReleased(KeyEvent ev) { 
    if (ev.getKeyCode() != 0) { 
    keyTrigger = ev.getKeyCode(); 
    txtTrigger.setText(ev.getKeyText(keyTrigger)); 
} 
} 

@Override 
public void keyTyped(KeyEvent ev) { 
    txtTrigger.setText(""); 
} 

然而,當您按下喜歡F1--12或Ctrl特殊鍵,因爲它使最後輸入非特殊鍵(看起來可怕例如,如果按'T'然後'Ctrl',則在釋放'Ctrl'鍵之前,字段中的文本保持't'狀態。

這是迄今爲止對JTextField代碼:

txtTrigger = new JTextField(); 
txtTrigger.setColumns(10); 
txtTrigger.addKeyListener(this); 
txtTrigger.setBounds(80, 5, 64, 20); 
contentPane.add(txtTrigger); 

我想是直到你鬆開按鍵是空的領域。我怎樣才能讓應用程序以這種方式工作?

+0

我不認爲文本字段是捕獲此類事件的最佳選擇 – MadProgrammer 2013-03-24 23:38:24

回答

1

我不認爲可編輯的文本字段是您的最佳選擇。我過去所做的基本上是僞造的。

我已經生成了一個「看起來」像JTextField的自定義組件,並且使用我自己的KeyListener,向視圖添加了元素(我自己創建了「關鍵」渲染器,但是您可以簡單地創建一個列表您可以渲染的String個元素)。

基本上,當觸發keyPressed時,我會將關鍵代碼添加到列表中(考慮到它的修飾符狀態等事情)。如果使用相同的密鑰代碼觸發另一個關鍵事件,那麼您可以忽略它。

當觸發keyReleased時,您可以從活動列表中刪除該鍵碼。

+1

另請參見引用的示例[此處](http://stackoverflow.com/a/11724866/230513)。 – trashgod 2013-03-25 08:26:25

+0

是的。我想我會用你的方式。非常感謝。 – MetalTxus 2013-03-25 10:59:49

0

您可以將keylistener添加到jframe或許多組件... 只需確保組件具有焦點。