Событие перетаскивания цели JavaFX null

У меня есть цикл for, который создает несколько форм прямоугольника, и я добавляю к ним события DragDropped. По какой-то причине, хотя источник сообщает об успешном выполнении (и цвет прямоугольника меняется), когда я иду проверить цель, он отображается как null.

ParkingSpot - это просто класс, который расширяет Rectangle и добавляет новые биты информации, которые мне нужно хранить в них.

Кроме того, TransferMode.COPY установлен на исходном и целевом (ParkingSpot), так что это не должно быть проблемой.

private ParkingSpot createRectangle(double x, double y, double width, double height){
   ParkingSpot vehicleSpot = new ParkingSpot(x, y, width, height);

...

spot.setOnDragDropped(event -> {
   System.out.println("onDragDropped");
   Dragboard db = event.getDragboard();
   boolean success = false;
   if (db.hasString()) {
        spot.setTestinfo(db.getString());
        System.out.println( " added to " + spot.getTestinfo());
        spot.setFill(Color.BLUE);
        success = true;
    }
    event.setDropCompleted(success);
    event.consume();
});
}

В нем spot.setFill(Color.BLUE); работает, а вот spot.getTestinfo() почему-то нет. То же самое происходит со мной, используя spot.getX (), который также работает. Я не понимаю, как он мог установить цвет, но не текст. Мои извинения, если это немного кратко. При необходимости могу добавить.

Обновлено: вот как я создаю прямоугольники:

for (ParkingSpot spot : parkingSpots){
    pane.getChildren().add(createDraggableRectangle(spot.getX(), spot.getY(), spot.getWidth(), spot.getHeight()));
}

Это проходит по списку парковочных мест и добавляет их в список для сохранения и загрузки.

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

listCell.setOnDragDetected(event -> {
     /* drag was detected, start a drag-and-drop gesture*/
     /* allow any transfer mode */
     Dragboard db = listCell.startDragAndDrop(TransferMode.COPY);

     /* Put a string on a dragboard */
     ClipboardContent content = new ClipboardContent();
     content.putString(listCell.getText());
     db.setContent(content);
     System.out.println("Dragging" + content);

     event.consume();
});

Здесь все в моем классе Controller.java.

Спасибо!

Выложите пожалуйста минимальный воспроизводимый пример

c0der 29.11.2018 06:01

Просто добавил еще. Дайте мне знать, если этого достаточно.

Unreliaable 29.11.2018 14:24

Я заставил его работать, проверив координаты X, Y, но это определенно хакерское ...

Unreliaable 29.11.2018 14:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
124
0

Другие вопросы по теме