ps:有点标题党了(划掉)
完成结果图:
收藏夹下边有子目录,显示的是网页标题,但后台也可以提取出相应的网址来。
数据库是这样的:
通过遍历循环,如果某条数据的collect_name存在于主目录下,就把他加到里面,不存在的话,就新建一个。
关键点在于,treeItem的格式,是新建了一个类,叫webPage,里边的属性有网页标题、网址和所属的收藏夹名称。
treeView的根目录和子目录的属性好像得一样,要不然添加不了,所以全部的条目属性都设置为webPage。就像这样:
TreeItem<webPage> empLeaf = new TreeItem<webPage>(wp);
但是子目录显示的是标题,主目录显示的是收藏夹名称,但重载的toString()只有一个,咋整呢?
(题外话:如果您希望自定义TreeItem的显示文本,可以覆盖自定义类的toString()方法,根据自己的需求生成所需的显示文本。
就像这样:
public class webPage {
public String webPageName;
public String webPageurl;
public String webPageCollection;
public webPage(String webPageName, String webPageurl,String webPageCollection) {
setWebPageName(webPageName);
setWebPageurl(webPageurl);
setWebPageCollection(webPageCollection);
}
//这里可以自定义treeView条目的显示内容
@Override
public String toString() {
return webPageName;
}
}
解决方法就是!在将新的收藏夹加入到目录前,先定义一个webPage实例,但是注意,在传参时第一个传入的值不是网页标题,而是收藏夹名称,然后将实例搞到treeItem中,这样treeItem显示出来的虽然还是“ webPageName”,但内容已经变成了收藏夹名称。
//如果不存在收藏夹名称时,新建一个
if (!found) {
//先定义一个webPage实例,但是注意,在传参时第一个传入的值不是网页标题,而是收藏夹名称
webPage wp2 = new webPage(employee.getCollectNameProperty(),employee.getWebUrlProperty(),employee.getCollectNameProperty());
TreeItem<webPage> depNode = new TreeItem<webPage>(wp2);
rootNode.getChildren().add(depNode);
depNode.getChildren().add(empLeaf);
}
总代码如下:
TreeItem<webPage> rootNode = new TreeItem<webPage>();
@Override
public void initialize(URL location, ResourceBundle resources) {
treeView.getStylesheets().add("/css/treeViewCss.css");
rootNode.setExpanded(true);
//要变成treeView的实体
CollectionService collectionService = SpringContextUtil.getBean(CollectionService.class);
List<CollectionPojo> list = collectionService.findAll();
ObservableList<CollectionPojo> observableList = FXCollections.observableList(list);
rootNode.setExpanded(true);
//循环
for (CollectionPojo employee : list) {
webPage wp = new webPage(employee.getWebTitleProperty(),employee.getWebUrlProperty(),employee.getCollectNameProperty());
TreeItem<webPage> empLeaf = new TreeItem<webPage>(wp);
boolean found = false;
for (TreeItem<webPage> depNode : rootNode.getChildren()) {
if (depNode.getValue().getWebPageCollection().contentEquals(employee.getCollectNameProperty())){
depNode.getChildren().add(empLeaf);
found = true;
break;
}
}
//如果不存在收藏夹名称时,新建一个
if (!found) {
//先定义一个webPage实例,但是注意,在传参时第一个传入的值不是网页标题,而是收藏夹名称
webPage wp2 = new webPage(employee.getCollectNameProperty(),employee.getWebUrlProperty(),employee.getCollectNameProperty());
TreeItem<webPage> depNode = new TreeItem<webPage>(wp2);
rootNode.getChildren().add(depNode);
depNode.getChildren().add(empLeaf);
}
}
treeView.setRoot(rootNode);
}
然后是webPage类
package com.wang.learninglogapp.utils;
import lombok.Data;
/**
* @version 1.0
* @Author 小爷很帅
* @Date 2023/7/19 10:48
* @注释
*/
@Data
public class webPage {
public String webPageName;
public String webPageurl;
public String webPageCollection;
public webPage(String webPageName, String webPageurl,String webPageCollection) {
setWebPageName(webPageName);
setWebPageurl(webPageurl);
setWebPageCollection(webPageCollection);
}
//这里可以自定义treeView条目的显示内容
@Override
public String toString() {
return webPageName;
}
}