91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java如何實現按鍵精靈

發布時間:2022-05-30 09:44:49 來源:億速云 閱讀:126 作者:iii 欄目:開發技術

本篇內容主要講解“Java如何實現按鍵精靈”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java如何實現按鍵精靈”吧!

    實現效果

    Java如何實現按鍵精靈

    背景

    對于日常刷課每十分鐘點擊“繼續學習”的行為,或者說是單機游戲里某項重復的行為想使其實現“自動化”。我們可以通過JavaFx里的Robot類來實現。

    難點

    • 窗口穿透

    • 鼠標行為的記錄

    搭建程序

    Java如何實現按鍵精靈

    需要掌握的知識

    窗口測試

    @Override
    public 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如何實現按鍵精靈”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    襄城县| 常山县| 龙江县| 昌邑市| 乳山市| 华亭县| 额敏县| 晋州市| 固安县| 阿克苏市| 吉木乃县| 仪陇县| 陵川县| 广安市| 翁牛特旗| 合水县| 富源县| 丽水市| 腾冲县| 南充市| 织金县| 静安区| 元氏县| 永仁县| 册亨县| 西宁市| 云林县| 克拉玛依市| 安庆市| 定远县| 义马市| 牟定县| 黎平县| 乐业县| 如东县| 肇东市| 南昌市| 丰台区| 邻水| 九江市| 贡嘎县|