Przeglądarka w Javie FX

namiekko.pl 7 lat temu

Stanęłam ostatnio wobec następującego problemu: potrzebowałam aplikacji do manualnej klasyfikacji stron internetowych. Chodziło o to, żeby wyświetlić użytkownikowi kolejną stronę z listy i udostępnić przycisk, który pozwoli odpowiednio ją oznaczyć.

Oczywiście Java nie jest najlepszym rozwiązaniem, jakie można tu zaproponować, ale chciałam zrobić to gwałtownie w języku zrozumiałym dla większości zainteresowanych osób. Na Stack Overflow znalazłam kilka wątków pokazujących, jak uruchomić domyślną przeglądarkę internetową w danym systemie, ale po pierwsze przechwycenie danych z niej to wyższa szkoła jazdy, a po drugie chciałam otwierać kolejne strony w tej samej zakładce.

Z pomocą przyszła JavaFX, a dokładniej komponent WebView oparty na otwartym silniku WebKit. W tej wersji uruchomienie przeglądarki i obserwowanie zachowania użytkownika staje się dziecinnie proste. Poniżej całość kodu, który:

  • wyświetla stronę startową
  • wypisuje w konsoli kolejne strony odwiedzane przez użytkownika
import javafx.application.Application; import javafx.concurrent.Worker; import javafx.geometry.Insets; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.VBox; import javafx.scene.web.WebView; import javafx.stage.Stage; /** http://namiekko.pl/2016/08/20/przegladarka-w-javie-fx/ */ public class BrowserApp extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { stage.setTitle("I spy..."); VBox root = new VBox(); root.setPadding(new Insets(5, 5, 5, 5)); Label label = new Label("http://www.namiekko.pl"); root.getChildren().add(label); WebView webview = new WebView(); webview.getEngine().load(label.getText()); webview.setPrefSize(1600, 700); webview.getEngine().getLoadWorker().stateProperty().addListener( (observable, oldValue, newValue) -> { if (newValue == Worker.State.SUCCEEDED) { label.setText(webview.getEngine().getLocation()); System.out.println(label.getText()); } } ); root.getChildren().add(webview); stage.setScene(new Scene(root)); stage.show(); } }

Najważniejsze linie:

  • 13: aplikacja JavaFX
  • 22: tytuł okienka
  • 24: pionowy układ elementów
  • 27: etykieta wyświetlająca aktualny url
  • 30-31: przeglądarka i strona startowa
  • 34-41: obsługa zdarzenia: załadowanie nowej strony (z lambdą!)

Fajne, prawda?

Okno aplikacji z załadowaną stroną startową
Idź do oryginalnego materiału