PopupFeatures 处理新窗口 
   WebHistory 
网页一般都带有历史记录的功能,可以回退,也可以前进,fx用WebHistory处理。

  1. final WebHistory wh = webEngine.getHistory();   //获取webhistory
  2. go(int offset)   //跳到相对应的页,一般-1是后退,1是前进
  3. getCurrentIndex()  //获取当前页索引,开始页索引为0,点击进入下一页此时为1。

WebView WebEngin 
WebView作为一个node用于显示网页内容

  1. WebView webView = new WebView();

WebEngine用于对网页的操作,通过webView获取web引擎

  1. WebEngine webEngine = webView.getEngine();

WebEngine的一些方法

  1. webEngine.load(java.lang.String url);  //加载一个网页
  2. webEngine.executeScript(java.lang.String script)  //执行网页中的脚本语言

看个demo

  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. @Override
  10. public void handle(ActionEvent arg0) {
  11. webEngine.executeScript("showAll()");
  12. }
  13. });
  14. box.getChildren().add(button);
  15. root.getChildren().add(box);
  16. }

这里要注意的是,脚本必须是你网页中存在的。

可以在Application中执行网页中的脚本,那么也可以在网页脚本中执行Application方法

  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. }

此时在页面可以调用

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

在网页上右键点击的时候,可以选择在新窗口打开,此时你必须自己设定。

  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的状态属性。

  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:

  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. @Override
  11. public WebEngine call(PopupFeatures arg0) {
  12. WebView newWebView = new WebView();
  13. WebEngine newWebEngine = newWebView.getEngine();
  14. Tab tab = new Tab("new Window");
  15. tab.textProperty().bind(newWebEngine.titleProperty());
  16. tab.setContent(newWebView);
  17. tp.getTabs().add(tab);
  18. return newWebEngine;
  19. }
  20. });
  21. final Tab tab = new Tab();
  22. tab.textProperty().bind(webEngine.titleProperty());
  23. tab.setContent(webView);
  24. // process page loading
  25. webEngine.getLoadWorker().stateProperty().addListener(
  26. new ChangeListener<State>() {
  27. @Override
  28. public void changed(ObservableValue<? extends State> ov,
  29. State oldState, State newState) {
  30. if (newState == State.SUCCEEDED) {
  31. tp.getTabs().add(tab);
  32. }
  33. }
  34. }
  35. );
  36. root.getChildren().add(tp);
  37. }

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

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

JavaFX学习之Web的更多相关文章

  1. 零基础如何系统学习Java Web

    零基础如何系统学习Java Web?   我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...

  2. 疯狂学习java web

    因工作需要,疯狂学习java web,只是这么多年一直从事C++开发,突然之间要接手同事的那么一大堆代码,真有无从下手的感觉,首先是要学习html,然后是js, 然后是jsp,当然还有各种框架,想想就 ...

  3. 菜鸟学习Spring Web MVC之一

    ---恢复内容开始--- 当当当!!沉寂两日,学习Spring Web MVC去了.吐槽:近日跟同行探讨了下,前端攻城师,左肩担着设计师绘图,右肩担着JAVA代码?!我虽设计过UI,但这只算是PS技巧 ...

  4. JavaFX学习之道:JavaFX之TableView

    TableView表     TableColumn列  构建一个表主要有TableView,TableColumn,ObservableList,Bean.  加入列table.getColumns ...

  5. 零基础学习Python web开发、Python爬虫、Python数据分析,从基础到项目实战!

    随着大数据和人工智能的发展,目前Python语言的上升趋势比较明显,而且由于Python语言简单易学,所以不少初学者往往也会选择Python作为入门语言. Python语言目前是IT行业内应用最为广泛 ...

  6. 学习Java Web开发

    学习DreamWaveMX中文版的网页设计技术 HTML网页设计,这是最基本的.学习XML的一些基本知识.初步掌握一些JSCRIPT的应用. 学习JAVA语言. 这应该分成2次来进行: 第1次找一本国 ...

  7. Servlet的学习之web路径问题

    在这个篇章中,我们来学习下在web开发过程中会碰到的路径写法问题. 在之前的web应用开发,尤其是Servlet的学习过程中,我们碰到多次要写路径的问题,这些路径并不统一,因此这里将大致说明下各个方法 ...

  8. JavaFX学习之路:详细解释JavaFX架构和框架

    JavaFX 2.0平台是基于Java技术的富client平台.它使应用程序开发人员更加easy的开发和部署跨平台的富互联网应用(RIA).JavaFX 2.0文档包括了JavaFX 2.0所提供的功 ...

  9. [WebView五学习]:调试Web Apps

    上一篇我们学习了([WebView学习之四]:迁移到Android4.4版本号的WebView),今天我们来继续学习. (博客地址:http://blog.csdn.net/developer_jia ...

随机推荐

  1. 虚拟机NAT网络设置

    1. 虚拟机设置 2. 本地网络设置 3. 本地虚拟网卡设置 4. 安装虚拟机,设置网络为NAT方式即可访问外网.

  2. C#+TaskScheduler(定时任务)实现定时自动下载

    C# /TaskScheduler /定时任务 /定时自动下载 3410 实现原理,客户是广电,在广电服务器创建一个FTP目录,然后每天自动从卫星上自动更新节目列表, 然后功能就是要每天定点一个时间自 ...

  3. PHP中的魔术方法和关键字

    PHP中的魔术方法总结 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep ...

  4. 推荐一个数据相关的网站tushare

    推荐一个网站:tushare 使用方法如下: pip install tushare 我是使用pycharm直接安装的 抓取了浦发和光大的股票数据,并通过csv进行保存,和通过plt进行图片打印 im ...

  5. 以太坊go-ethereum客户端docker安装(二)开发(dev)环境搭建

    在上一篇博客中,讲述了基于docker怎么搭建一个go-ethereum节点.作为开发人员,如果只是单纯的拥有一个Full node,还无法满足正常的开发.比如说,进行转账交易,你要考虑是否拥有一定的 ...

  6. Hadoop案例(二)压缩解压缩

    压缩/解压缩案例 一. 对数据流的压缩和解压缩 CompressionCodec有两个方法可以用于轻松地压缩或解压缩数据.要想对正在被写入一个输出流的数据进行压缩,我们可以使用createOutput ...

  7. 【58沈剑架构系列】细聊分布式ID生成方法

    一.需求缘起 几乎所有的业务系统,都有生成一个记录标识的需求,例如: (1)消息标识:message-id (2)订单标识:order-id (3)帖子标识:tiezi-id 这个记录标识往往就是数据 ...

  8. [loj2116]「HNOI2015」开店 动态点分治

    4012: [HNOI2015]开店 Time Limit: 70 Sec  Memory Limit: 512 MBSubmit: 2452  Solved: 1089[Submit][Status ...

  9. 二十二 使用__slots__

    正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: class Student(object): pa ...

  10. Git 无法拉取,Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n)

    现象 Git 无法拉取,提示: Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) 原 ...