tangguo

Tableview可见行

java

我想为表格视图实现自定义滚动功能。因此,需要访问可见的行和单元格。

如何检测JavaFX tableview中的可见单元格和行?我在tableview的API描述中未找到任何有关此的信息。

谢谢


阅读 288

收藏
2020-11-19

共1个答案

小编典典

尝试在TableView中滚动到所需的行。我已经尝试过使用table.scrollTo(index),但是它无法正确滚动,因为它将所需的行设置为第一个可见行。

我已经在控制器上编写了下一个代码。

在这里,您还可以查看如何获取可见行。

/**
 * Used to manually scroll the Table
 */
private TableViewSkin<?> tableSkin;
private VirtualFlow<?> virtualFlow;

@Override
public void initialize(URL location, ResourceBundle resources) {
    ...
    ...
    Platform.runLater( ()-> { loadVirtualFlow(); });
}

/**
 * Loads the actual VirtualFlow
 */
private void loadVirtualFlow(){
    tableSkin = (TableViewSkin<?>) tableContent.getSkin();
    virtualFlow = (VirtualFlow<?>) tableSkin.getChildren().get(1);
}

/**
 * Scrolls the table until the given index is visible
 * @param index to be shown
 */
private void scrollTo(int index){
    int first = virtualFlow.getFirstVisibleCell().getIndex();
    int last = virtualFlow.getLastVisibleCell().getIndex();
    if (index <= first){
        while (index <= first && virtualFlow.adjustPixels(-1) < 0){
            first = virtualFlow.getFirstVisibleCell().getIndex();
        }
    } else {
        while (index >= last && virtualFlow.adjustPixels(1) > 0){
            last = virtualFlow.getLastVisibleCell().getIndex();
        }
    }
}

使用此代码,您可以轻松滚动到所需的索引:

scrollTo(index);

将元素添加到列表中之后,请记住在调用scrollTo之前先调用loadVirtualFlow,这样VirtualFlow会得到更新,并且不会引发异常。

2020-11-19