javaFX实现桌面应用程序内嵌浏览器(二、功能实现)
javaFX实现内嵌浏览器基本功能
·
一、收藏功能
这个比较简单,添加一个按钮,点击后获得当前tab页面中的内容,包括标题和网址,然后插入数据库中即可
//标题
tab.getText()
//网址
WebView view = (WebView) tab.getContent();
WebEngine engine = view.getEngine();
engine.getLocation()
二、历史记录
1、本想着在初始化界面中获得网页内容;或者是,添加一个监听器,在tab的属性发生改变时获取网页,但两种方法取到的值都为空,原因应该是新建了一个tab,但其中的内容还未初始化完成,即网页可能还没加载出来,所以没办法,投机取巧了一下。
2,点击“历史记录”按钮时,会遍历当前的全部tab,循环每一个tab,通过webview的history功能取出该tab界面的网页,并取出网页标题,网址,打开网页的时间,将这三个值插入数据库中
哦呼,问题解决了!
(允许我搁这儿感叹一下,太难了,暴风哭泣,折磨了好几天,做梦都是这玩意儿)
方法:添加两个监听器,一个是在tab属性变化时进行监听(但此时tab中的网页内容为空),另一个是当tab中的内容(我用的是tab的标题)改变时进行监听,后者是嵌入在前者里面的
//tp是tabpane类型的
第一个监听器
tp.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue observable,Object oldValue, Object newValue) {
//第二个监听器
tp.getSelectionModel().getSelectedItem().textProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
Tab tab4 = tp.getSelectionModel().getSelectedItem();
System.out.println("监听打开tab4--" + tab4.getText());
}
});
}
});
为啥不能直接用第二个监听器?因为它只能监听一个tab中的改变,因此要配合使用才更香(划掉)
记录一下过程:
一开始在各种东西上添加监听器,包括selectedItemProperty()、getSelectedItem().textProperty()、tp.getTabs()、getSelectedItem().contentProperty()
要不是得到空值,要不就是只能得到某一个tab里的东西
然后发现,虽然是空值,但通过tab.idProperty发现tab是对应的,只是内容没加载完成而已
三、不感兴趣
同收藏功能
更多推荐
已为社区贡献1条内容
所有评论(0)