Определить, нажата ли какая-либо кнопка мыши, и если да, то какая?

По сути, я хочу узнать, нажата ли какая-либо кнопка мыши, и если да, то какая. Проблема в том, что я не использую (постоянно сфокусированную) среду пользовательского интерфейса. Он предназначен для работы в фоновом режиме, пока ОС сосредоточена на другом окне. У меня просто настроен графический интерфейс Swing для удобного управления.

Как я мог это сделать?

(Кстати, я пытаюсь запросить его внутри цикла, поэтому настройка прослушивателя событий будет неэффективной.)

Я хотел объяснить, что я пытаюсь определить, нажата ли кнопка мыши и какая из них нажата. починил это

Orbyfied 17.12.2020 19:21

исправлено, извините, английский не мой родной язык

Orbyfied 17.12.2020 19:22

Он предназначен для работы в фоновом режиме, пока ОС сосредоточена на другом окне. - Качели так не работают. Swing может обрабатывать события только тогда, когда событие генерируется в сфокусированном окне Swing. Если вы хотите прослушивать события ОС, вам нужно использовать JNI или JNA (я не знаю разницы).

camickr 17.12.2020 20:01

я знаю, я думаю, что я также заявил, что в вопросе. Swing ui не предназначен для обработки запросов или событий.

Orbyfied 17.12.2020 20:38

Java не является предпочтительным языком при попытке отслеживать события ОС. Java должен быть независимым от ОС.

Gilbert Le Blanc 18.12.2020 13:43
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
201
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как упоминалось другими, вам нужно будет использовать JNA, чтобы подключиться к собственным API операционной системы. К счастью для вас, есть отличная библиотека, которая делает именно это jnativehook.

Вот некоторый демонстрационный код, который создает Global Mouse Listener:

import GlobalScreen;
import NativeHookException;
import NativeMouseEvent;
import NativeMouseInputListener;

public class GlobalMouseListenerExample implements NativeMouseInputListener {
    public void nativeMouseClicked(NativeMouseEvent e) {
        System.out.println("Mouse Clicked: " + e.getClickCount());
    }

    public void nativeMousePressed(NativeMouseEvent e) {
        System.out.println("Mouse Pressed: " + e.getButton());
    }

    public void nativeMouseReleased(NativeMouseEvent e) {
        System.out.println("Mouse Released: " + e.getButton());
    }

    public void nativeMouseMoved(NativeMouseEvent e) {
        System.out.println("Mouse Moved: " + e.getX() + ", " + e.getY());
    }

    public void nativeMouseDragged(NativeMouseEvent e) {
        System.out.println("Mouse Dragged: " + e.getX() + ", " + e.getY());
    }

    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);
        }

        // Construct the example object.
        GlobalMouseListenerExample example = new GlobalMouseListenerExample();

        // Add the appropriate listeners.
        GlobalScreen.addNativeMouseListener(example);
        GlobalScreen.addNativeMouseMotionListener(example);
    }
}

Также не забывайте читать о безопасности потоков, когда Работаете со Swing с использованием упомянутой библиотеки.

Другие вопросы по теме