使用笔绘制自由泳时,JavaFX在画布上的性能降低

时间:2015-09-13 20:52:25

标签: java canvas javafx

我在这里尝试编写一个JavaFX应用程序,允许我的手写笔在画布上绘制:Canvas does not draw smooth lines

尝试在画布上绘图时,性能非常痛苦。它将冻结半秒钟,然后开始绘图。只有在它开始绘图后才行。事先虽然当你第一次用鼠标/笔按下时,延迟是非常残酷的,使它无法使用。

以下是我使用的代码:

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.effect.BoxBlur;
import javafx.scene.shape.StrokeLineCap;
import javafx.scene.shape.StrokeLineJoin;
import javafx.stage.Stage;

public class Test extends Application {

    private GraphicsContext gc;

    @Override
    public void start(Stage stage) {
        Canvas canvas = new Canvas(500, 500);
        canvas.setOnMouseDragged(e -> {
            gc.lineTo(e.getX(), e.getY());
            gc.stroke();
        });
        canvas.setOnMousePressed(e -> gc.moveTo(e.getX(), e.getY()));

        gc = canvas.getGraphicsContext2D();
        gc.setLineCap(StrokeLineCap.ROUND);
        gc.setLineJoin(StrokeLineJoin.ROUND);
        gc.setLineWidth(1);

        BoxBlur blur = new BoxBlur();
        blur.setWidth(1);
        blur.setHeight(1);
        blur.setIterations(1);
        gc.setEffect(blur);

        Group root = new Group(canvas);
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
        stage.setFullScreen(true);
    }

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

有没有办法解决性能问题?我的台式电脑相当稳定,可以运行高端游戏,所以它不是我电脑上的性能。

注意:我还应该说,当你第一次在画布上按下鼠标时发生的延迟很可能导致鼠标点击下降。

编辑:为了确认它不是OnMousePressed,我评论了它并没有帮助。

1 个答案:

答案 0 :(得分:1)

显然我的驱动程序与Java有某种冲突,这意味着JavaFX很好。在获得平板电脑公司的帮助和一些修复后,最新的驱动程序不会发生这种情况。