【问题标题】:How to customize keybinding when application is not in focus当应用程序不在焦点时如何自定义键绑定
【发布时间】:2012-02-18 19:01:49
【问题描述】:

我的目标是自定义 PrintScreen 键`绑定。

但是,我需要让我的应用程序失焦才能正常工作。 我正在使用 inputmap 和 actionmap 来执行此操作。我使用的参数是Component.WHEN_IN_FOCUSED_WINDOW。下面给出的是我的代码,但它不起作用。

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    jButton1.getInputMap().put(KeyStroke
        .getKeyStroke(KeyEvent.VK_PRINTSCREEN,2),"ps");
    jButton1.getActionMap().put("ps",new AbstractAction() {
        public void actionPerformed (ActionEvent e){
            //int i;
            i++;
            System.out.println(i);
        }
     });
}

如果不是键绑定,那么当应用程序不在焦点时如何自定义击键响应?

【问题讨论】:

  • 键绑定仅在您的应用程序具有焦点时起作用。
  • 真的不明白为什么,简单不可能,应用程序的窗口必须在每个Native OS的屏幕上都有一个焦点,也许你有两个或多个JFrames / JDialog,我认为你已经更新了你的有关...的更多详细信息的问题
  • 如果没有键绑定,那么当应用程序不在焦点时如何自定义击键响应?
  • 不可能(没有本机代码) - 应用程序没有从操作系统获得任何击键

标签: java swing action awt key-bindings


【解决方案1】:

最高级别InputMapComponent.WHEN_IN_FOCUSED_WINDOW,正如它所说,当Component 位于焦点窗口中时,它可以工作。如果您的窗口没有聚焦,您将不会收到任何输入事件。

此外,在您的示例中,您没有将参数传递给 getInputMap,因此您获得的是默认参数 (Component.WHEN_FOCUSED)。

【讨论】:

    【解决方案2】:

    您也许可以利用setDefaultButton,默认情况下绑定了 Enter 键。几个完整的例子显示here;另见How to Use Key Bindings。例如,

    JButton send = new JButton("Send");
    …
    f.getRootPane().setDefaultButton(send);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      相关资源
      最近更新 更多