javafx - 表格 View 可见行

标签 javafx

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

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

谢谢

最佳答案

在 TableView 中尝试此操作以滚动到想要的行。我试过使用 table.scrollTo(index) 但它不能正确滚动,因为它将想要的行设置为第一个可见的。

我已经在我的 Controller 上编写了下一个代码。

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

/**
 * 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);

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

关于javafx - 表格 View 可见行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26159224/

相关文章:

java - 如何在按钮单击时递归调用按钮?

java - 如何在WebView中加载新文件?

Java FX 橡皮筋调整大小错误

JavaFX:工作线程需要 JavaFX 应用线程才能继续

java - 如何将外部 JS 脚本导入到 FXML 布局?

JavaFX LineChart 手动设置 X 轴值

android - JavaFXPorts构建的apk自动删除

javafx-2 - 在 Java FX 中扩展类?

JavaFX - GridPane 与 DatePicker 的奇怪行为

java - 如何创建多级组合绑定(bind)?