2013-06-23 29 views
0

我已經加入ENTER鍵,默認FocusTraversalKeys這樣...捕捉ENTER KeyEvent的,做一個點擊,而不是

private void focus() { 
    Set forwardKeys = getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS); 
    Set newForwardKeys = new java.util.HashSet(forwardKeys); 
    newForwardKeys.add(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)); 
    setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, newForwardKeys); 
} 

我有我通過使用對焦去一個產品信息的形式,但是當涉及到一個保存按鈕我想點擊按鈕而不是焦點去下一個組件。

我加了的keyPressed和的keyReleased監聽器按鈕,然後嘗試這個...

private void saveButtonKeyPressed(java.awt.event.KeyEvent evt) {          
    if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) { 
     evt.consume(); 
     saveButton.doClick(); 
    } 
} 

此方法同樣適用於我的文字區域,但該代碼沒有點擊,而不是將焦點在下一個組件上,這也是一個按鈕。

請建議一些能幫助我達到所需結果的東西。在下面查找所使用表格的圖像。

http://tinypic.com/r/33acqy9/5

+0

您可以將按鈕的焦點轉移鍵設置爲默認值(即'TAB'),這意味着「ENTER」鍵將默認執行... – MadProgrammer

+0

@MadProgrammer這就是我已經完成的設置Focus遍歷該框中所有內容的鍵,以包含ENTER鍵。我想在按鈕時做「空格鍵」效果,而不是將焦點轉移到下一個組件。 – HMH

+0

也可以爲單個組件設置焦點傳送鍵。看看[由kleo回答](http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/packagingAppsForMac.html)以獲取更多詳細信息 – MadProgrammer

回答

0

從按鈕獲取焦點時定義的SET中刪除了ENTER鍵,因此它現在可以與KeyReleased方法一起使用。

private void saveButtonFocusGained(java.awt.event.FocusEvent evt) {          
    newForwardKeys.remove(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0)); 
    setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, newForwardKeys); 
} 

謝謝大家的幫助!

1

不要使用KeyListener的。 Swing旨在與Key Bindings一起使用。

檢查出Enter Key and Button的一些解決方案,一個使用鍵綁定,另一個使用不同的方法。

+0

嘗試在鏈接中使用DefaultButtonListener類但它沒有幫助。 – HMH