☀️Java实现按键精灵(键盘篇)

833 阅读1分钟

背景

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

模拟键盘输入

robot.keyPress (KeyCode.K);
robot.keyRelease (KeyCode.K);

键盘行为监听

scene.setOnKeyPressed (e->{
    System.out.println (e.getCode ());
});

完整源码演示

public class QMApp2 extends Application {
    @Override
    public void start(Stage stage) throws Exception {
        //创建面板
        VBox pane = new VBox ();
        Scene scene = new Scene (pane);
        //对齐方式
        pane.setAlignment (Pos.TOP_LEFT);
        //robot关键对象
        Robot robot = new Robot ();
        //储存按键事件
        ArrayList<KeyCode> list = new ArrayList<> ();
        //开始
        Button beginb = new Button ("开始");
        beginb.setTextFill (Color.RED);
        //结束
        Button endb = new Button ("结束");
        endb.setTextFill (Color.RED);
        pane.getChildren ().addAll (beginb, endb);
        //点击“开始”按钮时,用户预先输入
        beginb.setOnMouseClicked (m -> scene.setOnKeyPressed (e -> list.add (e.getCode ())));
        //点击“结束”按钮时,开始模拟
        endb.setOnMouseClicked (e -> {
            pane.getChildren ().remove (beginb);
            robot.mouseClick (MouseButton.PRIMARY);
            for (int i = 0; i < list.size (); i++) {
                //每次都将窗口透明
                stage.setOpacity (0);
                robot.keyPress (list.get (i));
                robot.keyRelease (list.get (i));
                try {
                    //为了效果明显,进行延迟
                    Thread.sleep (500);
                } catch (InterruptedException ex) {
                    ex.printStackTrace ();
                }
            }
            //模拟结束直接关闭
            stage.close ();
        });
        pane.setPickOnBounds (false);
        //窗口在前,不能拖到,都没有
        stage.initStyle (StageStyle.UNDECORATED);
        //窗口最大化
        stage.setMaximized (true);
        //窗口透明度,为了使得开始按钮不会消失同时可以看见其他窗口,半透明
        stage.setOpacity (0.3);
        stage.setTitle ("按键精灵");
        stage.setScene (scene);
        stage.show ();
    }
    public static void main(String[] args) {
        launch (args);
    }
}
  • 下一篇:优化及打包