2015-12-25 2 views
2

Я пытаюсь сделать программу горячих клавиш, которая работает в фоновом режиме, и я не могу понять, как заставить ее проверять, когда нажата определенная клавиша (в этом случае минус-ключ). Мне нужна программа, чтобы ждать нажатия клавиши, а затем программа проверяет, является ли этот ключ минус-ключом.В java Как проверить, нажимает ли пользователь определенный ключ?

Пример моей программы, которая теперь находится в псевдокоде, находится где-то вдоль этих строк.

while(true) 
    { 
     int pressedKey = userInputedKey; 
     if(pressedKey == KeyEvent.VK_MINUS) 
     { 
      //action to be executed 
     } 
    } 

Я нашел много предложений по другим потокам использовать KeyListener, но я не мог использовать его должным образом, так что если ваш ответ является использование KeyListener, пожалуйста, объясните, как использовать его тщательно (чтобы быть точным, я дон Не понимаю, как при создании экземпляра KeyEvent у него уже есть вход любого ключа, который был нажат в качестве ключевого кода в этом KeyEvent, поэтому, если я использую его в вызове KeyListener, я не получу правильные результаты). Конечно, я мало знаю о KeyEvent или KeyListener, поэтому, возможно, я не пытался правильно решить проблему с помощью KeyListener.

+0

Пожалуйста, обратитесь на [Как проверить, нажал ли пользователь клавишу?] (http://stackoverflow.com/questions/18037576/how-do-i-check-if-the-user-is-pressing-a-key) Или [Как определить, был ли нажат ключ в Java?] (Http://stackoverflow.com/questions/23841127/how-to-detect-if-a-key-was-pressed-in-java) –

+0

Как проверить, нажат ли пользователь ключ? это тот поток, который я использовал для решения моих проблем, хотя главный ответ не решил его проблему (как показывают комментарии человека, который задал вопрос). – loserlobster

+0

Что-то должно перехватить ключевое событие, и оно должно иметь фокус, поэтому оно не может работать в фоновом режиме. Представьте, что у вас открыто 5 программ, и вы фокусируетесь на одном. Вы не можете иметь все 5 событий перехвата, только один в фокусе. – user1803551

ответ

1

Вы можете использовать KeyEvent, чтобы получить код ключа, а затем проверить его.

Например:

someCompunent.addKeyListener(new KeyAdapter() { 
    public void keyPressed(KeyEvent e) { 
     if(e.getKeyCode() == KeyEvent.VK_MINUS) { 
      // do the stuff 
     } 
    } 
}); 
+0

С моей программой, разработанной на данный момент, у меня нет компонента addKeyListener(). Программа, показанная на рисунке, представляет собой практически весь код, который у меня есть для этого в настоящее время. Какой компонент я должен использовать, или я должен использовать его вообще? – loserlobster

+0

Является ли это JFrame? –

+0

Нет. Я пытаюсь запустить его как фоновый процесс, чтобы он работал на всех программах. – loserlobster

1

Если вы хотите использовать глобальные горячие клавиши, когда программа поймать нажатие клавиши событие в любом приложении - попробуйте использовать JKeyMaster library (поддерживает глобальные hotkweys в Windows, Linux и MAC OS)

Смежные вопросы