捕获输入KeyEvent并执行单击

时间:2013-06-23 21:49:32

标签: java awt capture keylistener keyevent

我已将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);
}

我有一个产品信息表单,我正在使用焦点,但是当涉及到保存按钮时,我想点击按钮而不是焦点转到下一个组件。< / p>

我在按钮上添加了一个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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

当按钮获得焦点时,从我定义的SET中删除了ENTER键,因此它现在可以与KeyReleased Method一起使用。

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

谢谢大家的帮助!