背景
对于日常刷课每十分钟点击“继续学习”的行为,或者说是单机游戏里某项重复的行为想使其实现“自动化”。我们可以通过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);
}
}
- 下一篇:优化及打包