Как нарисовать 10000 кругов в случайных местах, используя JavaFX? - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь нарисовать 10000 кругов в JavaFX, но кажется, что он не работает, и я даже не могу нарисовать ни одного круга. На самом деле это выдает мне ошибку: enter image description here

Это код, который у меня сейчас есть:

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);
    }
}

Может кто-нибудь также сказать мне, если использовать setCenterX /Y - это правильный подход для создания кругов в случайных местах?

Спасибо.

ОБНОВЛЕНИЕ: Человеку, который, хотя мой пост и повторяется, это не так,Моя проблема проистекает из моей логики, которую я реализовал в своем коде, а не из-за ошибки NullPointerException (не совсем). что было не так. Какой-то парень уже помог мне решить эту проблему.

Ответы [ 2 ]

5 голосов
/ 01 октября 2019

После исправления ошибки времени выполнения ваш код рисует только один круг. Это потому, что вы добавляете только один круг в график сцены. Цикл 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);
    }
}
1 голос
/ 01 октября 2019

Измените эту строку:

private Random randomNumbers;

на это:

private Random randomNumbers = new Random();

Ваш код предполагает, что случайный объект будетвыделяется как другие переменные-члены, но это объект и должен быть создан с новым.

...