如何使KeyListener在没有焦点的情况下工作? [重复]

问题描述 投票:-2回答:2

我制作的应用程序即使窗口没有焦点,也应该能够使用KeyListener进行键盘输入。我不知道如何使KeyListeners在不关注窗口的情况下工作,有人可以帮我吗?

java swing keylistener
2个回答
0
投票

您可以使用JNativeHook:https://github.com/kwhat/jnativehook

示例:

import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
import org.jnativehook.keyboard.NativeKeyEvent;
import org.jnativehook.keyboard.NativeKeyListener;

public class GlobalKeyListenerExample implements NativeKeyListener {
    public void nativeKeyPressed(NativeKeyEvent e) {
        System.out.println("Key Pressed: " + NativeKeyEvent.getKeyText(e.getKeyCode()));

        if (e.getKeyCode() == NativeKeyEvent.VK_ESCAPE) {
            GlobalScreen.unregisterNativeHook();
        }
    }

    public void nativeKeyReleased(NativeKeyEvent e) {
        System.out.println("Key Released: " + NativeKeyEvent.getKeyText(e.getKeyCode()));
    }

    public void nativeKeyTyped(NativeKeyEvent e) {
        System.out.println("Key Typed: " + e.getKeyText(e.getKeyCode()));
    }

    public static void main(String[] args) {
        try {
            GlobalScreen.registerNativeHook();
        }
        catch (NativeHookException ex) {
            System.err.println("There was a problem registering the native hook.");
            System.err.println(ex.getMessage());

            System.exit(1);
        }

        GlobalScreen.addNativeKeyListener(new GlobalKeyListenerExample());
    }
}

0
投票

当窗口未聚焦时,没有Java级别的方法可以处理事件。您需要使用OS函数和Java API(JNI)编写本机库。但是,如果它足以处理焦点窗口中的事件,则可以在框架的内容窗格上使用JComponent.registerKeyboardAction。

© www.soinside.com 2019 - 2024. All rights reserved.