首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用JavaFX检测画布上的鼠标拖动事件

如何使用JavaFX检测画布上的鼠标拖动事件
EN

Stack Overflow用户
提问于 2018-01-18 02:39:37
回答 1查看 8.5K关注 0票数 3

这个JavaFX应用程序在窗口中央包含一个画布对象(黑色bkg),我正在尝试检测该画布上的鼠标输入。为了测试,我在控制台操作中添加了一个简单的打印,以响应每个鼠标事件。以下工作如下:

代码语言:javascript
复制
cnv.setOnMouseClicked();

但以下几点不起作用:

代码语言:javascript
复制
cnv.setOnMouseDragOver();
cnv.setOnMouseDragEntered();
cnv.setOnMouseDragReleased();
cnv.setOnMouseDragExited();

无论我如何点击和拖动鼠标,只检测到鼠标点击("mouseClicked“出现在控制台上)。

代码语言:javascript
复制
package javafxtest1;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.scene.input.MouseDragEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;

public class JavaFXTest1 extends Application {

    @Override
    public void start(Stage primaryStage) {

        StackPane root = new StackPane();
        Scene scene = new Scene(root, 800, 640);
        Canvas cnv = new Canvas(scene.getWidth()-200,scene.getHeight()-200);
        root.getChildren().add(cnv);

        //Fill the canvas with a black bkg so we can know where it is
        GraphicsContext gc = cnv.getGraphicsContext2D();
        gc.setFill(Color.BLACK);
        gc.fillRect(0, 0, cnv.getWidth(), cnv.getHeight());

        //set response to mouse events
        cnv.setOnMouseClicked((MouseEvent event) -> {
            System.out.println("mouseClicked");
        });
        cnv.setOnMouseDragOver((MouseDragEvent event) -> {
            System.out.println("mouseDragOver");
        });
        cnv.setOnMouseDragEntered((MouseDragEvent event) -> {
            System.out.println("mouseDragEntered");
        });
        cnv.setOnMouseDragReleased((MouseDragEvent event) -> {
            System.out.println("mouseDragReleased");
        });
        cnv.setOnMouseDragExited((MouseDragEvent event) -> {
            System.out.println("mouseDragExited");
        });


        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

我的错误在哪里?

(我使用的是Win 7 64和NetBeans 8.2)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 03:08:39

这些事件处理程序用于平台支持的拖放处理,如果在拖动检测到的事件中调用startDragAndDrop(),则启动拖放处理。(它们也只有在某些情况下才会被发射,例如拖板不是空的。)

您应该只使用setOnMouseDragged()进行常规鼠标事件处理。

有关不同鼠标拖动模式及其支持的事件的详细信息,请参阅 documentation的“拖动手势”部分。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48312996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档