【问题标题】:Different ways of catching pressed keys捕捉按键的不同方法
【发布时间】:2015-03-31 00:49:35
【问题描述】:

假设我有一个没有聚焦的窗口。 有没有其他方法可以捕获使用KeyListener 的按键。

import javax.swing.JFrame;

public class Main {

    public static void main(String[] args) {
        Window w = new Window();
    }    
}

class Window extends JFrame {
    private static final long serialVersionUID = -6791503228233798055L;
    public JFrame fr;

    Window() {
        fr = new JFrame();
        fr.setVisible(true);
        fr.setSize(500, 500);
        fr.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

如何在没有焦点窗口和 KeyListener 的情况下捕获键?

【问题讨论】:

  • Key Bindings 可能是您正在寻找的。尽管这确实需要某种焦点,但您可以要求任何元素的焦点为WHEN_IN_FOCUS_WINDOW,而不是要求该特定组件具有焦点。 如果您想在没有任何 GUI 元素处于焦点或完全没有 GUI 的情况下捕捉关键事件,您需要使用 native listener
  • 谢谢@VinceEmigh,但我宁愿使用C++。
  • 本地侦听器在后台使用 C++(或平台本地的另一种语言,例如 C 或汇编)。它使用称为 Java 本地接口 (JNI) 的东西访问本地详细信息。您可以通过使用 JNI 编写自己的实现来达到同样的目的,但是为什么要浪费时间重新发明轮子呢?

标签: java keyboard listener


【解决方案1】:

KeyListener 只是一个接口——它不做任何事情。

你需要有人告诉你事件发生了。通常,您将自己作为想了解事件的人传递给某个窗口或窗格。 JVM 不允许以这种方式注册到操作系统本身。您可能需要外部库来执行此操作。

Here你的话题很相似。

【讨论】:

  • 有大量的本地监听器可以让这种事情变得非常容易。这个问题也是在询问捕捉关键事件的不同方法,而不是“我们如何在没有窗口的情况下捕捉关键事件以及为什么我们不能”
  • 根据您使用外部库的建议进行了更新。
猜你喜欢
  • 2012-09-21
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
相关资源
最近更新 更多