`

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学习资料总结

    2. Web启动(Web Start):利用Java Web Start技术,用户可以通过浏览器下载并运行JavaFX应用。 3. 模块化系统:JavaFX 9以后版本集成到Java模块系统中,简化了打包和部署流程。 八、JavaFX与Swing集成 JavaFX可以...

    使用Java开发CLI、Desktop(JavaFX)、Web(SpringBoot)项目.zip

    总的来说,这个压缩包资源对于学习和实践全栈Java开发非常有帮助,涵盖了从简单的命令行工具到复杂的Web应用的开发技术,并涉及到优化工具GraalVM。掌握这些知识将使开发者能够灵活应对各种应用场景。

    javafx-sdk-11.0.2

    2. **示例代码**:可能包含`samples`目录,其中提供了使用JavaFX编写的示例应用程序,帮助开发者理解和学习如何使用JavaFX进行开发。 3. **文档**:SDK可能还包括API文档,通常位于`docs`目录下,这对于查阅JavaFX...

    学习JavaFX1.2脚本语言

    JavaFX 1.2是该技术的一个早期版本,提供了许多创新特性,旨在简化桌面和Web应用的开发。 在“学习JavaFX 1.2脚本语言”这个主题中,我们将深入探讨以下几个关键知识点: 1. **JavaFX脚本语言**:JavaFX Script是...

    JavaFX+Jfoenix 学习笔记(一)--环境搭建及多款Hello World演示源码

    JavaFX是Java平台上的一个应用程序框架,用于创建丰富的桌面、移动和Web应用程序。它提供了丰富的图形用户界面(GUI)组件,使得开发者可以构建出交互性强、视觉效果良好的应用。而JFoenix则是一个开源库,它为...

    javafx-11.0.2 jar.rar

    JavaFX是Java平台上的一个强大的富客户端应用开发框架,它为构建桌面、移动和Web应用程序提供了丰富的图形用户界面(GUI)工具集。标题中的"javafx-11.0.2 jar.rar"指的是JavaFX 11.0.2版本的库文件,这些文件被压缩...

    javafx使用指南-目录版.pdf

    3. 网络应用程序:JavaFX 可以用于开发网络应用程序,例如 web 应用程序和 Rich Internet Applications 等。 JavaFX 的主要组件包括: 1. JavaFX SDK:JavaFX 的软件开发套件,提供了 JavaFX 的所有功能和工具。 2...

    JavaFx 官方源码例子

    JavaFX是Java平台上的一个强大的用户界面工具包,用于创建桌面、移动和Web应用程序。它提供了丰富的图形和媒体功能,支持2D和3D渲染、CSS样式以及自定义控件。这个压缩包包含了一些官方提供的JavaFX源码示例,非常...

    JavaFX官方教程(中文版)

    2. **CSS样式和皮肤化**:JavaFX允许使用CSS来样式化和布局控件,这与Web开发中的CSS语法非常相似,降低了学习曲线,同时提高了应用程序的外观一致性。 3. **动态性和响应性**:JavaFX支持数据绑定和反应式编程,...

    javafx-src.zip_javaFx_退火_退火算法

    JavaFX 是一个用于创建桌面应用、移动应用和Web应用的开放源代码图形用户界面(GUI)工具包。它提供了一套丰富的UI控件、2D和3D图形处理能力,以及媒体播放支持,使得开发者可以构建出具有现代感且交互性强的应用...

    javafx-sdk-17.0.2-lts-windows-x64

    使用JavaFX,开发者可以利用CSS样式来定制UI,创建响应式布局,并且可以轻松地集成JavaFX应用程序到Web浏览器中,通过Web Start或HTML5的WebAssembly技术。 在JavaFX 17.0.2中,开发者可以期待更好的模块化支持,这...

    JavaFx电子书HTML格式

    这使得开发者可以像设计Web页面一样,为JavaFX应用定义样式。 6. **响应式编程**: JavaFX支持事件驱动编程,允许程序响应用户的交互,如点击按钮、改变选择等。 7. **2D和3D图形**: JavaFX提供了强大的2D和3D图形...

    javafx-文档.zip

    总之,"javafx-文档.zip"是一个宝贵的资源,对于想要学习和精通JavaFX桌面应用开发的程序员来说,是不可或缺的学习材料。通过深入阅读和实践其中的内容,开发者将能够利用JavaFX的强大功能创建出功能丰富、用户体验...

    JavaFX 基础

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

    学习JavaFX脚本语言--中文PDF版

    3. **CSS样式和皮肤**:JavaFX应用可以使用CSS来定义组件的外观,实现类似Web页面的样式控制。 4. **媒体支持**:内建的媒体API支持音频和视频播放,使得多媒体应用的开发变得简单。 5. **事件处理**:JavaFX提供...

    JavaFX2开发教程

    JavaFX2.0是JavaFX的重大更新,与之前的1.3版本存在许多不...通过学习和掌握JavaFX2.0的开发技巧,你可以创建出具有高度交互性和吸引力的用户界面。无论是初学者还是有经验的开发者,JavaFX2.0都值得深入研究和探索。

    javaFX 学习资料

    此外,JavaFX还支持Web启动(WebStart)和打包为桌面应用程序安装程序。 总之,JavaFX 是一个功能强大的GUI开发平台,尤其适用于那些希望创建富媒体、动画效果丰富的应用程序的开发者。通过学习和掌握JavaFX,...

    JavaFX高级教程:JavaFX2.0的FXML语言(中文版)

    JavaFX 2.0 是一个强大的富互联网应用程序(RIA)平台,用于构建具有美观图形界面的应用程序。在JavaFX 2.0中,FXML(FXML Language...对于希望提升JavaFX应用开发技能的开发者来说,深入学习和掌握FXML是必不可少的。

    JavaFX 1.0的相关资源

    JavaFX是Oracle公司推出的一种用于构建富客户端应用的Java编程框架,主要针对桌面应用程序和Web浏览器插件。它提供了一套丰富的用户界面组件和强大的图形及媒体支持,旨在简化开发复杂的用户界面。JavaFX 1.0是这个...

Global site tag (gtag.js) - Google Analytics