Java(Swing)监听按键事件

标签 java swing input key listener

我正在尝试制作一个自动点击器,但在捕获关键事件方面遇到问题,以便用户可以轻松停止该程序。我完全不知道出了什么问题,addKeyListener 也不起作用。有人可以帮忙吗?

这是我的代码:

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

最佳答案

您无法使用 Java swing 编写代码来捕获所有全局(操作系统)键盘事件。仅当焦点位于 JFrame 上时,您才能捕获按键事件。 示例:

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

如果您想捕获全局关键事件而不关注使用 java 的应用程序,您将需要 JNI 和高级操作系统相关代码。

关于Java(Swing)监听按键事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40338414/

相关文章:

jquery - 在 jQuery 中获取输入数字的值

java - 在ubuntu中执行jar包括dll库

java - 如何解决这个错误,如果我使用一个类会导致其他类接口(interface)也被感染

java - 使用 ScrollPane java 的动态按钮

database - 在 Laravel 中为表单提交添加一个默认值

C++简单文件读入数组问题

java - Android SQLite数据库版本,更改结构现在无法查看DB

Java帮助: Character Encoding Help - int to String

java - 经纪人网络 - ActiveMQ - 还有其他选择吗?

java.awt.EventQueue.invokeLater 解释