将文本从浏览器拖到 JavaFX GUI

Drag text from browser into JavaFX GUI

我找不到完全像这样的问题:JavaFX 中是否有办法显示一个 GUI(舞台),它接受用户从浏览器拖放的文本?

例如,用户导航到某个 URL,然后复制页面的所有文本并将其拖到显示的 JavaFX 舞台中。然后可以在 Java 程序中使用该文本。我不想使用 Selenium,这样我的应用程序就不会执行任何类似抓取的活动。

我正在寻找与 Windows XP+ 和所有浏览器兼容的解决方案。

关于起点、教程、帖子或限制的任何反馈都很好。谢谢

您可以尝试这样的操作:

public class MainApp extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        TextField textField = new TextField();
        textField.setPromptText("Drag text here");
        textField.addEventHandler(
                DragEvent.DRAG_OVER,
                event -> {
                    if (event.getDragboard().hasString()) {
                        event.acceptTransferModes(TransferMode.COPY);
                    }
                    event.consume();
                });
        textField.addEventHandler(
                DragEvent.DRAG_DROPPED,
                event -> {
                    Dragboard dragboard = event.getDragboard();
                    if (event.getTransferMode() == TransferMode.COPY && 
                            dragboard.hasString()) {
                        textField.setText(dragboard.getString());
                        event.setDropCompleted(true);
                    }
                    event.consume();
                });
        StackPane stackPane = new StackPane(textField);
        stackPane.setPadding(new Insets(5));
        stage.setScene(new Scene(stackPane, 300, 150));
        stage.setTitle("Drag and Drop");
        stage.show();
    }

    public static void main(String[] args) {
        MainApp.launch(args);
    }

}

获取HTML内容

    TextArea textArea = new TextArea();
        textArea.setPromptText("Drag text here");
        textArea.addEventHandler(
                DragEvent.DRAG_OVER,
                event -> {
                    if (event.getDragboard().hasHtml()) {
                        event.acceptTransferModes(TransferMode.COPY);
                    }
                    event.consume();
                });
        textArea.addEventHandler(
                DragEvent.DRAG_DROPPED,
                event -> {
                    Dragboard dragboard = event.getDragboard();
                    if (event.getTransferMode() == TransferMode.COPY && 
                            dragboard.hasHtml()) {
                        textArea.setText(dragboard.getHtml());
                        event.setDropCompleted(true);
                    }
                    event.consume();
                });