2015-11-05 91 views
0

我已經實現了一個JDialog,並且在ok和cancel按鈕之外添加了一個複選框。我已經把取消作爲默認按鈕,當對話框出現時,取消選擇默認,按下回車鍵,執行取消操作。按回車鍵不選擇複選框

通過按Tab鍵,當我到達複選框並按下回車鍵時,它不會選中複選框。但是,在按空格鍵時,它被選中。

但是,使用選項卡切換OK和取消按鈕,然後按下Enter鍵,會執行相應的操作。

請建議應該做什麼,使得在按下回車鍵時選中複選框。

+0

你有一個'關鍵Listener',如果'檢查box'處於焦點或像它選擇它的東西? – 3kings

+0

據我記得「輸入」通常不會選擇一個複選框。因此使用空格鍵。否則,您可以將KeyListener添加到cckckbox。 –

+0

請勿使用KeyLIstener。 Swing被設計成與'Key Bindings'一起使用。 – camickr

回答

1

每個LAF都有一個默認鍵用於選擇複選框。

檢出Key Bindings這將顯示LAF中複選框的默認綁定。

如果您想爲其他密鑰添加相同的功能,則需要管理密鑰綁定。因此,要處理您應該使用的Enter鍵:

InputMap im = checkB.getInputMap(); 
KeyStroke existingKeyStroke = KeyStroke.getKeyStroke("SPACE"); 
KeyStroke addedKeyStroke = KeyStroke.getKeyStroke("ENTER"); 
im.put(addedKeyStroke, im.get(existingKeyStroke)); 
existingKeyStroke = KeyStroke.getKeyStroke("released SPACE"); 
addedKeyStroke = KeyStroke.getKeyStroke("released ENTER"); 
im.put(addedKeyStroke, im.get(existingKeyStroke)); 

上述代碼將支持單個組件上的Enter鍵。如果你想在你的應用程序的所有複選框回車鍵支持,那麼你可以使用:

InputMap im = (InputMap)UIManager.get("CheckBox.focusInputMap"); 
+0

非常感謝,它有所幫助。 –

+0

@AlokRanjan,很高興幫助。不要忘了單擊複選標記以「接受」答案,以便人們知道問題已解決。你也應該接受你以前的問題的答案。 – camickr

+0

我沒有足夠的聲望來讚揚這一點。 –