Добавление объектов в список и добавление этих объектов списка на панель с помощью кнопки - PullRequest
0 голосов
/ 22 апреля 2019

Итак, я работаю над небольшим проектом ночной школы, и мы «манипулируем» одним существующим кругом.Нажав кнопку 4 (btn4), мне нужно добавить несколько (число не важно) концентрических кругов в StackPane.Я добавил их в список и пытался заставить его работать, но я просто не могу.Все работает, кроме этой кнопки.

В действии btn4: попытался поместить весь код с помощью цикла for, foreach, но метод add () не принимает там setFill, поэтому я поместил в список все, что находится за пределами setOnAction()

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {


        HBox hb1 = new HBox(20);
        hb1.setAlignment(Pos.CENTER);
        hb1.setStyle("-fx-background-color:darkgrey;");

        Button btn1 = new Button("+");
        Button btn2 = new Button("-");
        Button btn3 = new Button("Change color");
        Button btn4 = new Button("Add concentric circles");

        hb1.getChildren().addAll(btn1, btn2, btn3, btn4);

        StackPane sp = new StackPane();
        sp.setStyle("-fx-background-color:lightblue;");
        Circle circle = new Circle(75);
        circle.setFill(RED);

        sp.getChildren().add(circle);

        BorderPane bp = new BorderPane();
        bp.setBottom(hb1);
        bp.setCenter(sp);

        btn1.setOnAction(e -> {
            circle.setRadius(circle.getRadius() + 10);
        });

        btn2.setOnAction(e -> {
            circle.setRadius(circle.getRadius() - 10);
        });

        btn3.setOnAction(e -> {
            circle.setFill(Color.color(Math.random(), Math.random(), Math.random(), 1));
        });

        ArrayList <Circle> moreCircles = new ArrayList<>();

        for (int i = 1; i <= 10; i++) {
            new Circle(circle.getRadius() - (i * 5)).setFill(Color.color(Math.random(), Math.random(), Math.random(), 1));
        }

        btn4.setOnAction(e -> {
        for(Circle c : moreCircles) {
                sp.getChildren().add(c);
            }
        });

       Scene scene = new Scene(bp, 500, 350);

        primaryStage.setTitle("Game with circles");
        primaryStage.setScene(scene);
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }

}

Я хочу сделать эти новые концентрические круги немного меньшими по сравнению с существующими.Чтобы добавить их все сразу, и я хочу, чтобы они были видны, я добавил несколько цветов.

Спасибо @anthony yaghi за решение этой небольшой проблемы для меня

Действие кнопки необходимоПохоже, и Array выше для некоторого удаления:

btn4.setOnAction(e -> {
        for (int i = 1; i <= 10; i++) {
            sp.getChildren().add(new Circle(circle.getRadius() - (i*5), Color.color(Math.random(), Math.random(), Math.random(), 1)));
        }
    });

1 Ответ

4 голосов
/ 22 апреля 2019

Прежде всего цикл for сразу после создания списка массивов бесполезен. Вы создаете новые круги и ничего не делаете с ними, я думаю, вы пытались добавить в список, но вы не можете сделать "новый круг (...) и затем .setFill, если вы посмотрите на доступный конструктор Вы можете видеть объект Circle, который имеет радиус и цвет для заливки, поэтому вы можете сделать это вместо:

new Circle(circle.getRadius() - (i*5), Color.color(Math.random(), Math.random(), Math.random(), 1));

Также, если вы просто хотите добавить n кружков внутри текущего, и вам все равно, что произойдет позже (если основной кружок станет больше или меньше), вам не нужно добавлять список в список и отслеживать они просто добавляют их в StackPane напрямую.

    /*
    ArrayList<Circle> moreCircles = new ArrayList<>();

    for (int i = 1; i <= 10; i++) {
        new Circle(circle.getRadius() - (i * 5)).setFill(Color.color(Math.random(), Math.random(), Math.random(), 1));
    }
    */

    btn4.setOnAction(e -> {
        for (int i = 1; i <= 10; i++) {
            sp.getChildren().add(new Circle(circle.getRadius() - (i*5), Color.color(Math.random(), Math.random(), Math.random(), 1)));
        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...