2016-10-31 5 views
0

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

Вот мой код:

AutoClickerMain Класс

package com.autoclicker; 

import java.awt.*; 
import java.awt.event.*; 

import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.SwingConstants; 

public class AutoClickerMain { 
    public static boolean generate = true; 
    public AutoClickerMain(){ 
     addKeyListener(new KeyInput()); 
    } 


    public static void main(String[] args) throws InterruptedException{ 
     JFrame frame = new JFrame("Auto Clicker"); 
     frame.setSize(1086, 1200); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     JLabel label = new JLabel("AutoClicker", SwingConstants.CENTER); 
     frame.add(label); 
     frame.setLocationRelativeTo(null); 
     frame.setResizable(true); 
     frame.pack(); 
     frame.setVisible(true); 

     try { 
      Robot robot = new Robot(); 
      while (true){ 
       Thread.sleep(500); 
       robot.mousePress(InputEvent.BUTTON1_MASK); 
       robot.mouseRelease(InputEvent.BUTTON1_MASK); 
      } 
     } catch (AWTException e) { 
      e.printStackTrace(); 
     } 

    } 

} 

KeyInput Класс

package com.autoclicker; 

import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 

public class KeyInput extends KeyAdapter { 

    @Override 
    public void keyPressed(KeyEvent event) { 
     AutoClickerMain.generate = false; 
    } 
} 

ответ

1

Вы косяк писать код с помощью Java Swing, чтобы охватить все глобальные (OS) события клавиатуры. Вы можете только перехватывать ключевые события, если фокус находится на вашем JFrame. Пример:

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

Если вы хотите, чтобы поймать глобальные ключевые события без внимания на приложениях с помощью Java вам потребуется JNI и передовой ОС зависимого код.

1

, чтобы пользователи могли легко остановить программу.

Создайте JMenu с пунктом меню Exit. Затем вы можете назначить «ускоритель» для пункта меню.

Прочтите раздел из руководства Swing о том, как использовать меню для получения дополнительной информации и примеров.

Вы можете использовать ExitAction, найденную в Closing an Application, чтобы создать пункт меню Exit.

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