2010-03-04 78 views
0

不.getKeyCode()返回鍵的int值嗎?因爲我已經設置了我的JTextField來監聽keylistener,並且在keytyped方法中,我檢查了哪些按鍵被按下了。下面是我的代碼片段:JTextField鍵事件處理問題

JTextField jtf = new JTextField(); 
jtf.addKeyListener(this); 
. 
. 
. 
public void keyTyped(KeyEvent e) 
{ 
    if(e.getKeyCode() == KeyEvent.VK_ENTER) System.out.println("pressed enter"); 
} 

但每次我在JTextField中輸入時,什麼也沒有發生,即沒有打印。

回答

0

也許你應該先檢查一下,如果事件處理程序實際上是在你按下任何東西的時候被調用的......或者如果你的事件處理程序能夠接收到KeyEvents對象,我相信問題就在那裏......爲了它的工作,組件必須有焦點... Java Tutorial

+0

是的keyevent處理程序正在響應,但我如何使我的jtextfield響應「輸入」鍵事件? – vamsi 2010-03-04 05:35:09

0

我想你是比較錯誤的值。 e.getKeyCode()返回密鑰,那麼我猜KeyEvent.VK_ENTER是真的不同。

0

VK_ENTER對應於輸入鍵的int值,看它是如何是一個常數。您應該使用來自swing類的輸入和動作映射來偵聽關鍵值,而不是將關鍵字偵聽器應用於文本字段並偵聽一個鍵。由於每次按下某個鍵時都會創建一個事件(儘管可能會或可能不會被處理),所以當按下非Enter鍵的鍵時,應該防止該方法運行。因此防止運行時錯誤和不必要的方法調用

0

我只是想出了一個更好的方法。你應該把所有的關鍵方法放在你的主類下面的內部類中,把你的GUI構造代碼放在你的主方法的外面再使用一個構造方法。現在。你有內在的方法實現KeyListener接口,並實例化與所述接口關聯的三個抽象方法,你只使用keyTyped(KeyEvent e)方法。在該方法內部,實例化一個名爲keyHit的int變量並將其分配給e.getKeyChar();然後把一個if語句,說明如果(keyHit =='\ n')\ n將相應回車鍵,

我試圖發佈我使用的代碼模板來使它工作,但它是有點長經歷和縮進所以如果你真的需要它,我會通過一些E-mail地址或東西它發送給你

+0

如果您發佈您的代碼段,選擇它,然後單擊大括號符號,它會縮進並突出顯示 – Andrew 2012-10-26 09:08:45

0

您必須實現的KeyListener Inteface和覆蓋的keyTyped方法在您的班級定義中使用

jtf.addKeyListener(this). 

替換上面的lin e與

jtf.addKeyListener(new KeyAdapter(){ 

    @Override 
    public void keyTyped(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_ENTER) 
      System.out.println("pressed enter"); 
    } 
});