canvas - Java Fx setOnMouseDragged 变慢

标签 canvas javafx mouseevent mouselistener

我想创建自己的绘画,但是由于某种原因,当我快速移动鼠标而不是创建一条线时,我创建了一堆点。

public class ExtractController {

@FXML
private Canvas canvas;

private GraphicsContext gc ;

public void initialize() {
    gc = canvas.getGraphicsContext2D();

    canvas.setOnMouseDragged(e->{
        double size = 5;
        double x = e.getX();
        double y = e.getY();

        gc.setFill(Color.RED);
        gc.fillRect(x, y, size, size);
    });
}
}

enter image description here

有没有办法让 mouseDragged 事件更快地触发?或者还有其他方法可以做到这一点吗?谢谢。

最佳答案

您无法控制接收鼠标事件的速度(除此之外,这取决于用户按下鼠标的速度)。

不要绘制单个点,而是从上一个位置绘制线条:

public class ExtractController {

    @FXML
    private Canvas canvas;

    private GraphicsContext gc ;

    private double lastX ;
    private double lastY ;

    public void initialize() {
        gc = canvas.getGraphicsContext2D();

        canvas.setOnMousePressed(e -> {
            lastX = e.getX();
            lastY = e.getY();
        });

        canvas.setOnMouseDragged(e->{
            double size = 5;
            double x = e.getX();
            double y = e.getY();

            gc.setLineWidth(size);
            gc.setStroke(Color.RED);
            gc.strokeLine(lastX, lastY, x, y);
            lastX = x ;
            lastY = y ;
        });
    }

}

关于canvas - Java Fx setOnMouseDragged 变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48796281/

相关文章:

java - Java中限制窗口大小

javascript - 如何计算 Canvas 中的 x 和 y 坐标

javascript - 文本旋转 HTML 5 Canvas

javascript - 在 Canvas 上渲染 svg 图像

Javafx GridPane,如何居中节点? (文字/标签)

Python OpenCV : mouse callback for drawing rectangle

css - 是否可以使 JavaFX TableColumn 的标题文本溢出到另一列?

带有controlsfx通知组件的javafx NullPointerException

c# - WPF 鼠标按下事件

c++ - 如何在 Qt 中使用自定义标题栏 move 窗口