设置键绑定以执行与操作侦听器中相同的操作



我有一个附加到ActionListener的JButton,但是我还想为该按钮添加一个快捷键,以便更加用户友好。例如,用户可以单击按钮,程序执行某个函数f,或者用户也可以按键盘上的"Enter"键来执行相同的函数f。

private JButton button;
public static void main(String[] args){
    Action buttonListener = new AbstractAction() {
         public void actionPerformed(ActionEvent e) {
                //Perform function f    
         }
    };
button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ENTER"),
                        "test");
button.getActionMap().put("test",
                         buttonListener);
button.addActionListener(new OtherListener());
}
private class OtherListener implements ActionListener{
    public void actionPerformed(ActionEvent e){
        //Perform function f
    }
}

似乎有点乏味必须添加一个动作和一个ActionListener来做同样的事情。也许我没有看到它,但是有没有一种方法可以减少代码,这样我就可以消除Action,只使用actionListener?我正在考虑切换getActionMap().put()方法中的buttonListener参数,但该方法只接受Action类型。

Action扩展了ActionListener,因此您应该能够定义单个Action并在需要ActionListener的地方使用它。

public static void main(String[] args){
    Action buttonListener = new Action() {
         public void actionPerformed(ActionEvent e) {
                //Perform function f    
         }
    };
    button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW)
        .put(KeyStroke.getKeyStroke("ENTER"), "test");
    button.getActionMap().put("test", buttonListener);
    button.addActionListener(buttonListener);
}

JRootPane有一个方法setDefaultButton(...),它将做你想做的。您需要从顶层容器中获取根窗格,然后您可以调用该方法,并将引用传递给JButton,当在GUI上按下enter键时,它将执行其操作。当你认为"enter"是一个特殊的键时,这是有道理的,它的行为应该是GUI的责任,而不是单个按钮。

相关内容

  • 没有找到相关文章

最新更新