Java按下回车键时将焦点设置在JButton上

10

我应该如何做才能使在JTextField中按下回车键时激活特定的JButton?我的意思是类似于网页表单,在其中可以按Enter键来激活表单中的按钮。

4个回答

13

你应该为 JButton 使用一个 Action

Action sendAction = new AbstractAction("Send") {
    public void actionPerformed(ActionEvent e) {
         // do something
    }
};

JButton  button = new JButton(sendAction);

如果你想让同一个操作在菜单中和 JTextField 上都可用,那么你可以给它们设置相同的操作:

JTextField textField = new JTextField();
textField.setAction(sendAction);

5
+1,酷!我甚至不知道setAction()方法。我一直使用addActionListener。不管怎样,这是更好的解决方案。 - camickr

7

类似这样的代码应该可以正常工作:

textField.addActionListener(new ActionListener()
{
    @Override
    public void actionPerformed(ActionEvent e)
    {
        button.requestFocusInWindow();
    }
});

我刚试了一下,它确实将焦点放在按钮上,但并没有激活它。 - LOD121
不会的,requestFocusInWindow() 方法就是按字面意思执行。如果要模拟点击,doClick() 方法是你需要的。 - Michael Berry
2
@LOD121,这不是正确的解决方案。 - camickr

5
您可以通过将 default 行为添加到按钮来实现此目的,如下所示。
cmdLogin.setDefaultCapable(true); // by default, this is true
this.getRootPane().setDefaultButton(cmdLogin); // here `this` is your parent container

1
+1,但要注意:只有在textField没有附加操作的情况下才有效。 - kleopatra
是的,那是真的。但在这种情况下,这应该可以工作,我希望作者的目的是获得“默认”行为。 - sunil

3
我会做以下类似的事情:
```html

我会这样做:

```
textField.addKeyListener(
  new KeyAdapter() {
     public void keyPressed(KeyEvent e) {
       if (e.getKeyCode() == KeyEvent.VK_ENTER) {
          button.doClick();
       }
     }
  });
}

1
@LOD121,是的,它可以工作,但这不是文本字段设计的使用方式。 - camickr
我必须承认,我也不知道setAction()方法!我们每天都在学习新东西,是吧? - Michael Berry
-1 for keyListener - 即使不了解Action API,也应该使用keyBinding;-) - kleopatra

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