我有一个用于创建多个矩形形状的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()));
}
这将遍历ParkingSpot列表,并将它们添加到列表中以进行保存和加载。
这些是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
班上。
谢谢!