考虑到不透明度,我不太确定您是如何获得白色背景的。但是,我重新创建了您的用例,并将向您展示我是如何实现的。
下图是Scene,左侧是AnchorPane,右侧是HBox。透明的小圆圈是要复制的源ImageView,旁边的大圆圈是一个丢弃的Image,最右边是当前正在拖动的圆圈。 (屏幕截图不包括光标。)
如您所见,在这 3 个场景中,没有一个是白色(或几乎是白色)背景。它只是图像本身,图像本身在拖动时更加透明。
为了实现这一点,我们将考虑 2 个变量。源ImageView 和目标HBox。
@FXML
private HBox destination;
@FXML
private ImageView image;
我们希望拖动图像,因此我们将DRAG_DETECTED 事件添加到ImageView。
image.addEventHandler(MouseEvent.DRAG_DETECTED, mouseEvent -> {
Dragboard db = image.startDragAndDrop(TransferMode.COPY);
ClipboardContent content = new ClipboardContent();
content.putImage(image.getImage());
db.setContent(content);
mouseEvent.consume();
});
那么我们希望目的地HBox接受被拖拽的ImageView。
destination.addEventHandler(DragEvent.DRAG_OVER, (DragEvent event) -> {
if (event.getDragboard().hasImage()) {
event.acceptTransferModes(TransferMode.COPY_OR_MOVE);
}
event.consume();
});
当然,我们希望在实际掉落时将ImageView 放入HBox。在这种情况下,它只是将其副本放入HBox,但这当然是开放的。
destination.addEventHandler(DragEvent.DRAG_DROPPED, (DragEvent event) -> {
Dragboard db = event.getDragboard();
destination.getChildren().add(new ImageView(db.getImage()));
event.setDropCompleted(true);
event.consume();
});
这就是拖放图像的全部内容。透明图像不涉及白色背景。但是,如果您能够创建 MCVE,如果它仍然存在,则可能更容易调查您的问题。