0

我已经将 ENTER 键添加到默认的 FocusTraversalKeys 中......

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();
    }
}  

同样的方法适用于我的文本区域但代码不执行 CLICK 而是将焦点放在下一个组件上,该组件也是一个按钮。

请提出一些可以帮助我达到所需结果的建议。在所用表格的图像下方找到。

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

4

2 回答 2

1

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

查看Enter Key and Button以获得一些解决方案,一种使用键绑定,另一种使用不同的方法。

于 2013-06-23T22:43:29.233 回答
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);
}  

谢谢你们每一个人的帮助!

于 2013-06-24T15:06:18.023 回答