您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 湘西分类信息网,免费分类信息发布

如何使用Java实现按键精灵?

2024/2/28 13:56:17发布17次查看
实现效果
背景对于日常刷课每十分钟点击“继续学习”的行为,或者说是单机游戏里某项重复的行为想使其实现“自动化”。我们可以通过javafx里的robot类来实现。
难点窗口穿透
鼠标行为的记录
搭建程序
需要掌握的知识窗口测试@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);
模拟鼠标单击左
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实现按键精灵?的详细内容。
湘西分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录