JavaFX学习之Web
PopupFeatures 处理新窗口
WebHistory
网页一般都带有历史记录的功能,可以回退,也可以前进,fx用WebHistory处理。
- final WebHistory wh = webEngine.getHistory(); //获取webhistory
- go(int offset) //跳到相对应的页,一般-1是后退,1是前进
- getCurrentIndex() //获取当前页索引,开始页索引为0,点击进入下一页此时为1。
WebView WebEngin
WebView作为一个node用于显示网页内容
- WebView webView = new WebView();
WebEngine用于对网页的操作,通过webView获取web引擎
- WebEngine webEngine = webView.getEngine();
WebEngine的一些方法
- webEngine.load(java.lang.String url); //加载一个网页
- webEngine.executeScript(java.lang.String script) //执行网页中的脚本语言
看个demo
- 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方法
- 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...");
- }
- }
此时在页面可以调用
- <a href="about:blank" onclick="app.exit()">Exit the Application</a>
在网页上右键点击的时候,可以选择在新窗口打开,此时你必须自己设定。
- 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的状态属性。
- webEngine.getLoadWorker().stateProperty().addListener(
- new ChangeListener<State>() {
- @Override
- public void changed(ObservableValue<? extends State> ov,
- State oldState, State newState) {
- if (newState == State.SUCCEEDED) {
- //添加节点,或者把app注入到网页脚本当中
- }
- }
- }
- );
看个demo:
- 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);
- // process page loading
- 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
JavaFX学习之Web的更多相关文章
- 零基础如何系统学习Java Web
零基础如何系统学习Java Web? 我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...
- 疯狂学习java web
因工作需要,疯狂学习java web,只是这么多年一直从事C++开发,突然之间要接手同事的那么一大堆代码,真有无从下手的感觉,首先是要学习html,然后是js, 然后是jsp,当然还有各种框架,想想就 ...
- 菜鸟学习Spring Web MVC之一
---恢复内容开始--- 当当当!!沉寂两日,学习Spring Web MVC去了.吐槽:近日跟同行探讨了下,前端攻城师,左肩担着设计师绘图,右肩担着JAVA代码?!我虽设计过UI,但这只算是PS技巧 ...
- JavaFX学习之道:JavaFX之TableView
TableView表 TableColumn列 构建一个表主要有TableView,TableColumn,ObservableList,Bean. 加入列table.getColumns ...
- 零基础学习Python web开发、Python爬虫、Python数据分析,从基础到项目实战!
随着大数据和人工智能的发展,目前Python语言的上升趋势比较明显,而且由于Python语言简单易学,所以不少初学者往往也会选择Python作为入门语言. Python语言目前是IT行业内应用最为广泛 ...
- 学习Java Web开发
学习DreamWaveMX中文版的网页设计技术 HTML网页设计,这是最基本的.学习XML的一些基本知识.初步掌握一些JSCRIPT的应用. 学习JAVA语言. 这应该分成2次来进行: 第1次找一本国 ...
- Servlet的学习之web路径问题
在这个篇章中,我们来学习下在web开发过程中会碰到的路径写法问题. 在之前的web应用开发,尤其是Servlet的学习过程中,我们碰到多次要写路径的问题,这些路径并不统一,因此这里将大致说明下各个方法 ...
- JavaFX学习之路:详细解释JavaFX架构和框架
JavaFX 2.0平台是基于Java技术的富client平台.它使应用程序开发人员更加easy的开发和部署跨平台的富互联网应用(RIA).JavaFX 2.0文档包括了JavaFX 2.0所提供的功 ...
- [WebView五学习]:调试Web Apps
上一篇我们学习了([WebView学习之四]:迁移到Android4.4版本号的WebView),今天我们来继续学习. (博客地址:http://blog.csdn.net/developer_jia ...
随机推荐
- C#开发微信公众平台开发-微信海报介绍和开发流程
“让客户发展客户”,微信海报才是微信公众平台最高明的吸粉手段,海报上有粉丝的专属二维码,有粉丝的头像及商户宣传的广告等.新粉丝扫描这个专属二维码会关注公众号,同时分享海报的粉丝会增加积分换取礼品或者优 ...
- 136.Single Number---异或、位运算
题目链接 题目大意:给出一串数组,里面的数都是两个,只有一个数是一个,把这个只有一个的数找出来.时间复杂度最好是线性的,空间复杂度最好为O(1). 法一:利用map,空间换时间,代码如下(耗时26ms ...
- 2017 ACM ICPC Asia Regional - Daejeon
2017 ACM ICPC Asia Regional - Daejeon Problem A Broadcast Stations 题目描述:给出一棵树,每一个点有一个辐射距离\(p_i\)(待确定 ...
- xshell连接Ubuntu虚拟机
Ubuntu系统 1,安装ssh sudo apt-get install openssh-server 2,启动ssh进程 /etc/init.d/ssh start 3,查看进程信息 ps -e ...
- python3.6升级及setuptools、pip安装
升级python3.6 1.打开官网www.python.org,找到最新3.6.3版本,复制下载链接 2.创建/app目录,wget下载到该目录下,编译安装 mkdir /app cd /app w ...
- Homestead在windows7 下的搭建
遇到的问题有 1.Homestead 的版本问题,教程git版本是 v5,最新是v7的,如果用最新,就要求vagrant的版本是 2.0的: 2.启动homestead后,出现 No input fi ...
- ASP .NET CORE MVC 部署Windows 系统上 IIS具体步骤---.Net Core 部署到 IIS位系统中的步骤
一.IIS 配置 启用 Web 服务器 (IIS) 角色并建立角色服务. 1.Windows Ddesktop 桌面操作系统(win7及更高版本) 导航到“控制面板” > “程序” > “ ...
- tomcat打开gzip、配置utf-8
在部署描述文件中配置如下内容:(web.xml) 打开gzip compression="on"配置utf-8 URIEncoding="UTF-8" < ...
- Erasure Coding(纠删码)深入分析 转
1.前言 Swift升级到2.0大版本后宣称开始支持纠删码,这其实是一个很有意义的特性,主要是能够在一定程度上解决3副本空间浪费太多的问题.因为3副本这一点是swift推广的最大障碍之一,成本的增加吓 ...
- Effective STL 阅读笔记: Item 4 ~ 5: Call empty instead of checking size() against zero.
Table of Contents 1 Item 4: Call empty instead of checking size() against zero 2 Item 5: Prefer rang ...