gpt4 book ai didi

网格 Pane 上的 JavaFX 拖放事件

转载 作者:行者123 更新时间:2023-12-02 03:25:19 27 4
gpt4 key购买 nike

我尝试在网格 Pane 中执行拖放事件,但没有成功。检测到拖动,但未检测到拖动事件或放置事件。我做错了什么?

这是我尝试过的代码:

public class FXMLDocumentController implements Initializable {

@FXML
private GridPane grid;

@Override
public void initialize(URL url, ResourceBundle rb) {
StackPane sourcePane = new StackPane(new Text("Source"));
StackPane targetPane = new StackPane(new Text("Target"));

sourcePane.setOnDragDetected(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
sourcePane.startDragAndDrop(TransferMode.ANY);
System.out.println("Drag detected");
event.consume();
}
});


targetPane.setOnDragOver(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
event.acceptTransferModes(TransferMode.ANY);
System.out.println("Drag over detected");
event.consume();
}
});

targetPane.setOnDragDropped(new EventHandler<DragEvent>() {
@Override
public void handle(DragEvent event) {
event.acceptTransferModes(TransferMode.ANY);
System.out.println("Drop detected");
event.consume();
}
});

grid.add(sourcePane, 1, 1);
grid.add(targetPane, 0, 1);
}
}

最佳答案

您需要在startDragAndDrop()之后添加一些内容,例如。 :

    sourcePane.setOnDragDetected(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
Dragboard db = sourcePane.startDragAndDrop(TransferMode.ANY);
ClipboardContent content = new ClipboardContent();
content.putString("Hello!");
db.setContent(content);
System.out.println("Drag detected");
event.consume();
}
});

请参阅 Oracle 关于 DragEvent 的页面:
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/input/DragEvent.html

关于网格 Pane 上的 JavaFX 拖放事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32006313/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com