我正在尝试创建一个功能,允许用户将文件从应用程序外部(比如Windows资源管理器)拖到JavaFX程序中。我似乎无法解决我的拖拽事件,任何想法?
示例代码......
public class DragTest extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage.setTitle("DragTest");
Group root = new Group();
Scene scene = new Scene(root, 400, 400);
Label label = new Label("Drag files here!");
label.setStyle("-fx-background-color: skyblue;");
label.setPrefWidth(300);
label.setPrefHeight(100);
// On drag enter
label.setOnDragEntered((DragEvent event) -> {
System.out.println("DRAG ENTERED");
if (event.getGestureSource() != label) {
event.acceptTransferModes(TransferMode.ANY);
}
event.consume();
});
// On drag detected
label.setOnDragOver((DragEvent event) -> {
System.out.println("DRAG OVER");
if (event.getGestureSource() != label && event.getDragboard().hasFiles()) {
event.acceptTransferModes(TransferMode.ANY);
}
event.consume();
});
// On drag drop
label.setOnDragDropped((DragEvent event) -> {
System.out.println("DRAG DROP");
Dragboard db = event.getDragboard();
if (db.hasFiles()) {
label.setText(db.getFiles().size() + " files detected!");
} else {
label.setText("No dragged files detected");
}
event.setDropCompleted(true);
event.consume();
});
root.getChildren().add(label);
primaryStage.setScene(scene);
primaryStage.show();
}
}
编辑:捕获onDragEntered()事件,似乎根本没有。
答案 0 :(得分:0)
在同事屏幕上进行一些测试之后,这看起来可能是4K显示器上的JavaFX问题。此示例(以及在线发现的其他示例)可在1080p监视器上正常工作,但不能在4K监视器上工作。
我想我必须在1080p中测试此功能,并希望我的用户没有4K屏幕。