eclipse - 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中观察三角形是如何一步一步绘制的?
解决方案
推荐阅读
- cuda - Pycuda 在函数参数中按值声明数组时返回错误
- ios - 如何在 SceneKit 的渲染队列中处理触摸事件
- excel - Excel,从数组中返回唯一值值,但不返回空白值
- javascript - 脚本触发器不触发函数
- swift - SwiftUI 中未调用 Obj-C 函数
- timescaledb - timescaleDB 插入速度问题
- webrtc - Coturn 服务器给了 code=701 TURN allocate request timed out
- flutter - 如果我使用 .tostring 或错误消息颤振设置变量,则返回 Null
- javascript - 需要帮助解决承诺并分配返回值
- javascript - 如何在我的反应应用程序中删除这些 html 标签