JavaFX Homework [duplicate]

To increase no. of blades dynamically, you need to change no. of arcs you are making, its length and angle difference.
Change your constructor of FanPane according to below code.

public FanPane(int blade) {
            circle.setStroke(Color.BLUE);
            circle.setFill(Color.WHITE);
            circle.setStrokeWidth(4);
            getChildren().add(bpane);

            slider1.setShowTickLabels(true);
            slider1.setShowTickMarks(true);
            slider1.setMajorTickUnit(5);
            slider1.setMinorTickCount(0);
            slider1.setBlockIncrement(1);
            slider2.setShowTickLabels(true);
            slider2.setShowTickMarks(true);
            slider2.setMajorTickUnit(5);
            slider2.setMinorTickCount(0);
            slider2.setBlockIncrement(1);

            gpane.setConstraints(speed, 0, 0);
            gpane.setConstraints(slider1, 1, 0);
            gpane.setConstraints(numBlades, 0, 1);
            gpane.setConstraints(slider2, 1, 1);
            gpane.getChildren().addAll(speed, slider1, numBlades, slider2);

            btBox.getChildren().addAll(pauseBt, resumeBt, reverseBt);
            topBox.getChildren().addAll(blank, btBox);

            Pane pane = new Pane(circle);
            bpane.setCenter(pane);
            bpane.setTop(topBox);
            bpane.setBottom(gpane);
//            bpane.setAlignment(topBox, Pos.CENTER);

            pauseBt.setOnAction(e -> animation.pause());
            resumeBt.setOnAction(e -> animation.play());
            reverseBt.setOnAction(e -> this.reverse());

//            bpane.widthProperty().addListener(e -> this.setW(this.getWidth()));
//            bpane.heightProperty().addListener(e -> this.setH(this.getHeight()));
            try {
            arc = new Arc[blade];
            int angleDiff = 360 / blade;
            for (int i = 0; i < blade; i++) {
                arc[i] = new Arc(w / 2, h / 2, radius * 0.9, radius * 0.9, startAngle + i * angleDiff, 180 / blade);
                arc[i].setFill(Color.RED); // Set fill color
                arc[i].setType(ArcType.ROUND);
                pane.getChildren().addAll(arc[i]);

            }
            } catch (ArithmeticException ex) {
                blade = 2;
                arc = new Arc[blade];
                int angleDiff = 360 / blade;
                for (int i = 0; i < blade; i++) {
                    arc[i] = new Arc(w / 2, h / 2, radius * 0.9, radius * 0.9, startAngle + i * angleDiff, 180 / blade);
                    arc[i].setFill(Color.RED); // Set fill color
                    arc[i].setType(ArcType.ROUND);
                    pane.getChildren().addAll(arc[i]);

                }
            }
        }

Leave a Comment