У меня есть цикл 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.
Спасибо!
Просто добавил еще. Дайте мне знать, если этого достаточно.
Я заставил его работать, проверив координаты X, Y, но это определенно хакерское ...




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