import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.Priority;
import javafx.scene.text.Text;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import static javafx.application.Application.launch;

public class WebViewBrowser extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        WebView view = new WebView();
        WebEngine engine = view.getEngine();
        BorderPane root = new BorderPane();
        final TextField agent = new TextField(engine.getUserAgent());
        final TextField url = new TextField("http://oracle.com");
        final Text status = new Text("?");
        final Button go = new Button("Go");

        engine.locationProperty().addListener((ov, old, now) -> url.setText(now));
        engine.setOnError(System.out::println);
        agent.textProperty().bindBidirectional(engine.userAgentProperty());
        engine.setUserAgent("Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0");
        engine.getLoadWorker().stateProperty().addListener((ov, old, now) -> status.setText(now.name()));
        url.setOnAction((e) -> engine.load(url.getText()));        
        go.setOnAction((e) -> engine.load(url.getText()));
        GridPane controls = new GridPane();
        GridPane.setConstraints(url, 0, 0, 1, 1, HPos.LEFT, VPos.BASELINE, Priority.ALWAYS, Priority.NEVER);
        GridPane.setConstraints(go, 1, 0, 1, 1, HPos.LEFT, VPos.BASELINE, Priority.NEVER, Priority.NEVER);
        GridPane.setConstraints(agent, 0, 1, 2, 1, HPos.LEFT, VPos.BASELINE, Priority.NEVER, Priority.NEVER);
        controls.getChildren().addAll(url, go, agent);
        root.setTop(controls);
        root.setCenter(view);
        root.setBottom(status);
        primaryStage.setScene(new Scene(root, 1024, 768));
        primaryStage.show();
    }

    public static void main(String[] args) {
        System.setProperty("java.net.useSystemProxies", "true");
        launch(args);
    }
}
