首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >自定义组件扩展JavaFX 8 TreeTableView

自定义组件扩展JavaFX 8 TreeTableView
EN

Stack Overflow用户
提问于 2014-05-15 20:59:19
回答 1查看 546关注 0票数 0

我有一个扩展TreeTableView的类MyTreeTableView

通过在我的派生类中传递一个可观察的列表,我实现了一些方法来填充treeview,这在原始TreeTableView中是不可用的。除此之外,没有额外的功能。

我能够使用这个类,并且它在用Java编码时可以正常工作

i.e

代码语言:javascript
运行
复制
MyTreeTableView localtree = new MyTreeTableView(new TreeItem<>());
localtree.setItems(myobservedList);

如果我将这个实例添加到场景中,一切都像标准的TreeTableView一样工作。要将此实例添加到场景中,我必须在Java端执行此操作。

我必须让我的类MyTreeTableView到一个自定义的FXML组件中,这样它就可以使用场景构建器轻松地拖放。

在讨论FXML的自定义组件方面之前,我尝试将localtreetable分配给一个标准的JavaFX8 TreeTableView,它是在FXML中定义的,是现有场景的一部分。

我做了以下工作

代码语言:javascript
运行
复制
localtreetable.getColumns().addAll(col1,col2);
        localtreetable.setShowRoot(false);
        localtreetable.setItems(myobservedList);
        JavaFX8TreeTableView.setRoot(localtreetable.getRoot());
        col1 = (TreeTableColumn<Object, String>) JavaFX8TreeTableView.getColumns().get(0);
        col2 = (TreeTableColumn<Object, String>) JavaFX8TreeTableView.getColumns().get(1);

//setCellValueFactory and CellFactories for col1 and col2 after this.

在这里,col1col2是在FXML中定义的,它们是JavaFX8TreeTableView的列,也是在FXML中定义的。

使用这种技巧,JavaFX8TreeTableView在UI上显示,其中填充了localtreetable对象中的数据。然而,UI不是正确的意图,树状视图被弄乱了。当我说混乱时,树的顺序是正确的,但是>放在树项目的第四个字母上,单击箭头不会展开或关闭树项目,您必须在其他位置单击它才能展开和关闭它。

我的第一个问题是如何将localtreetable中的值转置为JavaFx8TreeTableView,以便可以将值填充到已经定义的TreeTableView中

EN

回答 1

Stack Overflow用户

发布于 2014-06-03 19:52:58

当迁移到Java8时,在填充TreeItem、branchExpand和branchCollapse事件时,JavaFX 2.2中存在错误,一些如何存在空TreeItem的问题被添加到一起。您可以通过在updateItem函数中显式地编写setGraphic(null);setText(null);来修复该错误

public void updateItem(String item,boolean empty) { super.updateItem(item,empty);

代码语言:javascript
运行
复制
        if (empty) {
            setText(null);
            setGraphic(null);
        } else {
            if (isEditing()) {
                if (textField != null) {
                    textField.setText(getString());
                }
                setText(null);
                setGraphic(textField);
            } else {
                setText(getString());
                setGraphic(getTreeItem().getGraphic());
                if (
                    !getTreeItem().isLeaf()&&getTreeItem().getParent()!= null
                ){
                    setContextMenu(addMenu);
                }
            }
        }

参考http://docs.oracle.com/javase/8/javafx/user-interface-tutorial/tree-view.htm#BABDEADA

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23678958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档