[英]JavaFX Drag&Drop events on Gridpanes
我試圖在網格窗格中執行拖放事件,但它不起作用。 檢測到拖動但是拖動和放下事件都沒有。 我做錯了什么?
這是我試過的代碼:
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();
}
});
請參閱DragEvent上的Oracle頁面:
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/input/DragEvent.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.