【问题标题】:Swing : detecting onKeyPressedSwing : 检测 onKeyPressed
【发布时间】:2011-10-29 08:20:48
【问题描述】:

我正在尝试做一件非常简单的事情:当用户按下键盘的某个键时触发一个动作

我想映射的键是:

  • 键+
  • 键-
  • 键删除
  • ctrl+c
  • ctrl+v

    公共类 keytestmain 扩展 Applet{

    //Called when this applet is loaded into the browser.
    public void init() {
        //Execute a job on the event-dispatching thread; creating this applet's GUI.
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    JLabel lbl = new JLabel("Hello World");
                    add(lbl);
                    JPanel p = new JPanel();
                    p.setBackground(Color.green);
                    p.setMinimumSize(new Dimension(100,100));
                    p.setPreferredSize(new Dimension(100,100));
                    p.setMaximumSize(new Dimension(100,100));
                    InputMap inputMap = new InputMap();
    
                    // Add a KeyStroke
                    inputMap.put(KeyStroke.getKeyStroke("SPACE"), "actionName");
    
                    inputMap.setParent(p.getInputMap(JComponent.WHEN_FOCUSED));
                    p.setInputMap(JComponent.WHEN_FOCUSED, inputMap);
                    add(p);
                }
            });
        } catch (Exception e) {
            System.err.println("createGUI didn't complete successfully");
        }
    
    }
    

    }

但没有任何效果

有什么想法吗?

【问题讨论】:

  • this 在您的示例中代表什么?
  • 它的 Jpanel,我有一个抽象类,我的所有视图都从该类继承,我希望能够在基类中创建我的键侦听器并覆盖我想要的键的回调
  • 再一次,您没有发布 SSCCE,您希望我们猜到您在做什么!!!我知道出了什么问题,但我需要一个 SSCCE 来确认它。
  • 在那里我放了我正在尝试做的最低版本,但它不起作用

标签: java swing keylistener


【解决方案1】:

我会使用Key Bindings,而不是 KeyListeners。这更可靠,因为它没有很多焦点问题。此外,KeyListeners 是一个相对较旧的 AWT 解决方案,因此根据您的 JDE,该命令可能已被弃用。

【讨论】:

  • 我也已经厌倦了(对不起,我忘了发布它)并且它根本没有产生任何结果......也许我的小程序代码有问题......
  • @Jason Rogers 如果你使用KeyListener,我会按照char inputKey = e.getKeyText(e.getKeyCode()); 的方式来告诉你按下了哪个键。
  • 请不要猜谜游戏:keyListeners 周围没有任何弃用的东西 ;-) 甚至 registerKeyboardAction 也不是(虽然应该,但不知道他们为什么没有) - 它只是在文本上标记为“过时的”
  • @Jason - 是的,是的,是的,很可能你没有显示的代码有问题;-) 我的猜测是焦点(ui 属性):再次阅读那篇文章并集中注意力(人类)在不同类型的 InputMap 上 ..
  • @keopatra,很容易猜到,但 Jason 已被多次(在此问题和其他问题中)要求发布 SSCCE,因此我们不必浪费时间猜测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多