У меня есть цикл 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
.
Спасибо!