簡體   English   中英

如何在畫布上實現拖放?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM