Я знаю, что это старый вопрос ... в любом случае, если кто-то это нужно:
Вы можете достичь его без VirtualFlow (который является частным API, как «мурлыканье голубя» упоминает). Просто используйте свой собственный RowFactory и сохраните ссылки на объекты TableRow по мере их создания (некоторые точки останова или вызовы System.out.println() здесь могут помочь быстро понять, как работает TableView).
В классе контроллера создайте эти два поля:
private ArrayList<TableRow<Person>> tblViewPersonsTableRows = new ArrayList<>();
private boolean headerTableRowCreated = false;
... в TableRowFactory, хранящие ссылки ...
... теперь называют это, где вам нужно это ...
double tblViewHeight = fxTblViewPersons.getHeight();
double headerHeight = fxTblViewPersons.lookup(".column-header-background").getBoundsInLocal().getHeight();
double viewPortHeight = tblViewHeight - headerHeight;
for (TableRow tableRow : tblViewPersonsTableRows) {
double minY = tableRow.getBoundsInParent().getMinY();
double maxY = tableRow.getBoundsInParent().getMaxY();
if ((maxY < 0) || (minY > viewPortHeight)) {
//row invisible
} else if ((maxY <= viewPortHeight) && (minY >= 0)) {
tableRow.getStyleClass().add("fullyVisibleRow");
} else {
tableRow.getStyleClass().add("partiallyVisibleRow");
}
}
... !!! БЫТЬ ОСТОРОЖЕН !!! если вы вызываете его в каком-либо обработчике событий, где изменяются данные или порядок сортировки, проверьте, не получили ли вы старые координаты перед изменением данных или новыми после изменения.
Если вы используете стили CSS, как это ...
.fullyVisibleRow {
-fx-control-inner-background: palegreen;
-fx-accent: derive(-fx-control-inner-background, -40%);
-fx-cell-hover-color: derive(-fx-control-inner-background, -20%);
}
.partiallyVisibleRow {
-fx-control-inner-background: orange;
-fx-accent: derive(-fx-control-inner-background, -40%);
-fx-cell-hover-color: derive(-fx-control-inner-background, -20%);
}
... полностью видимых строк должны быть зелеными и частично видимые из них (в верхней и нижней части TableView) оранжевого цвета. Я надеюсь, что это помогает кому-то.
Можете ли вы объяснить «видимые ячейки и строки»? – ItachiUchiha
Я имею в виду видимые элементы. Например, если у вас есть 100 элементов в таблице, и только 10 видимы. Из-за экранов. Вам нужно перейти к другому. Если хотите узнать индекс первой и последней видимой строки. – seeseost