更具体地说,我将如何实现拖放功能,以便拖动到画布上的图像文件将在画布上绘制?我尝试在画布上使用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
});
}
答案 0 :(得分:2)
mouseDragReleased
事件是在这里听的错误事件。在"完全按下 - 拖动 - 释放手势期间释放鼠标时触发该事件。在申请中;而不是在平台支持的拖放手势中删除数据时#34; (有关这些不同拖动模式的说明,请参阅documentation for MouseEvent
)。因此,您需要代替canvas.setOnMouseDragReleased(...)
:
canvas.setOnDragDropped(e -> {
// ...
});
假设处理程序的实现是正确的,这应该使您能够从文件中删除图像并将其绘制在画布上。