生活随笔
收集整理的這篇文章主要介紹了
JavaFX学习之Web
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
???PopupFeatures?處理新窗口?
???WebHistory?
網頁一般都帶有歷史記錄的功能,可以回退,也可以前進,fx用WebHistory處理。?
Java代碼??
final?WebHistory?wh?=?webEngine.getHistory();???go(int?offset)???getCurrentIndex()??
???WebView?WebEngin?
WebView作為一個node用于顯示網頁內容?
Java代碼??
WebView?webView?=?new?WebView();??
WebEngine用于對網頁的操作,通過webView獲取web引擎?
Java代碼??
WebEngine?webEngine?=?webView.getEngine();?? WebEngine的一些方法?
Java代碼??
webEngine.load(java.lang.String?url);??webEngine.executeScript(java.lang.String?script)??
看個demo?
Java代碼??
public?void?init(Group?root){??????VBox?box?=?new?VBox();??????WebView?webView?=?new?WebView();??????final?WebEngine?webEngine?=?webView.getEngine();??????webEngine.load("http://forums.oracle.com/forums/");??????box.getChildren().add(webView);??????Button?button?=?new?Button("showAll");??????button.setOnAction(new?EventHandler<ActionEvent>()?{????????????????????@Override??????????public?void?handle(ActionEvent?arg0)?{??????????????webEngine.executeScript("showAll()");??????????}??????});??????box.getChildren().add(button);??????root.getChildren().add(box);??}??
這里要注意的是,腳本必須是你網頁中存在的。?
可以在Application中執行網頁中的腳本,那么也可以在網頁腳本中執行Application方法?
Java代碼??
JSObject?win?=?(JSObject)?webEngine.executeScript("window");??獲取js對象??win.setMember("app",?new?JavaApp());?然后把應用程序對象設置成為js對象??private?class?JavaApp?{??????public?void?exit()?{??????????Platform.exit();??????}??????public?void?login(){??????????System.out.println("login...");??????}??}??
此時在頁面可以調用?
Java代碼??
<a?href="about:blank"?οnclick="app.exit()">Exit?the?Application</a>??
在網頁上右鍵點擊的時候,可以選擇在新窗口打開,此時你必須自己設定。?
Java代碼??
setCreatePopupHandler(Callback<PopupFeatures,WebEngine>?handler)???webEngine.setCreatePopupHandler(??????????????new?Callback<PopupFeatures,?WebEngine>()?{??????????????????@Override?public?WebEngine?call(PopupFeatures?config)?{??????????????????????return?newWebView.getEngine();??????????????????}???????????????}???);??
網頁是通過WebView顯示的,所以當你需要一個新窗口時,你必須弄一個新的webView,并為該webview設置好顯示的位置,然后在上面的代碼中獲取該webview的webengine返回。?
發現加載web頁面需要一段時期,此時application的一些節點顯示出來了,若是想讓節點顯示和web一起顯示,則可以監聽webEngine的狀態屬性。?
Java代碼??
webEngine.getLoadWorker().stateProperty().addListener(??????????????new?ChangeListener<State>()?{??????????????????@Override??????????????????public?void?changed(ObservableValue<??extends?State>?ov,??????????????????????State?oldState,?State?newState)?{??????????????????????if?(newState?==?State.SUCCEEDED)?{???????????????????????????????????????????????????}??????????????????????}??????????????????}??????????);??
看個demo:?
Java代碼??
public?void?init(Group?root){??????final?TabPane?tp?=?new?TabPane();??????WebView?webView?=?new?WebView();??????System.out.println(root.getScene());??????webView.prefWidthProperty().bind(root.getScene().widthProperty());??????webView.prefHeightProperty().bind(root.getScene().heightProperty());??????final?WebEngine?webEngine?=?webView.getEngine();??????webEngine.load("http://forums.oracle.com/forums/");??????webEngine.setCreatePopupHandler(new?Callback<PopupFeatures,?WebEngine>()?{????????????????????@Override??????????public?WebEngine?call(PopupFeatures?arg0)?{??????????????WebView?newWebView?=?new?WebView();??????????????WebEngine?newWebEngine?=?newWebView.getEngine();??????????????Tab?tab?=?new?Tab("new?Window");??????????????tab.textProperty().bind(newWebEngine.titleProperty());??????????????tab.setContent(newWebView);??????????????tp.getTabs().add(tab);??????????????return?newWebEngine;??????????}??????});??????final?Tab?tab?=?new?Tab();??????tab.textProperty().bind(webEngine.titleProperty());??????tab.setContent(webView);????????????????webEngine.getLoadWorker().stateProperty().addListener(?????????????new?ChangeListener<State>()?{?????????????????@Override?????????????????public?void?changed(ObservableValue<??extends?State>?ov,?????????????????????State?oldState,?State?newState)?{?????????????????????if?(newState?==?State.SUCCEEDED)?{??????????????????????tp.getTabs().add(tab);?????????????????????????}?????????????????????}?????????????????}?????????);??????root.getChildren().add(tp);??}?? ? ?原文:http://lujin55.iteye.com/blog/1747187
官方文檔:http://docs.oracle.com/javafx/2/api/index.html
轉載于:https://www.cnblogs.com/langtianya/p/3806935.html
總結
以上是生活随笔為你收集整理的JavaFX学习之Web的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。