【问题标题】:Java - How to apply a keyboard shortcut of 3 keys for a JButton?Java - 如何为 JButton 应用 3 个键的键盘快捷键?
【发布时间】:2014-08-04 13:48:51
【问题描述】:

目前我正在使用“Ctrl + Space”快捷方式在我的 Java 代码中触发 JButton 事件,如下所示:

this.getRootPane().registerKeyboardAction( addStudentButtonActionListener, KeyStroke.getKeyStroke( KeyEvent.VK_SPACE, KeyEvent.CTRL_MASK ), JComponent.WHEN_IN_FOCUSED_WINDOW );

但我想为此事件分配“Shift + Ctrl + Space”的快捷方式。我该怎么做?

【问题讨论】:

  • KeyEvent.CTRL_MASK | KeyEvent.SHIFT_MASK

标签: java swing keyboard-shortcuts shortcut


【解决方案1】:

可以使用KeyStroke的String格式

KeyStroke.getKeyStroke("shift ctrl pressed SPACE")

例子

import java.awt.event.*;
import javax.swing.*;

public class TestShiftCtrlSpace {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            public void run() {
                JFrame frame = new JFrame();
                JPanel panel = (JPanel)frame.getContentPane();
                InputMap im = panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
                im.put(KeyStroke.getKeyStroke("shift ctrl pressed SPACE"), "scs");
                panel.getActionMap().put("scs", new AbstractAction(){
                    public void actionPerformed(ActionEvent e) {
                        System.out.println("Shift + Ctrl + Space");
                    }
                });
                frame.setSize(300, 300);
                frame.setLocationByPlatform(true);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

【讨论】:

    【解决方案2】:

    然后使用以下按键:

    KeyStroke.getKeyStroke(KeyEvent.VK_SPACE,
        KeyEvent.SHIFT_MASK | KeyEvent.CTRL_MASK)
    

    【讨论】:

    • 我在另一个地方读过这个解决方案,但它不起作用! ...当我按下 3 个键盘按钮时,没有任何反应! ...当我尝试 KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, KeyEvent.SHIFT_MASK ) 时,按 Shift+Space 什么也没做。我认为 SHIFT_MASK 出于某种原因无法正常工作。
    • 也许 SHIFT+Space 和 SHIFT+CTRL+Space 保留在您的操作系统或 Swing 中。尝试使用其他键,例如 SHIFT+CTRL+E。
    • 其实它工作正常。这是聚焦行为的问题。我站在错误的地方,所以快捷方式无法工作。当我解决焦点问题时,它工作得很好。非常感谢icza。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    相关资源
    最近更新 更多