2015-11-05 92 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

我没有足够的声望来赞扬这一点。 –