禁用空格键触发JButton的点击功能

8

JButtons认为按下空格键与单击JButton相同(假设JButton具有焦点,这里我是这样假设的)。有没有办法关闭此行为,使它们忽略按下空格键?

另外,更普遍地说,是否有一种技术可以在AbstractButtons中实现这一点?


我以为你的问题是关于按钮复数的。在UI中让一些按钮使用空格键而另外一些不使用并不是一个很好的设计。所以你为什么想要逐个更改按钮呢? - camickr
4个回答

3
你可以通过执行以下操作来禁用它:
jbutton.getInputMap().put(KeyStroke.getKeyStroke("SPACE"), "none");

这似乎也适用于其他的AbstractButton,例如JRadioButton
正如@camickr下面指出的那样,您可以通过以下方式一次性解决所有JButton的问题:
InputMap im = (InputMap)UIManager.get("Button.focusInputMap");
im.put(KeyStroke.getKeyStroke("pressed SPACE"), "none");
im.put(KeyStroke.getKeyStroke("released SPACE"), "none");

3

aioobe提供的链接展示了如何为单个按钮执行此操作。如果您想为所有JButton执行此操作,则可以执行以下操作:

InputMap im = (InputMap)UIManager.get("Button.focusInputMap");
im.put(KeyStroke.getKeyStroke("pressed SPACE"), "none");
im.put(KeyStroke.getKeyStroke("released SPACE"), "none");

如果您想对复选框和单选按钮执行此操作,则需要为每个不同的输入映射重复上述步骤。
您可能想阅读Enter Key and Button。它实际上与您想要的相反,因为它解释了如何在使用Enter键时调用按钮。但它可能有助于解释为什么这个解决方案是相反的。

0

在键盘按键抬起时按下空格键可能会激活最后聚焦的元素。若要取消元素的聚焦,请尝试以下操作:

${element}.blur()

0

使用:

button.setFocusable(false)

这样,按钮只能通过鼠标点击而不能使用空格键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接