如何使用JavaFX在随机位置绘制10000个圆?

Kir*_*ris -2 java javafx javafx-8

我正在尝试在JavaFX中绘制10,000个圆圈,但似乎不起作用,甚至无法绘制一个圆圈。实际上,它引发了我一个错误: 在此处输入图片说明

这是我目前拥有的代码:

public class RandomCircles extends Application {

    private Random randomNumbers;
    private int count;
    private final double MAX_X = 600;
    private final double MAX_Y = 300;
    private final int FINAL_CIRCLES = 10000;

    public void start(Stage primaryStage){

        Circle initCircle = new Circle();
        initCircle.setStroke(Color.BLACK);
        initCircle.setStrokeWidth(3);
        initCircle.setRadius(1);

        for(count = 0; count <= FINAL_CIRCLES; count++){
            initCircle.setCenterX(randomNumbers.nextInt((int) MAX_X));
            initCircle.setCenterY(randomNumbers.nextInt((int) MAX_Y));
        }

        Group baseDemo = new Group(initCircle);

        // Scene scene = new Scene(baseDemo, MAX_X, MAX_Y);
        Scene scene = new Scene(baseDemo);
        scene.setFill(Color.WHITE);
        scene.getWidth();

        primaryStage.setTitle("10,000");
        primaryStage.setScene(scene);
        primaryStage.setResizable(true);
        primaryStage.show();
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我使用setCenterX / Y是否是在随机位置创建圆的正确方法吗?

谢谢。

更新:对于那些虽然我的帖子重复的人,却并非如此。我的问题来自我在代码中实现的逻辑,而不是来自NullPointerException(不是真的)错误。,这是错误的。已经有人帮我解决了。

Abr*_*bra 5

修正运行时错误后,您的代码只画了一个圆圈。那是因为您只向场景图添加了一个圆圈。该for回路基本上什么也不做。圆心的最后X和Y坐标用于绘制单个孤立圆。您需要添加一万个圈子。

在下面的代码中,我将10_000更改为100(一百),因为10_000在您设置的舞台尺寸中有太多重叠的圆圈。我还增加了每个圆的半径。

import java.util.Random;

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;

public class RandomCircles extends Application {
    private Random randomNumbers = new Random();
    private int count;
    private final double MAX_X = 600;
    private final double MAX_Y = 300;
    private final int FINAL_CIRCLES = 100;

    public void start(Stage primaryStage){
        Group baseDemo = new Group();
        for(count = 0; count <= FINAL_CIRCLES; count++){
            Circle initCircle = new Circle();
            initCircle.setStroke(Color.BLACK);
            initCircle.setStrokeWidth(3);
            initCircle.setRadius(5);
            initCircle.setCenterX(randomNumbers.nextInt((int) MAX_X));
            initCircle.setCenterY(randomNumbers.nextInt((int) MAX_Y));
            baseDemo.getChildren().add(initCircle);
        }

        Scene scene = new Scene(baseDemo);
        scene.setFill(Color.WHITE);
        scene.getWidth();

        primaryStage.setTitle("100");
        primaryStage.setScene(scene);
        primaryStage.setResizable(true);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)