我正在尝试创建具有↵
个自定义javafx组件的应用程序,这些组件可以拖放。当其中一个组件被拖动并悬停在新位置上时,我想在其新位置下方显示一个剪影(矩形),并相应地移动其他组件以预览容器的新外观。我的拖放功能代码如下:
VBox
当在新元素上拖动时,在//Code for the custom javafx component
setOnDragDetected(e -> {
startFullDrag();
Dragboard db = startDragAndDrop(TransferMode.ANY);
ImageView preview = new ImageView(snapshot(null, null));
ClipboardContent content = new ClipboardContent();
content.putImage(preview.getImage());
db.setContent(content);
db.setDragView(preview.getImage());
e.consume();
});
setOnDragOver(e -> {
Dragboard db = e.getDragboard();
if ((e.getGestureSource() != this) && (!db.hasString()) {
System.out.println("Hi");
e.acceptTransferModes(TransferMode.MOVE);
Rectangle rectangle = new Rectangle();
VBox root = (VBox) getParent();
rectangle.setOnDragExited(e2 -> {
root.getChildren().remove(rectangle);
db.clear();
e.consume();
});
rectangle.setWidth(getWidth() + 1.0);
rectangle.setHeight(getHeight() + 1.0);
int index = root.getChildren().indexOf(this);
root.getChildren().add(index, rectangle);
ClipboardContent content = new ClipboardContent();
content.putString("hover over");
db.setContent(content);
}
e.consume();
});
setOnDragExited(e -> {
e.consume();
});
上添加矩形,并在拖动离开新矩形时将其删除。但这不起作用,因为退出矩形时未清除剪贴板内容,因此悬停效果停止工作。有没有达到这种效果的常规方法?