JavaFx | Buscar y resaltar texto | Agregar barra de búsqueda para la página web cargada

Usé el ejemplo SimpleSwingBrowser ( http://docs.oracle.com/javafx/2/swing/SimpleSwingBrowser.java.htm ) y agregué un código propio para el seguimiento de registros.

Quería agregarle una barra de búsqueda (Buscar y resaltar texto).

Después de buscar en Google durante horas y autoexperimentos, no encontré la manera de hacerlo. ¿Puede alguien darme una dirección de inicio para escribir tal habilidad?

    Sugerencias para una solución basada en JavaScript

    Utilice una biblioteca de resaltado de JavaScript existente como jQuery highlight o hilitor.js .

    Sugerencias para una solución basada en Java

    Utilice la API DOM w3c de Java para realizar operaciones en el objeto del documento WebEngine una vez que se haya cargado el documento.

    Para obtener una API de búsqueda en la implementación central JavaFX WebView

    Creé la función de solicitud RT-23383 de búsqueda de texto para WebView . La solicitud de función está actualmente abierta y no activada: puede crear una cuenta en el rastreador de problemas y votar o comentar la solicitud de función.

    Muestra

    Esta muestra usa jQuery highlight. El usuario escribe la palabra que se resaltará en el campo de texto, luego presiona el botón resaltado para resaltar todas las apariciones de la palabra en la página o para quitar el botón resaltado para borrar todos los resaltados marcados. Puede modificar la muestra para permitir búsquedas adicionales basadas en jQuery para desplazarse a una palabra siguiente y resaltada anteriormente.

    Traté de que funcionara con cualquier página web arbitraria, pero esa lógica me derrotó. Si controla el origen de la página que desea buscar y puede agregar la referencia al complemento jQuery highlight y su clase de estilo a su página, algo así como este progtwig de ejemplo podría ser una opción.

    realce

    import javafx.application.Application; import javafx.event.*; import javafx.scene.Scene; import javafx.scene.control.*; import javafx.scene.layout.*; import javafx.scene.web.*; import javafx.stage.Stage; public class WebViewSearch extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { final WebView webView = new WebView(); final WebEngine engine = webView.getEngine(); engine.load("http://johannburkard.de/blog/programming/javascript/highlight-javascript-text-higlighting-jquery-plugin.html"); final TextField searchField = new TextField("light"); searchField.setPromptText("Enter the text you would like to highlight and press ENTER to highlight"); searchField.setOnAction(new EventHandler() { @Override public void handle(ActionEvent actionEvent) { if (engine.getDocument() != null) { highlight( engine, searchField.getText() ); } } }); final Button highlightButton = new Button("Highlight"); highlightButton.setDefaultButton(true); highlightButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent actionEvent) { searchField.fireEvent(new ActionEvent()); } }); final Button removeHighlightButton = new Button("Remove Highlight"); removeHighlightButton.setOnAction(new EventHandler() { @Override public void handle(ActionEvent actionEvent) { removeHighlight( engine ); } }); removeHighlightButton.setCancelButton(true); HBox controls = new HBox(10); controls.getChildren().setAll( highlightButton, removeHighlightButton ); VBox layout = new VBox(10); layout.getChildren().setAll(searchField, controls, webView); searchField.setMinHeight(Control.USE_PREF_SIZE); controls.setMinHeight(Control.USE_PREF_SIZE); controls.disableProperty().bind(webView.getEngine().getLoadWorker().runningProperty()); searchField.disableProperty().bind(webView.getEngine().getLoadWorker().runningProperty()); primaryStage.setScene(new Scene(layout)); primaryStage.show(); webView.requestFocus(); } private void highlight(WebEngine engine, String text) { engine.executeScript("$('body').removeHighlight().highlight('" + text + "')"); } private void removeHighlight(WebEngine engine) { engine.executeScript("$('body').removeHighlight()"); } }