Java 捕获并输入KeyEvent,然后单击

Java 捕获并输入KeyEvent,然后单击,java,awt,capture,keylistener,keyevent,Java,Awt,Capture,Keylistener,Keyevent,我已经在默认的FocusTraversalKeys中添加了ENTER键 private void focus() { Set forwardKeys = getFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS); Set newForwardKeys = new java.util.HashSet(forwardKeys); newForwardKeys.add(KeyStroke.getKeyS

我已经在默认的FocusTraversalKeys中添加了ENTER键

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);
}
我有一个产品信息表单,我正在使用焦点查看该表单,但是当涉及到保存按钮时,我希望单击按钮,而不是将焦点转到下一个组件

我已经添加了一个按键按下和按键释放监听按钮,然后尝试了这个

private void saveButtonKeyPressed(java.awt.event.KeyEvent evt) {                                      
    if (evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER) {
        evt.consume();
        saveButton.doClick();
    }
}  
同样的方法也适用于我的文本区域,但是代码没有点击,而是将焦点放在下一个组件上,这也是一个按钮

请提出一些能帮助我达到要求结果的建议。请在下面找到所用表单的图像


不要使用键盘侦听器。Swing的设计目的是配合使用


查看一些解决方案,一个使用键绑定,另一个使用不同的方法。

在按钮获得焦点时从我定义的集合中删除了ENTER键,因此它现在可以与KeyReleased方法一起工作

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

谢谢大家的帮助

您可以将按钮的焦点转移键设置为默认值(即
TAB
),这意味着
ENTER
键将作为默认值执行…@MadProgrammer这是我已经做过的,请将该帧中所有内容的焦点遍历键设置为包括ENTER键。我想在按钮上做“空格键”效果,而不是将焦点转移到下一个组件。你也可以为单个组件设置焦点转移键。在您提供的链接中使用DefaultButtonListener类查看更多详细信息,但没有帮助。