一、收藏功能

这个比较简单,添加一个按钮,点击后获得当前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是对应的,只是内容没加载完成而已

三、不感兴趣

同收藏功能

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐