javaFX实现treeview设置额外属性

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;
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//显示任意一个目录的文件到TReeview中 unit uTreeViewDemo; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ComCtrls, StdCtrls, FileCtrl; const  SELDIRHELP = 1000; type  TForm1 = class(TForm)   TreeView1: TTreeView;   Button1: TButton;   procedure Button1Click(Sender: TObject);  private   { Private declarations }  public   procedure GetDirectories(Tree: TTreeView; Directory: string; Item: TTreeNode;              IncludeFiles: Boolean);   { Public declarations }  end; var  Form1: TForm1; implementation {$R *.dfm} procedure TForm1.GetDirectories(Tree: TTreeView; Directory: string; Item: TTreeNode;                 IncludeFiles: Boolean); var  SearchRec: TSearchRec;  ItemTemp: TTreeNode; begin  TreeView1.Items.BeginUpdate;  if Directory[Length(Directory)] '\' then   Directory := Directory + '\';  if FindFirst(Directory + '*.*' , faDirectory, SearchRec) = 0 then  begin   repeat    if (SearchRec.Attr and faDirectory = faDirectory) and (SearchRec.Name[1] '.') then    begin     if (SearchRec.Attr and faDirectory > 0) then     Item := Tree.Items.AddChild(Item, SearchRec.Name);     ItemTemp := Item.Parent;     GetDirectories(Tree, Directory + SearchRec.Name, Item, IncludeFiles);     Item := ItemTemp;    end    else    if IncludeFiles then    if SearchRec.Name[1] '.' then     Tree.Items.AddChild(Item, SearchRec.Name);   until FindNext(SearchRec) 0;   FindClose(SearchRec);   TreeView1.Items.EndUpdate;  end; end; procedure TForm1.Button1Click(Sender: TObject); var  strOpenDir: string; begin  if SelectDirectory(strOpenDir, [sdAllowCreate, sdPerformCreate, sdPrompt],SELDIRHELP) then  try   GetDirectories(TreeView1, strOpenDir, nil, True);  except   ShowMessage('错误信息');  end; end; end.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值