Browser 将文本从浏览器拖到JavaFXGUI中

Browser 将文本从浏览器拖到JavaFXGUI中,browser,text,javafx,drag-and-drop,stage,Browser,Text,Javafx,Drag And Drop,Stage,我找不到任何与此完全相同的问题:JavaFX中有没有一种方法可以显示一个GUI(stage),它可以接受用户从浏览器拖放的文本 例如,用户导航到某个URL,然后复制页面的所有文本并将其拖动到显示的JavaFX阶段。然后可以在Java程序中使用文本。我宁愿不使用Selenium,这样我的应用程序就不会执行任何类似刮擦的活动 我正在寻找一个与Windows XP+和所有浏览器兼容的解决方案 任何关于起点、教程、帖子或限制的反馈都非常好。谢谢你你可以试试这样的东西: public class Main

我找不到任何与此完全相同的问题:JavaFX中有没有一种方法可以显示一个GUI(stage),它可以接受用户从浏览器拖放的文本

例如,用户导航到某个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();
                });

JavaFX支持从本机源拖放。对不起,你说的本地来源是什么意思?我的JavaFX应用程序最终将成为用户PC上的可执行jar。这是否意味着,如果他们安装了Chrome、IE、Firefox等,它将被视为本机源,因此与jar文件兼容?我现在开始阅读,“本机源代码”是指来自Java虚拟机外部(即来自计算机上运行的其他应用程序)。本机web浏览器(或任何web浏览器)就是一个例子。@JimJim您的JavaFX应用程序可以从任何其他应用程序接收DnD,无论是用户的浏览器、Word、记事本还是其他应用程序。只要实施适当的下降目标,你就可以开始了。事实上,默认文本区域可能会接受DnD,而您无需做任何事情,就像它接受粘贴一样。@JimJim bummer,懒惰的JavaFX实现者。需要考虑的一点是,从UX的观点来看,大块文本的DND是非常繁琐和繁琐的操作,特别是在不同的、可能重叠的窗口之间。剪切和粘贴更简单,如果你想变得有趣,并且你的源代码是浏览器,你可以编写一个书签,通过本地HTTP调用将内容发送到你的应用程序。这看起来很有希望,谢谢你Warren。我一定会测试并报告的。沃伦,效果很好,谢谢!!是否可以轻松地修改此代码,以便如果我将网站的内容拖到字段中,它会提供HTML而不是文本?就像这样,谢谢!我要彻底研究这些。感激