[英]How do I implement drag and drop on a canvas?
更具体地说,我将如何实现拖放功能,以便将拖放到画布上的图像文件绘制在画布上? 我曾尝试在画布顶部使用VBox
侦听器,但这没有用。 按程序的源代码在此处 。
在我的控制器initialize()
函数中,我有以下代码。 通过@FXML
批注从FXML文件传递canvas
:
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
事件是在此处监听的错误事件。 当在应用程序中“完全按下-拖动-释放手势”期间释放鼠标时,将触发该事件; 而不是在“平台支持的拖放手势”期间删除数据时(有关这些不同的拖动模式的说明,请参见MouseEvent
的文档 )。 因此,您需要:而不是canvas.setOnMouseDragReleased(...)
canvas.setOnDragDropped(e -> {
// ...
});
假定处理程序的实现正确,这将使您能够从文件中删除图像并将其绘制在画布上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.