JavaFX:使拖动的节点可见

时间:2014-02-28 09:13:25

标签: drag-and-drop javafx

我想在flowpanes之间拖放节点。我以这种方式实现了拖放:

public class TouchTask extends BorderPane{

setOnDragDetected(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {
            Dragboard dragboard = startDragAndDrop(TransferMode.ANY);

            ClipboardContent clipboardContent = new ClipboardContent();
            clipboardContent.putString(TASK_DRAG_KEY);
            dragboard.setContent(clipboardContent);

            event.consume();
        }
    });
}

拖放工作正常,但问题是,在拖放手势期间节点未移动。我想实现这种拖放操作,以便节点在手势期间与鼠标具有相同的位置。

我试图通过以下方式实现这一点:

onMousePressedProperty().set(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {

            // record the current mouse X and Y position on Node
            mousex = event.getSceneX();
            mousey = event.getSceneY();

            x = getLayoutX();
            y = getLayoutY();

             if (isMoveToFront()) {
                 toFront();
             }
        }
    });

onMouseDraggedProperty().set(new EventHandler<MouseEvent>() {
        @Override
        public void handle(MouseEvent event) {

            // Get the exact moved X and Y

            double offsetX = event.getSceneX() - mousex;
            double offsetY = event.getSceneY() - mousey;

            x += offsetX;
            y += offsetY;

            double scaledX = x;
            double scaledY = y;

            setLayoutX(scaledX);
            setLayoutY(scaledY);

            // again set current Mouse x AND y position
            mousex = event.getSceneX();
            mousey = event.getSceneY();

            event.consume();
        }
    });

但是使用这个解决方案,节点只移动3个像素,然后停止。

0 个答案:

没有答案