如何在java中定义应用程序的快捷键

时间:2016-04-19 08:26:26

标签: java swing keyboard-shortcuts

我用Java创建了一个应用程序,现在我想为所有swing组件添加键盘快捷键。

实现这一目标的最佳方法是什么?是否有任何API可供使用?

1 个答案:

答案 0 :(得分:1)

您需要使用组件的InputMapActionMap。有关教程,check here

输入地图(来自Javadoc):

  

InputMap提供输入事件(目前仅使用KeyStrokes)和Object之间的绑定。

动作地图(来自Javadoc):

  

ActionMap提供从对象(称为键或操作名称)到操作的映射。

所以基本上你需要将一个输入事件绑定到一个键,然后将一个键映射到一个Action上,一个Action就是"执行"你真正想要执行的是什么。

这是一个按 alt + shift + X 时生成按钮的小程序。

public class KeyBindingExample {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                KeyBindingExample.start();
            }
        });
    }

    private static void start() {
        final JFrame frame = new JFrame("Action binding example");
        final JPanel content = new JPanel();

        Action myAction = new AbstractAction() {

            @Override
            public void actionPerformed(ActionEvent e) {
                JButton button = new JButton ("Hello world!");
                content.add(button);
                frame.pack();
            }
        };

        content.getInputMap().put(KeyStroke.getKeyStroke("alt shift X"), "MyActionDefinition");
        content.getActionMap().put("MyActionDefinition", myAction);

        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setContentPane(content);
        frame.pack();
        frame.setVisible(true);
    }
}