将文本从浏览器拖到JavaFX GUI中

时间:2015-12-08 01:33:12

标签: browser text javafx drag-and-drop stage

我找不到任何完全相同的问题:JavaFX中是否有办法显示一个GUI(阶段),接受用户从浏览器中删除的文本?

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

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

有关起点,教程,帖子或限制的任何反馈都很棒。谢谢

1 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

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();
                });