【问题标题】:Capture ENTER KeyEvent and Do a Click instead捕获 ENTER KeyEvent 并改为单击
【发布时间】:2013-06-20 09:09:21
【问题描述】:

我已将 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

【问题讨论】:

  • 您可以将按钮的焦点转移键设置为默认(即TAB),这意味着ENTER键将默认执行...
  • @MadProgrammer 这就是我已经做过的,设置该框架中所有内容的焦点遍历键以包括 ENTER 键。我想在按钮上做“空格键”效果,而不是将焦点转移到下一个组件。
  • 您也可以为单个组件设置焦点转移键。查看answer by kleo了解更多详情

标签: java awt capture keylistener keyevent


【解决方案1】:

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

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

【讨论】:

  • 尝试在您提供的链接中使用 DefaultButtonListener 类,但没有帮助。
【解决方案2】:

在按钮获得焦点时从我定义的 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);
}  

感谢大家的帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多