JavaFX学习之简单浏览器页签功能实现

今天学习之前做个前情回顾,前面几篇文章首先介绍如何用Netbeans创建JavaFX项目及利用JavaFX Scene Builder进行简单场景搭建;再介绍组件使用,组件事件绑定和组件绑定;接着确定了学习JavaFX要输出的学习成果,即编写一个简单浏览器。

学习到上一篇文章时我们已经实现了浏览器的简单功能,包括页面加载、前进、后退、刷新及主页等。然而作为一个浏览器,多标签页是必不可少的,当页面中链接target为blank时需要在新的标签页中打开该链接。今天就着重介绍该功能的实现。

前面已经把第一个标签页直接在场景中搭建好了,而浏览器的每个标签页中包含的组件是一样的,所以我们需要独立一个创建该标签页的类。按照这个思路,我们先写一个自己的Tab类MyTab并从Tab继承。MyTab中需要实现之前场景中的组件添加及对应组件的事件绑定,我们将这些初始化操作都放到构造函数中,先来看下MyTab的构造函数如下图所示:

前面的学习中我们知道了场景中的组件存在层次关系,上层的组件会遮住下层组件。利用这点我们就可以实现书签栏的显示与隐藏。

具体实现思路:在菜单中添加一个CheckMenuItem,默认未选中即默认隐藏书签栏。由于浏览器多标签,如果用户选择显示书签栏那么新打开的标签页也需要显示书签栏,所以我们定义一个静态全局变量currentWebViewTop来保存当前webview的AnchorPane.topAnchor值,新打开的标签页直接取这个值即可。同时需要为菜单显示书签栏提供一个方法,具体代码片段如下图所示:

点击页面中的链接时,需要判断是否需要在新标签页中打开该链接,所以我们需要监听页面加载事件。当页面加载完成时我们获取页面中所有a标签,如果a标签的target属性设置了blank则在新标签中打开。具体监听代码如下图所示:

到此今天的学习任务已经完成了,所有源码已提交到:https://github.com/ajtdnyy/JavaFXDemo  有兴趣的同学可以看看,有什么不懂的可以查看下作者之前的文章,都有详细介绍。学Java的同学想写些小工具用JavaFX来写还是很不错的。再来看下运行效果图:

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据