java - JavaFX 帮助实现拖放
问题描述
我正在做的是为一副卡片中的每张卡片创建一个图像视图。对于每个图像视图,我添加了两个事件 setOnDragOver 和 setOnDragDropped。但是,当我单击并尝试拖动卡片时,我的事件打印声明甚至没有显示。
我想要做的是允许在窗格上拖动卡片。所以根据我拖动它的位置来改变位置,但它仍然在窗口上。以下是下面图像视图的事件。
tempImageView.setOnDragOver(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event)
{
System.out.print("OnDragOver");
Dragboard db = event.getDragboard();
if (db.hasFiles())
{
tempImage = card.getImage();
event.acceptTransferModes(TransferMode.ANY);
}
event.consume();
}
});
这个是拖放的
tempImageView.setOnDragDropped(new EventHandler<DragEvent>()
{
@Override
public void handle(DragEvent event)
{
System.out.print("OnDragDropped");
Dragboard dashboard = event.getDragboard();
if (dashboard.hasFiles())
{
for (File file : dashboard.getFiles())
{
String absolutePath = file.toURI().toString();
Image dashBoardImage = new Image(absolutePath);
ImageView dbImageView = new ImageView();
dbImageView.setFitHeight(screenHeight/19);
dbImageView.setFitWidth(screenWidth*0.0225);
dbImageView.setImage(tempImage);
root.getChildren().add(dbImageView);
//TODO this needs to be changed to place onto pain instead of using set fill
//rectangle.setFill(new ImagePattern(dashBoardImage, 0, 0, 1, 1, true));
root.getChildren().add(dbImageView);
}
event.setDropCompleted(true);
} else {
event.setDropCompleted(false);
}
event.consume();
}
});
解决方案
您需要为 OnDragDetected 事件实现 EventHandler。在此处理程序中,您需要在对象上调用 startDragAndDrop 方法,该对象将被拖动。
tempImageView.setOnDragDetected((event) -> {
Image image;
// Load your image and do other stuff.
tempImageView.startDragAndDrop(TransferMode.ANY).setDragView(image);
});
推荐阅读
- c++ - 如何跟踪递归函数
- python - Jenkins 是实时流式传输管道的正确工具吗?
- python - 初始迁移文件到 virtualenv
- django - Django 表单无效:此字段是必需的
- python-3.x - 使用 Alexa 和 lambda 函数从 Dynamodb 读取数据
- google-chrome - 防止 chrome 重定向到它自己的错误页面?
- javascript - 类型 '(isOpen: boolean) => void' 不可分配给类型 'boolean'。在 reactjs 中使用 Modal 时出错
- python - 在 xlsxwriter 中条件匹配时添加列
- html - 输出产品的样本图像 Shopify
- java - 如何获取客户端的访问方式?