JavaFX 树视图TreeView

JavaFX 树视图TreeView


1、TreeView基础查看

javafx.scene.control.TreeView<T>
javafx.scene.control.TreeItem<T>
w3cschool:JavaFX 树视图
DOC-03-14 树视图(Tree View)

JavaFX视频教程第101课,TreeView的基本使用
JavaFX视频教程第102课,TreeView,TreeItem的几种事件
JavaFX视频教程第103课,TreeView,四种内置TreeCell效果
JavaFX视频教程第104课,TreeView,自定义TreeCell
JavaFX视频教程第105课,TreeView实现节点拖拽效果

2、显示案例

在这里插入图片描述

@FXML
protected void onButtonClick() {
    hBoxArea.getChildren().clear();

    File file = JavaFXTool.openFolderChooser(mStage);
    if (file != null && file.isDirectory()) {
        TreeItem<File> root = createNode(file);
        treeView.setRoot(root);

//            root.addEventHandler(TreeItem.<File>branchExpandedEvent(), event -> {
//                XLog.d("分支展开事件" + event.getTreeItem().getValue().getPath());
//            });
//
//            root.addEventHandler(TreeItem.<File>branchCollapsedEvent(), event -> {
//                XLog.d("分支折叠事件" + event.getTreeItem().getValue().getPath());
//            });
//
//            root.addEventHandler(TreeItem.<File>treeNotificationEvent(), event -> {
//                XLog.d("所有通知事件: EventType=" + event.getEventType() + "; value=" + event.getTreeItem().getValue().getPath());
//            });

        treeView.setCellFactory((Callback<TreeView, TreeCell>) param -> {
            TreeCell<File> treeCell = new TreeCell<File>() {
                @Override
                protected void updateItem(File item, boolean empty) {
                    super.updateItem(item, empty);
                    if (!empty) {
                        this.setText(item.getName());
                        if (item.isFile()) {
                            this.setOnMouseClicked(event -> {
                                if ("md".equals(Util.getExtension(item))) {
                                    XLog.d("setOnMouseClicked: item.getPath()=" + item.getPath());
                                    final String fileText = Util.getFileText(item);
                                    final String text = MdParser.render(MdParser.parse(fileText));
                                    XLog.d("setOnMouseClicked: MdParser =" + text);
                                    Platform.runLater(() -> {
                                        mWebEngine.loadContent(text);
                                    });
                                }
                            });
                        }
                    } else {
                        this.setGraphic(null);
                        this.setText(null);
                    }
                }
            };
            return treeCell;
        });
        hBoxArea.getChildren().add(treeView);
    }
    hBoxArea.getChildren().add(webView);
}

private TreeItem<File> createNode(final File f) {
    return new TreeItem<File>(f) {
        private boolean isLeaf;
        private boolean isFirstTimeChildren = true;
        private boolean isFirstTimeLeaf = true;

        @Override
        public ObservableList<TreeItem<File>> getChildren() {
            if (isFirstTimeChildren) {
                isFirstTimeChildren = false;
                super.getChildren().setAll(buildChildren(this));
            }
            return super.getChildren();
        }

        @Override
        public boolean isLeaf() {
            if (isFirstTimeLeaf) {
                isFirstTimeLeaf = false;
                File f = (File) getValue();
                isLeaf = f.isFile();
            }
            return isLeaf;
        }

        private ObservableList<TreeItem<File>> buildChildren(
                TreeItem<File> TreeItem) {
            File f = TreeItem.getValue();
            if (f == null) {
                return FXCollections.emptyObservableList();
            }
            if (f.isFile()) {
                return FXCollections.emptyObservableList();
            }
            File[] files = f.listFiles();
            if (files != null) {
                ObservableList<TreeItem<File>> children = FXCollections.observableArrayList();
                for (File childFile : files) {
                    children.add(createNode(childFile));
                }
                return children;
            }
            return FXCollections.emptyObservableList();
        }
    };
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xhBruce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值