java中的自定义键盘快捷键

java中的自定义键盘快捷键,java,swing,keyboard-shortcuts,key-bindings,acceleratorkey,Java,Swing,Keyboard Shortcuts,Key Bindings,Acceleratorkey,我正在开发一个JavaSwing应用程序。我想添加一个键盘快捷键,比如CTRL+H。这应该执行与单击jButton1时执行的相同操作 即使jButton1没有焦点,该快捷方式的行为也应该相同 我尝试使用KeyEventDispatcher,但它似乎对我不起作用。还有别的办法吗 我想你的问题的答案可以在这里找到你应该使用类和类进行研究。来自Oracle(稍作修改,但仍以其为例): 如果您希望在组件没有焦点的情况下触发事件,也可以使用它们: 使用getMenuShortcutKeyMask()返回

我正在开发一个JavaSwing应用程序。我想添加一个键盘快捷键,比如CTRL+H。这应该执行与单击jButton1时执行的相同操作

即使jButton1没有焦点,该快捷方式的行为也应该相同


我尝试使用KeyEventDispatcher,但它似乎对我不起作用。还有别的办法吗

我想你的问题的答案可以在这里找到

你应该使用类和类进行研究。来自Oracle(稍作修改,但仍以其为例):

如果您希望在组件没有焦点的情况下触发事件,也可以使用它们:


使用
getMenuShortcutKeyMask()
返回的
MASK
来获得更好的跨平台用户体验,而不是显式地将控制键用作修饰符
ImageApp
是一个。

好的-首先,我不认为有办法在JavaSwing中设置应用程序范围内的快捷方式(请参阅此)。但对于一个组件来说,这是可能的

您必须为
击键
使用创建
操作
。但是对于Windows,我发现这个库非常有用


动态生成Swing组件?我们可以向组件添加快捷方式,但不能在应用程序范围内添加快捷方式-
component.getInputMap().put(aKeyStroke,aCommand)
// CTRL + H
KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_H, Event.CTRL_MASK);
// bind the keystroke to an object
inputMap.put(key, DefaultEditorKit.backwardAction);
    {
        KeyStroke cancelKeyStroke = KeyStroke
                .getKeyStroke((char) KeyEvent.VK_ESCAPE);
        Keymap map = JTextComponent.getKeymap(JTextComponent.DEFAULT_KEYMAP);
        map.addActionForKeyStroke(cancelKeyStroke, cancelKeyAction);
    }
    private static Action cancelKeyAction = new AbstractAction() {
        public void actionPerformed(ActionEvent ae) {
            Component comp = (Component) ae.getSource();
            Window window = SwingUtilities.windowForComponent(comp);
            if (window instanceof Dialog) {
                window.dispose();
            } else if (comp instanceof JTextComponent
                    && !(comp instanceof JFormattedTextField)) {
                JTextComponent tc = (JTextComponent) comp;
                int end = tc.getSelectionEnd();
                if (tc.getSelectionStart() != end) {
                    tc.setCaretPosition(end);
                }
            }
        }
    };