• 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

  • 相关阅读:
    C# Stream篇(—) -- Stream基类-----转载
    C# Stream篇(三) -- TextWriter 和 StreamWriter---转载
    C#文件过滤器filter---转载
    微信列表展示与详情页
    关于微信表单添加与图片上传
    登录的php代码 接口开发
    文章列表与点赞的一些功能实现 以及详情页点赞、取消赞操作
    Linux 简单命令总结
    微信小程序实现登录功能 (第一种模式)
    201509-1 数列分段 Java
  • 原文地址:https://www.cnblogs.com/langtianya/p/3806935.html
Copyright © 2020-2023  润新知