更具体地说,我将如何实现拖放功能,以便将拖放到画布上的图像文件绘制在画布上?我尝试在画布顶部使用VBox侦听器,但这没有用。按程序的源代码在here中可用。

在我的控制器initialize()函数中,我有以下代码。 canvas是通过@FXML注释从FXML文件传递的:

public void initialize() {
        GraphicsContext g = canvas.getGraphicsContext2D();

        // Setter for brush type
        setBrushBrush();

        // Get screen dimensions and set the canvas accordingly
        Dimension screenSize = getScreenSize();
        double screenWidth = screenSize.getWidth();
        double screenHeight = screenSize.getHeight();
        canvas.setHeight(screenHeight/1.5);
        canvas.setWidth(screenWidth/1.5);

        canvas.setOnMouseDragged(e -> {
         //Drawing code here
        });

        canvas.setOnDragOver(e -> {
         // Need to read data of dragged image
        });

        canvas.setOnMouseDragReleased(e -> {
         // Need to put dragged data on to canvas
        });
}

最佳答案

mouseDragReleased事件是在此处监听的错误事件。当在应用程序中“完全按下-拖动-释放手势”期间释放鼠标时,将触发该事件;而不是在“平台支持的拖放手势”期间删除数据时(有关这些不同拖动模式的说明,请参见documentation for MouseEvent)。因此,您需要代替canvas.setOnMouseDragReleased(...)

canvas.setOnDragDropped(e -> {
    // ...
});


假设处理程序的实现是正确的,这将使您能够从文件中删除图像并将其绘制在画布上。

关于java - 如何在 Canvas 上实现拖放?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43500597/

10-11 22:20
查看更多