首页 > 解决方案 > javafx调试时如何观察serpinski三角形是如何绘制的?

问题描述

我有一个在 JavaFX 的窗格中绘制 Serpinski 三角形的代码(使用 Eclipse)。

我把切换点放在drawTriangle函数里面它说的地方pane.getChildren().add(triangle);

下面是代码:

package application;

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.shape.*;
import javafx.scene.paint.Color;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.geometry.*;
import javafx.stage.Stage;

public class SierpinskiTriangle extends Application {

    Pane pane;
    Point2D point1, point2, point3;
    int nrOfOrder;

    @Override
    public void start(Stage primaryStage) {
        /**Set up the panes, text fields and buttons*/
        pane = new Pane();
        BorderPane borderPane = new BorderPane();
        borderPane.setPadding(new Insets(10, 10, 10, 10));
        borderPane.setCenter(pane);

        pane.setPadding(new Insets(10, 10, 10, 10));
        TextField input = new TextField();
        input.setPadding(new Insets(5, 5, 5, 5));
        Label label = new Label("Enter order: ");
        label.setPadding(new Insets(10, 10, 10, 10));

        /** Put everything together */
        HBox bottom = new HBox(10);
        bottom.setPadding(new Insets(5, 5, 5, 5));
        bottom.setAlignment(Pos.CENTER);
        bottom.getChildren().addAll(label, input);
        borderPane.setBottom(bottom);

        /** Get started */
        Scene scene = new Scene(borderPane, 700, 700);
        primaryStage.setScene(scene);
        primaryStage.setResizable(true);
        primaryStage.setTitle("Sierpinski Triangle");
        primaryStage.show();

        input.setOnAction(a -> {            
            nrOfOrder = Integer.parseInt(input.getText());
            paint(nrOfOrder);
        });

        scene.widthProperty().addListener(o -> {paint(nrOfOrder);});
        scene.heightProperty().addListener(o -> {paint(nrOfOrder);});

    }

    //Simple function to get started with painting triangles
    //calling the recursive function
    public void paint(int order) {
        pane.getChildren().clear();
        point1 = new Point2D(pane.getWidth() / 2, 20);
        point2 = new Point2D(pane.getWidth()-20, pane.getHeight()-100);
        point3 = new Point2D(20, pane.getHeight()-100);
        setTriangles(order, point1, point2, point3);
    }

    //Recursive function paintnigTriangles
    public void setTriangles(int order, Point2D point1, 
            Point2D point2, Point2D point3) {

        if (order == 0)
            drawTriangle(point1, point2, point3);

        else {
            //Triangle at the upper corner
            setTriangles(order-1, point1.midpoint(point1),
                    point1.midpoint(point2),
                    point1.midpoint(point3));
            //Triangle at the right corner
            setTriangles(order-1, point2.midpoint(point1),
                    point2.midpoint(point2),
                    point2.midpoint(point3));
            //Triangle at the left corner
            setTriangles(order-1, point3.midpoint(point1),
                    point3.midpoint(point2),
                    point3.midpoint(point3));
        }

    }


    public void drawTriangle(Point2D point1, Point2D point2, Point2D point3) {

        Polygon triangle = new Polygon(
                point1.getX(), point1.getY(),
                point2.getX(), point2.getY(),
                point3.getX(), point3.getY()
                );

        triangle.setFill(Color.RED);
        triangle.setStroke(Color.BLACK);
        pane.getChildren().add(triangle);    // THE TOGGLE POINT HERE
    } 

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

当我在调试器上运行时,会显示窗格。我输入一个数字(例如“2”)并按回车键。

然后应用程序窗口显示“没有响应”。我单击 F( 几次并逐步完成代码。我看不到三角形是如何绘制的,但最后我只看到完成的三角形。

调试时如何在Eclipse中观察三角形是如何一步一步绘制的?

标签: eclipsedebuggingjavafx

解决方案


推荐阅读