Tableview可见行

see*_*ost 3 javafx

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

如何检测JavaFX tableview中的可见单元格和行?我没有在tableview的API描述中找到任何相关内容.

谢谢

小智 6

在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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

scrollTo(index);
Run Code Online (Sandbox Code Playgroud)

在向列表添加元素之后,请记住在调用scrollTo之前调用loadVirtualFlow,以便更新VirtualFlow并且不会引发异常.

  • 这是使用私有API - 有没有办法与公共API做类似的事情? (2认同)