[英]JavaFX Help implementing drag and drop
What I am doing is creating an image view for each card in a deck of cards. 我正在做的是为一副纸牌中的每张纸创建一个图像视图。 For each image view, I add two events setOnDragOver and setOnDragDropped. 对于每个图像视图,我添加两个事件setOnDragOver和setOnDragDropped。 However when I click and try to drag a card my print statement for the event doesn't even show. 但是,当我单击并尝试拖动卡片时,我的活动打印声明甚至都不会显示。
What I am trying to do is allow for a card to be dragged on the pane. 我正在尝试做的是允许将卡拖动到窗格上。 So change the position based on where I drag it but it still is on the window. 因此,请根据我拖动的位置更改位置,但该位置仍在窗口中。 Here are the events for the image view below. 以下是以下图像视图的事件。
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();
}
});
and this one is for drag dropped 这是拖曳的
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();
}
});
You need to implement EventHandler for OnDragDetected event. 您需要为OnDragDetected事件实现EventHandler。 In this handler you need to call startDragAndDrop method on object, which will be dragged. 在此处理程序中,您需要对将被拖动的对象调用startDragAndDrop方法。
tempImageView.setOnDragDetected((event) -> {
Image image;
// Load your image and do other stuff.
tempImageView.startDragAndDrop(TransferMode.ANY).setDragView(image);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.