`

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);
	}
 

   PromptData
   WebEvent
   HTMLEditor
分享到:
评论

相关推荐

    JavaFX 基础

    JavaFX应用可以无缝地在桌面或者Web浏览器中运行 JavaFX为设备提供多点支持,适用于开发平板或智能手机应 用 JavaFX具有内建的2D、3D和动画支持,以及视频和音频的 回放功能,可以作为一个应用独立运行或者在浏览器中...

    使用javafx2搭建简单客户端嵌入浏览器项目

    有需要使用java开发客户端的,可使用该项目,该项目使用javafx实现用web技术开发客户端,该例子仅供参考学习使用(注:由于javafx已经更新本人并没有去了解新版本的javafx的使用,这个例子只举有参考作用,如果发现...

    JavaFX 9 by Example, 3rd Edition.pdf

    使用JavaFX 9和Java 9平台创建媒体丰富的客户端应用程序。学习如何为移动设备、桌面PC甚至网络创建基于GUI的应用程序.将音频和视频等媒体整合到您的应用程序中。与硬件设备的接口,如Arduino和Leap Motion。响应手势...

    基于javaFx开发的大数据框架集成开发系统,可实现数仓模型设计、sql数据开发、异构数据源数据同步、数据资产管理.zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...

    PDF-Editor-with-JavaFX:使用Java构建简单的PDF编辑器

    带有JavaFX的PDF编辑器在本指南中,您将学习如何在JAVA中构建PDF编辑器。 当我帮助我的爷爷向税务局提交申报单时,我想到了这个主意,而不是每年一次又一次地填写表格,而是用从PDF到DOC的两个字段进行更改。 这可能...

    毕设&课设&项目&实训-JavaFX期末项目-基于JavaFX+Mysql的游戏聊天乐园.zip

    基于STM32、ESP8266、PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#、单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备、LInux、IOS...

    jfxttt:JavaFX项目1

    第一个学习JavaFX 8的个人项目。 Webstart构建 $ javapackager -createjar -appclass net.eseb.jfxttt.Main -srcdir bin -outdir compiled -outfile jfxttt -v -manifestAttrs "Application-Name=JFXTTT,Created-By=...

    基于javafx使用kotlin实现的《坦克大战》.zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...

    体系结构作业3,基于Light x00,Kotlin+JavaFX项目.zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...

    FXGL:Java JavaFX Kotlin游戏库(引擎)

    JavaFX的超集:无需学习新的UI API 现实世界中的游戏开发技术:实体组件,内插动画,粒子 游戏可以轻松打包到单个可执行文件.jar或本机映像中 适用于: 任何2D游戏(侧滚动/平台游戏/街机/ RPG) 任何具有复杂UI...

    使用javafx实现的基于udp、tcp的聊天GUI应用,可用作Java大作业、计网课程设计.zip

    包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】...

    Dex:Dex:数据浏览器-用JavaGroovyJavaFX编写的数据可视化工具,能够强大的ETL和发布Web可视化

    它是在JavaFX之上用Groovy和Java编写的,并且具有以下功能: 从各种来源读取数据,例如文件,程序和各种数据库。 以强大的方式转换数据。 通过SMILE和R集成将强大的机器学习应用于数据。 以50多种不同方式可视...

    java课堂笔记总.docx

    Java课程是一种教授学生如何使用...图形用户界面(GUI): 学习使用图形库(如Swing或JavaFX)创建桌面应用程序的用户界面。 网络编程: 学习如何使用Java编写网络应用程序,包括客户端-服务器通信和Web应用程序开发。

    Java学习指南21 MyBatis框架

    一、课程简介  『Java学习指南系列』的第21篇教程 ,MyBatis 篇...〖Java学习指南系列〗:包含入门与进阶语法,Swing桌面开发,安卓开发,JavaFX开发,网络通信Socket,数据结构与算法等课程。 〖网站开发系列〗:包

    Java在GIS领域学习资料大纲

    Java提供丰富的图形界面工具包,如Swing和JavaFX,使GIS应用程序能够实现直观且用户友好一种跨的界面。这有助于用户更轻松地浏览、查询和分析地理数据,提高用户体验和操作效率。 3. 开发工具和框架支持 Java拥有...

    Superviso-rio-Whatec

    JavaFX:富客户端平台,创建后使已经了解Java技术的开发人员可以在桌面,Web和移动应用程序中创建复杂的图形界面; JPA:高级API(Java技术的标准),用于定义关系对象映射(ORM); Hibernate:JPA提供程序,...

    Java编程简介daniel-liang:Y。Daniel Liang撰写的Java编程简介第10版的解决方案和练习。

    Liang使用JavaFX进行Java GUI编程,这不仅是因为JavaFX对于新的Java程序员来说更容易学习和使用,而且因为它已取代Swing作为新的GUI工具,用于在台式计算机上开发跨平台的Internet应用程序, JavaFX还为讲师提供了...

    JWebdesktop-开源

    它使Java Web开发人员能够编写,打包和交付桌面应用程序,而无需学习任何桌面GUI API(Swing,SWT,JavaFX等)。 任何标准的Java Web应用程序都可以在几分钟之内打包和交付为桌面应用程序(通过JWebDesktop)。 ...

Global site tag (gtag.js) - Google Analytics