【问题标题】:Java/Swing - Creating HotkeysJava/Swing - 创建热键
【发布时间】:2026-01-24 14:25:01
【问题描述】:

我有一个带有多个组件的 JFrame,我无法调用 JFrame 中的 keyPressed 事件,因为该框架从未聚焦,并且该事件仅在聚焦时才有效。我应该如何制作一个类似的事件,但只有在窗口被聚焦时才起作用,而不仅仅是单个组件?

【问题讨论】:

  • @AndrewThompson 这是答案,但它只是一个链接的答案,所以:( - 但是,这可能是一个很好的密切理由,因为没有其他东西可以回答这个问题跨度>
  • 我投票结束这个问题作为题外话,因为这个问题最好通过阅读How to Use Key Bindings 教程来回答

标签: java swing components


【解决方案1】:

最简单的方法是在 JFrame 中放置一个 JPanel,然后使用该 JPanel 而不是 JFrame 执行所有操作。

【讨论】:

    【解决方案2】:

    我在这个网站上找到了一个非常容易完成的线程,不需要键绑定或任何东西。这一切都是dispatchKeyEvent的一个被覆盖的方法;我不知道这是否是最好的方法,但它对我有用

    这是该主题的链接 How can I listen for key presses (within Java Swing) across all components?

    KeyboardFocusManager.getCurrentKeyboardFocusManager()
        .addKeyEventDispatcher(new KeyEventDispatcher() {
            @Override
            public boolean dispatchKeyEvent(KeyEvent e) {
                System.out.println("Got key event!");
                return false;
            }
        });
    

    【讨论】: