我试图以串行方式(child-1,child-2 ...)对根节点的直接子节点进行编号。
这是我的方法,它为myColumn设置单元格值工厂:
private void setCellValueFactory() {
myColumn.setPrefWidth(120);
final int[] si_SubsetCount = {
1
};
myColumn.setCellValueFactory(
(TreeTableColumn.CellDataFeatures < MyDataClass, String > p) - > {
TreeItem < JVCC_PageHeaderInfo > ti_Row = p.getValue();
MyDataClass myDataClass = p.getValue().getValue();
String text;
if (ti_Row.isLeaf()) {
//leaf
} else if (ti_Row.getParent() != null) {
text = "Child-" + si_SubsetCount[0];
si_SubsetCount[0]++;
} else {
si_SubsetCount[0] = 1;
text = "Root";
}
return new ReadOnlyObjectWrapper < > (text);
});
}
但我的输出如下:
>Root
>child-4
>leaf
>leaf
>child-8
>leaf
>leaf
我不明白为什么编号就像4,8 ......而不是1,2 ......
有人可以帮助我。
答案 0 :(得分:0)
这是因为当调用用于评估每行值的CellValueFactorys方法时,无法控制。单行可能会多次调用,这就是为什么计数器没有为每一行显示正确的值。
这里首选动态方法。如果您只需要在3个节点级别(例如root / child / leaf)之间进行区分,那么您可以执行以下操作:
myColumn.setCellValueFactory( ( final CellDataFeatures<String, String> p ) ->
{
final TreeItem<String> value = p.getValue();
String text = "";
if ( value.isLeaf() )
text = "leaf";
else if ( value.getParent() != null )
text = "Child-" + (value.getParent().getChildren().indexOf( value ) + 1);
else
text = "root";
return new ReadOnlyStringWrapper( text );
} );
由于TreeItem的Children存储在ObservableList中,您可以只询问它们的索引并添加1,因为索引从零开始。