我想创建一个tableView并在该视图中提供滚动锁定功能,以防出现数据流。
我已经创建了视图,并且如果将滚动条放置在任何位置(不在末尾),则视图不会滚动,但是如果我将滚动条拖到末尾,并且连续出现数据,则滚动条将保留在最终导致显示数据。
即使滚动条在尽头,如果有人可以帮助停止在视图中获取新数据。
谢谢
答案 0 :(得分:0)
Java 9
您可以使用此方法在添加任何新数据之前获得第一个可见行:
public static <T> int getFirstVisibleRow(final TableView<T> table) {
TableViewSkin<T> skin = (TableViewSkin<T>) table.getSkin();
if (skin != null) {
ObservableList<Node> children = skin.getChildren();
for (Node node : children) {
if (node instanceof VirtualFlow<?>) {
VirtualFlow<?> virtualFlow = (VirtualFlow<?>) node;
IndexedCell firstVisibleCell;
if ((firstVisibleCell = virtualFlow.getFirstVisibleCellWithinViewPort()) != null) {
int firstVisibleCellIndex = firstVisibleCell.getIndex();
int totalItemsSize = table.getItems().size();
return firstVisibleCellIndex < totalItemsSize
? firstVisibleCellIndex
: totalItemsSize - 1;
}
break;
}
}
}
return 0;
}
然后,您可以使用结果在添加新数据时使表格滚动到该行。
int firstVisibleRow = getFirstVisibleRow(table);
table.getItems().addAll(newData);
table.scrollTo(firstVisibleRow);
您也可以通过在table.getItems()
上添加侦听器来实现此目的