JavaFX拖动事件未触发

时间:2017-11-22 15:34:55

标签: java user-interface javafx drag-and-drop

我正在尝试创建一个功能,允许用户将文件从应用程序外部(比如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()事件,似乎根本没有。

1 个答案:

答案 0 :(得分:0)

在同事屏幕上进行一些测试之后,这看起来可能是4K显示器上的JavaFX问题。此示例(以及在线发现的其他示例)可在1080p监视器上正常工作,但不能在4K监视器上工作。

我想我必须在1080p中测试此功能,并希望我的用户没有4K屏幕。