Lang, lang ist es her, seit dem ich den letzten Blogbeitrag gepostet habe. Sehr viel Zeit hat mich das Masterstudium in der Klausurenphase gekostet und ein privates Projekt, was ich demnächst hier vorstellen werde.
Zurück zum Thema – heute geht es um die WebView Komponente in JavaFX. Mit dieser Komponente kann man Webseiten in einer JavaFX Anwendung anzeigen. Dabei spielt es keine Rolle, ob die Webseite von einem Webserver oder lokal aus einem Jar geladen wird. Des Weiteren kann man bidirektional zwischen Java und Javascript kommunizieren und interagieren.
Der eigentliche Aufruf besteht aus 4 Zeilen.
WebView webView = new WebView(); WebEngine webEngine = webView.getEngine(); webEngine.setJavaScriptEnabled(true); webEngine.load("http://blog.axxg.de");
Theoretisch kann man auch Webseiten lokal aufrufen:
// index.html ist im gleichen Verzeichnis wie die Klasse URL url = getClass().getResource("index.html"); webEngine.load(url.toExternalForm());
Jedoch funktioniert das nur bediengt! Alle relativ referenzierten Ressourcen, wie Bilder, *.js oder *.css Dateien, werden nicht mitgeladen. Der Pfad muss IMMER absolut angegebenen werden:-(
webEngine.loadContent("<img src='" + getClass().getResource("logo.jpg") + "' />");
JavaFX 2.2 unterstützt eine viel Zahl von HTML5 Elementen:
package de.axxg.web; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; public class Start extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { // +++++++++++++++++++++++++++++++++++++++++++++ // Center // +++++++++++++++++++++++++++++++++++++++++++++ WebView webView = new WebView(); WebEngine webEngine = webView.getEngine(); webEngine.setJavaScriptEnabled(true); webEngine.load("http://blog.axxg.de"); // Szene Scene scene = new Scene(webView); // +++++++++++++++++++++++++++++++++++++++++++++ // Stage konfigurieren // +++++++++++++++++++++++++++++++++++++++++++++ // miniicon setzen primaryStage.getIcons().add( new Image(Start.class.getResourceAsStream("logo.jpg"))); // Titel setzen primaryStage.setTitle("AxxG - WebView Beispiel"); // Stage anzeigen primaryStage.setScene(scene); primaryStage.show(); } }
Für Faule gibt es hier ein fertiges Projekt…
Copyright © 2013 AxxG – Alexander Gräsel
Ich versuche gerade in ein bestehendes Java Projekt eine Webseite einzubinden, genauer gesagt openStreetMap oder GoogleMaps, aber es scheitert schon beim erstellen der WebView, da sich diese nicht importieren lässt. Gibt es da etwas zu beachten oder ein Tipp wie ich das umsetzen kann?