title: JavaFX WebView Browser
body: <pre><code>package webviewbrowser;
  
  import java.util.List;
  import javafx.application.Application;
  import javafx.beans.value.ChangeListener;
  import javafx.beans.value.ObservableValue;
  import javafx.event.ActionEvent;
  import javafx.event.EventHandler;
  import javafx.geometry.HPos;
  import javafx.geometry.Insets;
  import javafx.geometry.VPos;
  import javafx.scene.Node;
  import javafx.scene.Scene;
  import javafx.scene.control.Button;
  import javafx.scene.control.TextField;
  import javafx.scene.layout.ColumnConstraints;
  import javafx.scene.layout.GridPane;
  import javafx.scene.layout.Pane;
  import javafx.scene.layout.Priority;
  import javafx.scene.layout.VBox;
  import javafx.scene.web.WebEngine;
  import javafx.scene.web.WebView;
  import javafx.stage.Stage;
  
  public class WebViewBrowser extends Application {
  
      @Override public void start(Stage primaryStage) throws Exception {
          Pane root = new WebViewPane();
          primaryStage.setScene(new Scene(root, 1024, 768));
          primaryStage.show();
      }
      public static void main(String[] args) {
          launch(args);
      }
  
      /**
       * Create a resizable WebView pane
       */
      public class WebViewPane extends Pane {
  
          public WebViewPane() {
              VBox.setVgrow(this, Priority.ALWAYS);
              setMaxWidth(Double.MAX_VALUE);
              setMaxHeight(Double.MAX_VALUE);
  
              WebView view = new WebView();
              view.setMinSize(500, 400);
              view.setPrefSize(500, 400);
              final WebEngine eng = view.getEngine();
              eng.load("http://www.google.com");
              final TextField locationField = new TextField("http://www.google.com");
              locationField.setMaxHeight(Double.MAX_VALUE);
              Button goButton = new Button("Go");
              goButton.setDefaultButton(true);
              EventHandler&lt;ActionEvent&gt; goAction = new EventHandler&lt;ActionEvent&gt;() {
                  @Override public void handle(ActionEvent event) {
                      eng.load(locationField.getText().startsWith("http://") ? locationField.getText() :
                              "http://" + locationField.getText());
                  }
              };
              goButton.setOnAction(goAction);
              locationField.setOnAction(goAction);
              eng.locationProperty().addListener(new ChangeListener&lt;String&gt;() {
                  @Override public void changed(ObservableValue&lt;? extends String&gt; observable, String oldValue, String newValue) {
                      locationField.setText(newValue);
                  }
              });
              GridPane grid = new GridPane();
              grid.setVgap(5);
              grid.setHgap(5);
              GridPane.setConstraints(locationField, 0, 0, 1, 1, HPos.CENTER, VPos.CENTER, Priority.ALWAYS, Priority.SOMETIMES);
              GridPane.setConstraints(goButton,1,0);
              GridPane.setConstraints(view, 0, 1, 2, 1, HPos.CENTER, VPos.CENTER, Priority.ALWAYS, Priority.ALWAYS);
              grid.getColumnConstraints().addAll(
                      new ColumnConstraints(100, 100, Double.MAX_VALUE, Priority.ALWAYS, HPos.CENTER, true),
                      new ColumnConstraints(40, 40, 40, Priority.NEVER, HPos.CENTER, true)
              );
              grid.getChildren().addAll(locationField, goButton, view);
              getChildren().add(grid);
          }
  
          @Override protected void layoutChildren() {
              List&lt;Node&gt; managed = getManagedChildren();
              double width = getWidth();
              double height = getHeight();
              double top = getInsets().getTop();
              double right = getInsets().getRight();
              double left = getInsets().getLeft();
              double bottom = getInsets().getBottom();
              for (int i = 0; i &lt; managed.size(); i++) {
                  Node child = managed.get(i);
                  layoutInArea(child, left, top,
                                 width - left - right, height - top - bottom,
                                 0, Insets.EMPTY, true, true, HPos.CENTER, VPos.CENTER);
              }
          }
      }
  }
  </code></pre>
  
  <p>This is my code. Can someone help me to add a "Stop" Button to stop loading page, add tab to load multiple page and install Adobe Flash Player to my browser so that I can access Youtube(www.youtube.com).</p>
  
  <p>Thank for helping me.</p>
  
  <p>My am using Netbeans. When i run my application, this is the result.</p>
  
  <pre><code>ant -f C:\\Users\\user\\Documents\\NetBeansProjects\\WebViewBrowser jfxsa-run
  init:
  Deleting: C:\Users\user\Documents\NetBeansProjects\WebViewBrowser\build\built-jar.properties
  deps-jar:
  Updating property file: C:\Users\user\Documents\NetBeansProjects\WebViewBrowser\build\built-jar.properties
  compile:
  Detected JavaFX Ant API version 1.2
  Launching &lt;fx:jar&gt; task from C:\Program Files\Java\jdk1.7.0_09\lib\ant-javafx.jar
  Launching &lt;fx:deploy&gt; task from C:\Program Files\Java\jdk1.7.0_09\lib\ant-javafx.jar
  jfx-deployment:
  jar:
  run:
  Device "Intel(R) HD Graphics Family" (\\.\DISPLAY1) initialization failed : 
  WARNING: bad driver version detected, device disabled. Please update your driver to at least version 8.15.10.2302 
  </code></pre>
  
  <p>Someone can tell me why?</p>