JavaFX目标拖动事件null

时间:2018-11-29 04:20:39

标签: java javafx drag-and-drop

我有一个用于创建多个矩形形状的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班上。

谢谢!

0 个答案:

没有答案