为了练习JavaFX,我构建了一个绘制Sierpinski Triangles的简单应用程序。import javafx.application.Application;import javafx.application.Platform;import javafx.concurrent.Task;import javafx.geometry.Insets;import javafx.geometry.Point2D;import javafx.geometry.Pos;import javafx.scene.Scene;import javafx.scene.canvas.Canvas;import javafx.scene.canvas.GraphicsContext;import javafx.scene.layout.AnchorPane;import javafx.scene.layout.BorderPane;import javafx.scene.layout.Pane;import javafx.scene.paint.Color;import javafx.stage.Stage;public class SierpinskiTriangles extends Application { private final int PADDING = 5; private static int numberOfLevels; public static void launch(String... args){ numberOfLevels = 8; if((args != null) && (args.length > 0)) { int num = -1; try { num = Integer.parseInt(args[0]); } catch (NumberFormatException ex) { ex.printStackTrace(); return; } numberOfLevels = (num > 0) ? num : numberOfLevels; } Application.launch(args); } @Override public void start(Stage stage) { stage.setOnCloseRequest((ae) -> { Platform.exit(); System.exit(0); }); stage.setTitle("Sierpinski Triangles (fx)"); BorderPane mainPane = new BorderPane(); mainPane.setPadding(new Insets(PADDING)); Pane triPanel = new Triangles(); BorderPane.setAlignment(triPanel, Pos.CENTER); mainPane.setCenter(triPanel); Scene scene = new Scene(mainPane); stage.setScene(scene); stage.centerOnScreen(); stage.setResizable(false); stage.show(); }输出是预期的: 三角形我遇到的问题:一种。的时间输出updateGraphics()显示很早(在我的机器上为8秒)完成了三角形的绘制,因此无法测量完整的过程。我该如何改善呢?b。在我的机器上,面板完全绘制需要30-35秒。类似的挥杆动作需要4秒钟。这可能表明我的javafx实现存在根本错误。
2 回答
红颜莎娜
TA贡献1842条经验 获得超12个赞
首先,我按照建议应用了分离的“背景”画布,没有进行临时更新。完成绘制后,我使用快照将背景画布复制到显示的画布。这可以正常工作,并且可能具有更好的整体结构。它仍然不能帮助我解决计算时间与实际时间之间的差异。
添加回答
举报
0/150
提交
取消