【问题标题】:Java Swing KeyStrokes: how to make CTRL-modifier workJava Swing KeyStrokes:如何使 CTRL 修饰符起作用
【发布时间】:2010-03-10 18:46:39
【问题描述】:

在下面的程序中,为什么在点击 CTRL+aa 键会打印 "hello, world" /kbd> 没有?

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

public class KeyStrokeTest {
    public static void main(String[] args) {
        JPanel panel = new JPanel();

        /* add a new action named "foo" to the panel's action map */
        panel.getActionMap().put("foo", new AbstractAction() {
                public void actionPerformed(ActionEvent e) {
                    System.out.println("hello, world");
                }
            });

        /* connect two keystrokes with the newly created "foo" action:
           - a
           - CTRL-a
        */
        InputMap inputMap = panel.getInputMap();
        inputMap.put(KeyStroke.getKeyStroke(Character.valueOf('a'), 0), "foo");
        inputMap.put(KeyStroke.getKeyStroke(Character.valueOf('a'), InputEvent.CTRL_DOWN_MASK), "foo");

        /* display the panel in a frame */
        JFrame frame = new JFrame();
        frame.getContentPane().add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400, 400);
        frame.setVisible(true);
    }
}

我该如何解决 CTRL+a 也能正常工作?

【问题讨论】:

    标签: java swing action keystroke


    【解决方案1】:

    我觉得它更容易使用:

    KeyStroke a = KeyStroke.getKeyStroke("A");
    KeyStroke controlA = KeyStroke.getKeyStroke("control A");
    

    或:

    KeyStroke controlA = KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK);
    

    【讨论】:

      【解决方案2】:

      老兄,用这个

      inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK), "foo");
      

      【讨论】:

      • 有趣的是,我在发帖之前提出了我的建议,另外我还为您提供了其他替代方案,您可以在不同情况下使用它们。我想我下次不会再麻烦了。
      • @Thomas:我不知道我是否正确,但您的代码可能无法正常工作的原因是,在第一种情况下,您指的是一个简单的字符“a”。在第二种情况下,您指的是一个组合键,它是一个 ASCII 和一个扫描值(Ctrl 键)。我觉得它应该与事件正确关联。
      • @camickr - 对不起,这是一个诚实的错误。
      【解决方案3】:

      是的,上面的代码可以工作。

      大图 - Ctrl+a 和 a 被读取为与 a 和 b 相同的不同击键会有所不同。

      【讨论】:

      • OP 知道“Ctrl-A”和“A”是不同的按键。
      猜你喜欢
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 2020-11-06
      • 1970-01-01
      • 2012-06-28
      相关资源
      最近更新 更多