JavaFX - setDragView во время операции перетаскивания - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь перетащить пользовательский Node (на самом деле Shape, называемый Box) из одного Pane в другой.Когда я начинаю перетаскивание начального Pane (откуда можно перетащить Box), я устанавливаю dragView в качестве снимка Box.Но мой второй Pane состоит из нескольких Box, которые не должны сталкиваться друг с другом.Поэтому всякий раз, когда обнаруживается столкновение юнитов, я хочу, чтобы WriteableImage из dragView был изменен (указывая, что он не может быть там размещен).

В соответствии с документацией, в которой говорится:

public void setDragView (Image image)

Устанавливает визуальное представление данных, передаваемых в жесте перетаскивания.Этот метод следует вызывать только при запуске операции перетаскивания в обработчике DRAG_DETECTED, вызов его в другое время не имеет никакого эффекта.

Так нет ли возможности выполнить то, что я хочу?Что еще я мог бы сделать, чтобы имитировать его хотя бы?

Вот мои MouseListener s:

boxStackPane - это первый Pane, источник Box.mapPane является целью Pane, где необходимо проверить столкновение юнитов.Как я могу изменить изображение, установленное в setOnDragDetected событии boxStackPane?

    this.boxStackPane.setOnDragDetected(e -> {          
        SnapshotParameters snapshotParameters = new SnapshotParameters();
        snapshotParameters.setFill(Color.TRANSPARENT);

        Dragboard dragboard = this.boxStackPane.startDragAndDrop(TransferMode.MOVE);
        dragboard.setDragView(new Box().getNode().snapshot(snapshotParameters, null));

        ClipboardContent clipboardContent = new ClipboardContent();
        clipboardContent.put(this.dataFormatDragBox, "");

        dragboard.setContent(clipboardContent);

        e.consume();
    });

    this.mapPane.setOnDragOver(e -> {
        Dragboard dragboard = e.getDragboard();
        if (dragboard.hasContent(this.dataFormatDragBox)) {
            e.acceptTransferModes(TransferMode.MOVE);
        }

        e.consume();
    });

    this.mapPane.setOnDragDropped(e -> {
        Dragboard dragboard = e.getDragboard();
        if (dragboard.hasContent(this.dataFormatDragBox)) {
            this.layerContainer.addBox(new Box(), 0, 0);
        }

        e.consume();
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...