将文本从浏览器拖到 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();
});
我找不到完全像这样的问题: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();
});