在java swing中输入JButton的关键焦点?

时间:2010-09-03 09:19:59

标签: java swing key

如何在java swing中为JButton设置Enter键焦点?

我这样做了

btn_Login.registerKeyboardAction(new ActionListener() {

    public void actionPerformed(ActionEvent e) {
       System.out.println("enter key pressed");

    }
}, KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0,false), txt_Username.WHEN_FOCUSED);

但没有工作

2 个答案:

答案 0 :(得分:6)

如果您只是按某个窗口上的Enter键,我假设您想要“按下”特定按钮。

为此,您必须在当前JFrame的RootPane上设置defaultButton。

以下是一个例子:

 JButton btn = new JButton();
 JFrame frame = new JFrame();

 frame.getContentPane().add(btn);
 frame.getRootPane().setDefaultButton(btn);

这应该会给你预期的结果。

答案 1 :(得分:3)

感谢大家!以下是我发现的一些注意事项,用于解决Nimbus Look的输入问题并且摔倒。

  1. 回车键适用于Linux,但不适用于Windows(Nimbus)。
  2. 对于Windows,按钮的实际“doClick”是用空格完成的(Key Char 32)。
  3. 可以设置“enter”进行点击,但必须在设置Nimbus外观之后完成。
  4. 以下是我的应用程序中使用的代码。

        UIManager.setLookAndFeel(new NimbusLookAndFeel());
        //- hack pour que les bouttons qui ont le focus fassent un doClick
        //- lorsque "enter" est taper.  Auparavant, c'etait l'espace qui 
        //- activait le doClick.
        InputMap im = (InputMap)UIManager.get("Button.focusInputMap");
        im.put( KeyStroke.getKeyStroke( "ENTER" ), "pressed" );
        im.put( KeyStroke.getKeyStroke( "released ENTER" ), "released" );
    
  5. (对不起我的法语评论!)。