在Java FX上检测拖放事件?

时间:2014-04-22 07:17:26

标签: java drag-and-drop javafx-8

从圆圈中拖动时,我想要一些Circle个对象加入Line

我开始使用此代码来测试存在并结束拖放坐标:

Circle nodo = new Circle(15.0);
nodo.setOnDragDetected(new EventHandler<MouseEvent>() {

    @Override
    public void handle(MouseEvent event) {
        coordenadas[0] = event.getX();
        coordenadas[1] = event.getY();
    }
});

nodo.setOnDragDropped(new EventHandler<DragEvent>() {

    @Override
    public void handle(DragEvent event) {
        coordenadas[2] = event.getX();
        coordenadas[3] = event.getY();
        System.out.println(coordenadas);
    }
});

当我尝试拖动Circle时,当我放下鼠标时,没有任何内容被打印到控制台。什么是正确的方法,我应该如何在拖动上绘制Line

1 个答案:

答案 0 :(得分:2)

要检测拖放,请遵循以下方法:

        //
        // ON MOUSE PRESSED
        // ----------------------
        nodo.onMousePressedProperty().set(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                event.setDragDetect(true);
                nodo.setEffect(new DropShadow(10.0, Color.BLACK));
            }
        });

        //
        // ON MOUSE DRAGGED
        // ----------------------
        nodo.onMouseDraggedProperty().set(new EventHandler<MouseEvent>() {
            @Override
            public void handle(MouseEvent event) {
                nodo.setEffect(new DropShadow(10.0, Color.BLUEVIOLET));

                /*
                final Circle indicator = new Circle(3);
                indicator.setStroke(Color.BLUEVIOLET);
                indicator.setCenterX(x);
                indicator.setCenterY(y);
                */

            }
        });

根据需要更改评论部分。在您的情况下,保存初始事件坐标(X,Y),并在“拖动”部分中,将它们用作行的初始坐标。