定时JavaFX Canvas应用程序

为了练习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实现存在根本错误。


千巷猫影
浏览 838回答 2
2回答

红颜莎娜

首先,我按照建议应用了分离的“背景”画布,没有进行临时更新。完成绘制后,我使用快照将背景画布复制到显示的画布。这可以正常工作,并且可能具有更好的整体结构。它仍然不能帮助我解决计算时间与实际时间之间的差异。
打开App,查看更多内容
随时随地看视频慕课网APP