我有一个扩展TreeTableView的类MyTreeTableView
通过在我的派生类中传递一个可观察的列表,我实现了一些方法来填充treeview,这在原始TreeTableView中是不可用的。除此之外,没有额外的功能。
我能够使用这个类,并且它在用Java编码时可以正常工作
i.e
MyTreeTableView localtree = new MyTreeTableView(new TreeItem<>());
localtree.setItems(myobservedList);如果我将这个实例添加到场景中,一切都像标准的TreeTableView一样工作。要将此实例添加到场景中,我必须在Java端执行此操作。
我必须让我的类MyTreeTableView到一个自定义的FXML组件中,这样它就可以使用场景构建器轻松地拖放。
在讨论FXML的自定义组件方面之前,我尝试将localtreetable分配给一个标准的JavaFX8 TreeTableView,它是在FXML中定义的,是现有场景的一部分。
我做了以下工作
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.在这里,col1和col2是在FXML中定义的,它们是JavaFX8TreeTableView的列,也是在FXML中定义的。
使用这种技巧,JavaFX8TreeTableView在UI上显示,其中填充了localtreetable对象中的数据。然而,UI不是正确的意图,树状视图被弄乱了。当我说混乱时,树的顺序是正确的,但是>放在树项目的第四个字母上,单击箭头不会展开或关闭树项目,您必须在其他位置单击它才能展开和关闭它。

我的第一个问题是如何将localtreetable中的值转置为JavaFx8TreeTableView,以便可以将值填充到已经定义的TreeTableView中
发布于 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);
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
https://stackoverflow.com/questions/23678958
复制相似问题