【问题标题】:Double Tap Key Bindings Java双击键绑定 Java
【发布时间】:2012-09-06 04:46:13
【问题描述】:
public void fullscreenKey(final JFrame frame)
{
    k = KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0);
    getInputMap(WHEN_IN_FOCUSED_WINDOW).put(k, k.toString());
    getActionMap().put(k.toString(), new AbstractAction()
    {
        public void actionPerformed(ActionEvent e)
        {
            fullscreen(!f1, frame);
            f1 = !f1;
        }
    });  
}

每当我将此方法调用到其他类中时,什么都不会发生。由于 getInputMap 和 getActionMap,我无法将此方法设为静态。我用 Main main = new Main(); main.fullscreenKey(frame);此方法在 Main 构造函数中调用。如何在其他类中调用此方法并使其工作?

【问题讨论】:

  • 把getInputMap 和getActionMap 也设为静态?
  • @JeffLaJoie getInputMapgetActionMapJComponent 的方法,它们构成了 Swing key bindings API 的一部分,他不能将它们设为静态

标签: java swing jframe fullscreen key-bindings


【解决方案1】:

不确定这是不是你想要的

public void fullscreenKey(JComponent comp, final JFrame frame)
{
    k = KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0);
    comp.getInputMap(WHEN_IN_FOCUSED_WINDOW).put(k, k.toString());
    comp.getActionMap().put(k.toString(), new AbstractAction()
    {
        public void actionPerformed(ActionEvent e)
        {
            fullscreen(!f1, frame);
            f1 = !f1;
        }
    });  
}

如果您正在寻找“全局”键处理程序(即您想在应用程序中随时处理击键),您可以查看Toolkit.addAWTEventListener,这是非常低的级别,因此可能需要不费吹灰之力就能正常工作。

你也可以看看KeyboardFocusManager (Java Global JFrame KeyListener)

【讨论】:

  • 谢谢!这很完美。我不能用这个。在静态方法中,但将其作为 arg 是我从未想过的。至于链接,我会调查的。我认为共享方法会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
  • 2011-09-13
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
相关资源
最近更新 更多