2013-02-21 186 views
2
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<ActionEvent> goAction = new EventHandler<ActionEvent>() { 
       @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<String>() { 
       @Override public void changed(ObservableValue<? extends String> 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<Node> 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 < 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); 
      } 
     } 
    } 
} 

這是我的代碼。有人可以幫助我添加一個「停止」按鈕來停止加載頁面,添加選項卡加載多個頁面並安裝Adobe Flash Player到我的瀏覽器,以便我可以訪問Youtube(www.youtube.com)。JavaFX WebView瀏覽器

感謝幫助我。

我正在使用Netbeans。當我運行我的應用程序時,這是結果。

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 <fx:jar> task from C:\Program Files\Java\jdk1.7.0_09\lib\ant-javafx.jar 
Launching <fx:deploy> 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 

有人可以告訴我爲什麼?

+0

我建議將您的問題分解成未來的多個單獨問題。 – jewelsea 2013-02-21 22:46:25

回答

5

添加標籤加載多個網頁

willow browser是一個標籤式的JavaFX瀏覽器示例項目 - 審查,看不出這可能來完成。

添加一個「停止」按鈕停止加載網頁,

你可以嘗試在一個按鈕的操作處理程序執行webView.getEngine().getLoadWorker().cancel();。我不確定WebEngine是否會尊重取消請求。

安裝Adobe Flash Player到我的瀏覽器

你不能 - 的WebView不支持插件,如Flash。

訪問的Youtube

使用YouTube的HTML5兼容的視頻播放界面,而不是它的基於閃存的界面。

我創建了一些sample code to play YouTube Videos in a WebView

警告:檢測到驅動程序版本不正確,設備被禁用。請至少更新您的驅動程序版本8.15.10.2302

您的顯示驅動程序已過期,並且不符合使用JavaFX的最低要求 - 您應該將其更新爲新版本。

+0

感謝幫助我。 – 2013-02-22 00:21:50

+0

另一個問題。幾天前,Youtube在我的網絡瀏覽器上工作... – 2013-02-22 00:36:10

+0

嗨Jewelsea,你可以請張貼一些與「柳樹瀏覽器」實現相關的示例應用程序代碼。非常感謝。 – Channa 2015-07-02 10:32:12