JavaFX學習之Web


   PopupFeatures 處理新窗口 
   WebHistory 
網頁一般都帶有歷史記錄的功能,可以回退,也可以前進,fx用WebHistory處理。 

Java代碼    收藏代碼
  1. final WebHistory wh = webEngine.getHistory();   //獲取webhistory  
  2. go(int offset)   //跳到相對應的頁,一般-1是后退,1是前進  
  3. getCurrentIndex()  //獲取當前頁索引,開始頁索引為0,點擊進入下一頁此時為1。  


   WebView WebEngin 
WebView作為一個node用於顯示網頁內容 

Java代碼    收藏代碼
  1. WebView webView = new WebView();  


WebEngine用於對網頁的操作,通過webView獲取web引擎 

Java代碼    收藏代碼
  1. WebEngine webEngine = webView.getEngine();  

WebEngine的一些方法 

Java代碼    收藏代碼
  1. webEngine.load(java.lang.String url);  //加載一個網頁  
  2. webEngine.executeScript(java.lang.String script)  //執行網頁中的腳本語言  


看個demo 

Java代碼    收藏代碼
  1. public void init(Group root){  
  2.     VBox box = new VBox();  
  3.     WebView webView = new WebView();  
  4.     final WebEngine webEngine = webView.getEngine();  
  5.     webEngine.load("http://forums.oracle.com/forums/");  
  6.     box.getChildren().add(webView);  
  7.     Button button = new Button("showAll");  
  8.     button.setOnAction(new EventHandler<ActionEvent>() {  
  9.           
  10.         @Override  
  11.         public void handle(ActionEvent arg0) {  
  12.             webEngine.executeScript("showAll()");  
  13.         }  
  14.     });  
  15.     box.getChildren().add(button);  
  16.     root.getChildren().add(box);  
  17. }  


這里要注意的是,腳本必須是你網頁中存在的。 

可以在Application中執行網頁中的腳本,那么也可以在網頁腳本中執行Application方法 

Java代碼    收藏代碼
  1. JSObject win = (JSObject) webEngine.executeScript("window");  獲取js對象  
  2. win.setMember("app", new JavaApp()); 然后把應用程序對象設置成為js對象  
  3. private class JavaApp {  
  4.     public void exit() {  
  5.         Platform.exit();  
  6.     }  
  7.     public void login(){  
  8.         System.out.println("login...");  
  9.     }  
  10. }  


此時在頁面可以調用 

Java代碼    收藏代碼
  1. <a href="about:blank" onclick="app.exit()">Exit the Application</a>  



在網頁上右鍵點擊的時候,可以選擇在新窗口打開,此時你必須自己設定。 

Java代碼    收藏代碼
  1. setCreatePopupHandler(Callback<PopupFeatures,WebEngine> handler)  //處理彈出窗口。  
  2.  webEngine.setCreatePopupHandler(  
  3.             new Callback<PopupFeatures, WebEngine>() {  
  4.                 @Override public WebEngine call(PopupFeatures config) {  
  5.                     return newWebView.getEngine();  
  6.                 }  
  7.              }  
  8.  );  


網頁是通過WebView顯示的,所以當你需要一個新窗口時,你必須弄一個新的webView,並為該webview設置好顯示的位置,然后在上面的代碼中獲取該webview的webengine返回。 

發現加載web頁面需要一段時期,此時application的一些節點顯示出來了,若是想讓節點顯示和web一起顯示,則可以監聽webEngine的狀態屬性。 

Java代碼    收藏代碼
  1. webEngine.getLoadWorker().stateProperty().addListener(  
  2.             new ChangeListener<State>() {  
  3.                 @Override  
  4.                 public void changed(ObservableValue<? extends State> ov,  
  5.                     State oldState, State newState) {  
  6.                     if (newState == State.SUCCEEDED) {  
  7.                          //添加節點,或者把app注入到網頁腳本當中  
  8.                         }  
  9.                     }  
  10.                 }  
  11.         );  


看個demo: 

Java代碼    收藏代碼
  1. public void init(Group root){  
  2.     final TabPane tp = new TabPane();  
  3.     WebView webView = new WebView();  
  4.     System.out.println(root.getScene());  
  5.     webView.prefWidthProperty().bind(root.getScene().widthProperty());  
  6.     webView.prefHeightProperty().bind(root.getScene().heightProperty());  
  7.     final WebEngine webEngine = webView.getEngine();  
  8.     webEngine.load("http://forums.oracle.com/forums/");  
  9.     webEngine.setCreatePopupHandler(new Callback<PopupFeatures, WebEngine>() {  
  10.           
  11.         @Override  
  12.         public WebEngine call(PopupFeatures arg0) {  
  13.             WebView newWebView = new WebView();  
  14.             WebEngine newWebEngine = newWebView.getEngine();  
  15.             Tab tab = new Tab("new Window");  
  16.             tab.textProperty().bind(newWebEngine.titleProperty());  
  17.             tab.setContent(newWebView);  
  18.             tp.getTabs().add(tab);  
  19.             return newWebEngine;  
  20.         }  
  21.     });  
  22.     final Tab tab = new Tab();  
  23.     tab.textProperty().bind(webEngine.titleProperty());  
  24.     tab.setContent(webView);  
  25.        // process page loading  
  26.        webEngine.getLoadWorker().stateProperty().addListener(  
  27.            new ChangeListener<State>() {  
  28.                @Override  
  29.                public void changed(ObservableValue<? extends State> ov,  
  30.                    State oldState, State newState) {  
  31.                    if (newState == State.SUCCEEDED) {  
  32.                     tp.getTabs().add(tab);  
  33.                        }  
  34.                    }  
  35.                }  
  36.        );  
  37.     root.getChildren().add(tp);  
  38. }  

   原文:http://lujin55.iteye.com/blog/1747187

官方文檔:http://docs.oracle.com/javafx/2/api/index.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM