Редактировать : теперь я принимаю, что метод TreeTableView.getExpandedItemCount()
фактически отображает все отображаемые TreeItem
. Это делает этот метод одним из самых вопиюще плохо названных методов, с которыми мне когда-либо приходилось сталкиваться по неопровержимым причинам, изложенным в моем первоначальном вопросе и повторенным в нескольких комментариях.
Простой итератор дерева может быть разработан для подсчета всех элементов (независимо от того, показаны они или скрыты из-за того, что один или несколько предков свернуты) в столбце TreeTableView
(столбце дерева).
Но я не могу найти способ подсчета строк, которые «отображаются». Я говорю «отображается», а не «видимый», потому что строка дерева может отображаться без необходимости быть видимой.
Я отмечаю, что существует метод TreeTableView.getExpandedItemCount()
. Это не говорит вам о том, что я хочу знать: у вас может быть набор листьев, каждый из которых занимает один ряд, ни один из которых не расширен. В равной степени возможно, что эти расширенные элементы могут включать TreeItem
s, один или несколько из которых на самом деле свернуты, и то, что расширение TreeItem
не означает, что оно отображается.
Я также посмотрел на TreeTableColumn
. Я не мог видеть ничего очень очевидного.
Единственное решение, которое я могу придумать, в высшей степени неэлегантное:
// NB TreeIterator is a simple depth-first stack-based iterator
TreeIterator iterator = new TreeIterator(treeTableView.getRoot());
int nRows = 0;
while (iterator.hasNext()) {
TreeItem ti = iterator.next();
int row = treeTableView.getRow( ti );
if( row > nRows ) nRows = row;
}
log.debug( "displayed rows " + nRows );
... должно быть, безусловно, что-то лучше этого.