canvas - 如何在javafx的画布中逐渐绘制形状
问题描述
我想将一系列点添加到画布中。但结果是同时显示所有点。这是我的代码:
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import java.util.Random;
public class BasicOpsTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Drawing Operations Test");
Group root = new Group();
Canvas canvas = new Canvas(300, 250);
GraphicsContext gc = canvas.getGraphicsContext2D();
root.getChildren().add(canvas);
primaryStage.setScene(new Scene(root));
primaryStage.show();
drawShapes(gc);
}
private void drawShapes(GraphicsContext gc) {
gc.setFill(Color.GREEN);
gc.setStroke(Color.BLUE);
Random rand = new Random();
for (int i = 0; i < 200; i++) {
gc.fillOval(rand.nextDouble() * 300, rand.nextDouble() * 250, 2, 2);
try {
Thread.sleep(10);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
我想看到结果依次添加每个点。我能怎么做?
/////////// 我使用的解决方案AnimationTimer
是:
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.animation.AnimationTimer;
import java.util.Random;
public class BasicOpsTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Drawing Operations Test");
Group root = new Group();
Canvas canvas = new Canvas(300, 250);
GraphicsContext gc = canvas.getGraphicsContext2D();
root.getChildren().add(canvas);
primaryStage.setScene(new Scene(root));
primaryStage.show();
drawShapes(gc);
}
private void drawShapes(GraphicsContext gc) {
Random rand = new Random();
gc.setFill(Color.GREEN);
AnimationTimer at = new AnimationTimer() {
public void handle(long now) {
gc.fillOval(rand.nextDouble() * 300, rand.nextDouble() * 250, 2, 2);
}
};
at.start();
}
}
这解决了我的问题!
解决方案
推荐阅读
- csv - 运行时持续时间超时 - databricks
- sql-server - 在 ColdFusion 2018 管理员中启用 SSL
- geometry - 当用于空间索引时,希尔伯特曲线如何比 Z-Order 曲线最大化“参考局部性”?
- sql - 表 A 中但不在 B 中的行
- javascript - 如何指定选择哪个过滤器-react-material ui
- excel - 粘贴复制范围的问题
- python - 更改 matplotlib 动画的 X 轴
- python - 在 Python Pandas 中加入数据框
- java - 如何用方法引用替换 lambda
- php - 嵌入 power bi 的 wp_redirect 问题