我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java如何实现按键精灵

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java如何实现按键精灵

本篇内容主要讲解“Java如何实现按键精灵”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java如何实现按键精灵”吧!

    实现效果

    Java如何实现按键精灵

    背景

    对于日常刷课每十分钟点击“继续学习”的行为,或者说是单机游戏里某项重复的行为想使其实现“自动化”。我们可以通过JavaFx里的Robot类来实现。

    难点

    • 窗口穿透

    • 鼠标行为的记录

    搭建程序

    Java如何实现按键精灵

    需要掌握的知识

    窗口测试

    @Overridepublic void start(Stage stage) throws Exception {    Scene scene = new Scene(new Pane (), 320, 240);    stage.setTitle("按键精灵!");    stage.setScene(scene);    stage.show();}

    获取鼠标位置

    Robot robot = new Robot ();//获得鼠标位置Point2D mp = robot.getMousePosition ();System.out.println (mp);

    Java如何实现按键精灵

    模拟鼠标单击

    MouseButton.PRIMARY

    MouseButton.SECONDARY

    滚轮子

    MouseButton.MIDDLE

    模拟鼠标移动

    //鼠标移动robot.mouseMove (new Point2D (800,800));

    鼠标行为监听

    //监听鼠标单击pane.setOnMouseClicked (e->{               System.out.println (e.getButton ());     System.out.println (e.getSceneX ());     System.out.println (e.getSceneY ());});//监听鼠标键入pane.setOnMousePressed (e->{});//监听鼠标释放pane.setOnMouseReleased (e->{});//监听鼠标在摁着某个键时的拖动pane.setOnMouseDragged (e->{});

    完整源码及详细解释

    public class QMApp extends Application {    @Override    public void start(Stage stage) throws Exception {                class MyMouseEvent{            //鼠标行为            MouseButton mb;            //类型            EventType et;            //坐标            Point2D point2D;            public MyMouseEvent(MouseButton mb, EventType et, Point2D point2D) {                this.mb = mb;                this.et=et;                this.point2D = point2D;            }        }        //创建面板        VBox pane = new VBox ();        //对齐方式        pane.setAlignment (Pos.TOP_LEFT);        //robot关键对象        Robot robot = new Robot ();        //记录鼠标行为        LinkedList<MyMouseEvent> list = new LinkedList<> ();        //开始        Button beginb = new Button ("开始");        beginb.setTextFill (Color.RED);        //结束        Button endb = new Button ("结束");        endb.setTextFill (Color.RED);        pane.getChildren ().addAll (beginb,endb);        //点击“开始”按钮时,鼠标行为储存进列表        beginb.setOnMouseClicked (m->{            pane.setOnMouseDragged (e->{                list.add (new MyMouseEvent (e.getButton (),e.getEventType (),new Point2D (e.getSceneX (),e.getSceneY ())));            });            pane.setOnMousePressed (e->{                list.add (new MyMouseEvent (e.getButton (),e.getEventType (),new Point2D (e.getSceneX (),e.getSceneY ())));            });            pane.setOnMouseReleased (e->{                list.add (new MyMouseEvent (e.getButton (),e.getEventType (),new Point2D (e.getSceneX (),e.getSceneY ())));            });        });        //点击“结束”按钮时,鼠标行为储存进列表        endb.setOnMouseClicked (e->{            pane.getChildren ().remove (beginb);            for (int i = 0; i < list.size (); i++) {                //每次鼠标模拟都将窗口透明,实现穿透                stage.setOpacity (0);                if (list.get (i).et== MOUSE_DRAGGED){                    robot.mousePress (list.get (i).mb);                }else {                    robot.mouseMove (list.get (i).point2D);                    robot.mouseClick (list.get (i).mb);                }                try {                    //为了效果明显,进行延迟                    Thread.sleep (50);                } catch (InterruptedException ex) {                    ex.printStackTrace ();                }            }        });        //面板不参与计算边界。鼠标点击事件发生后,会计算应该是哪个组件位于鼠标所在点的位置,而该面板因为不参与边界计算,所以也不会捕获到鼠标事件        pane.setPickOnBounds(false);        //窗口在前,不能拖到,都没有        stage.initStyle (StageStyle.UNDECORATED);        //窗口最大化        stage.setMaximized (true);        //窗口透明度,为了使得开始按钮不会消失同时可以看见其他窗口,半透明        stage.setOpacity (0.3);        Scene scene = new Scene(pane);        stage.setTitle("按键精灵");        stage.setScene(scene);        stage.show();    }    public static void main(String[] args) {        launch (args);    }}

    到此,相信大家对“Java如何实现按键精灵”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Java如何实现按键精灵

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Java如何实现按键精灵

    本篇内容主要讲解“Java如何实现按键精灵”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java如何实现按键精灵”吧!实现效果背景对于日常刷课每十分钟点击“继续学习”的行为,或者说是单机游戏里某
    2023-06-30

    电脑按键失灵如何解决

    本篇内容主要讲解“电脑按键失灵如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“电脑按键失灵如何解决”吧!电脑按键失灵解决方法:方法一:检查键盘 1、首先按下“Caps Lock”键,检查键
    2023-07-01

    Xamarin如何实现按键绑定

    这篇文章主要为大家展示了“Xamarin如何实现按键绑定”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Xamarin如何实现按键绑定”这篇文章吧。按键绑定对于那些你最常使用的命令,按键绑定可以极
    2023-06-27

    详解教你Win10如何使用一键还原精灵

    一键还原精灵是Windows 10操作系统自带的恢复工具,可以帮助用户在系统出现问题时恢复到之前的状态。下面是详细的使用教程:1. 打开“设置”:点击Windows开始菜单,选择“设置”图标(齿轮状图标)。2. 进入“更新和安全”:在“设置
    2023-09-17

    vbs中如何通过MsAgent组件实现微软精灵

    这篇文章主要介绍了vbs中如何通过MsAgent组件实现微软精灵,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。代码如下:On Error Resume Next strAge
    2023-06-08

    windows驱动精灵bootsafe64出现错误如何解决

    这篇文章主要讲解了“windows驱动精灵bootsafe64出现错误如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“windows驱动精灵bootsafe64出现错误如何解决”吧!驱
    2023-07-01

    Java如何对数组按照键名排序

    本教程介绍了在Java中使用TreeMap对数组按照键名排序的方法,包括:创建TreeMap并添加数组元素遍历TreeMap以获取排序后的键名该方法易于理解和实现,时间复杂度为添加元素的O(logn)和遍历TreeMap的O(n)。此外,还列出了使用Arrays.sort()、自定义比较器和第三方库进行排序的其他方法。
    Java如何对数组按照键名排序
    2024-04-02

    Java如何实现精美网上音乐平台

    这篇文章主要介绍Java如何实现精美网上音乐平台,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、项目简述本系统功能包括: 音乐播放 用户登录注册 用户信息编辑、头像修改 歌曲、歌单搜索 歌单打分 歌单、歌曲评论 歌
    2023-06-25

    Android 应用中如何实现按返回键后台运行

    这篇文章将为大家详细讲解有关Android 应用中如何实现按返回键后台运行,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Android应用开发按下返回键退向后台运行我们日常使用的很多Andr
    2023-05-31

    Java如何对数组按照键名逆向排序

    本文详细介绍了在Java中对数组按照键名逆向排序的方法,提供了三种方案:使用TreeMap、使用Arrays.sort()以及使用第三方库。具体步骤包括创建TreeMap或自定义Comparator,然后使用排序方法进行排序。示例代码展示了每种方案的实现和输出,帮助理解如何实现数组的键名逆向排序。
    Java如何对数组按照键名逆向排序
    2024-04-02

    如何实现按需加载

    按需加载:优化应用程序性能的技术按需加载技术动态加载资源,仅在需要时才加载,从而减少加载时间和内存消耗。常见技术包括:代码拆分:将代码分成按需加载的块。懒加载:推迟加载资源,直到需要或滚动到它们。虚拟滚动:在滚动时动态加载列表项目。图片加载优化:使用srcset、loading背景图片属性按需加载图像。其他按需加载技术:服务端渲染(SSR)内容分发网络(CDN)预加载和预取按需加载的优点:提高加载速度优化内存使用提升用户体验降低带宽消耗提高可扩展性
    如何实现按需加载
    2024-04-25

    如何实现Java中的static关键字解析

    这期内容当中小编将会给大家带来有关如何实现Java中的static关键字解析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,
    2023-06-03

    react如何实现按需加载

    React按需加载按需加载在React中通过延迟加载组件来优化性能。动态导入、代码分割和路由懒加载是实现按需加载的方法。按需加载的好处包括减少初始加载时间、优化性能和降低网络资源消耗。
    react如何实现按需加载
    2024-04-25

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录