gpt4 book ai didi

javafx-8 - 将所选行保持在 TableView 控件的中间

转载 作者:行者123 更新时间:2023-12-05 01:47:32 26 4
gpt4 key购买 nike

无论选择如何变化,我都希望将所选行保留在 TableView 控件的中间。我必须使用 TableView 上方的按钮(PREV、NEXT)来移动更改选定的行。问题是 TableView 滚动条不遵循此选择,所以我需要调用

TableView.scrollTo(int)

使选定的行保持可见。但是,在调用 scrollTo(int) 之后,选定的行最终出现在视口(viewport)的顶部。我想把它放在视口(viewport)的中间。

这在 Swing 中是可能的,如下所示: http://www.java2s.com/Code/Java/Swing-JFC/ScrollingaCelltotheCenterofaJTableComponent.htm

不幸的是,我无法用 JavaFX 8 解决这个问题。

最佳答案

嗯,这似乎行得通。它使用非公共(public) API,所以如果有人有更好的解决方案,我仍然很感兴趣。

    table.getSelectionModel().selectedIndexProperty().addListener((observable, oldValue, newValue) -> Platform.runLater(() -> {
TableViewSkin<?> ts = (TableViewSkin<?>) table.getSkin();
VirtualFlow<?> vf = (VirtualFlow<?>)ts.getChildren().get(1);

int first = vf.getFirstVisibleCellWithinViewPort().getIndex();
int last = vf.getLastVisibleCellWithinViewPort().getIndex();

if((newValue.intValue() - ((last - first) / 2)) >= 0) {
vf.scrollTo(newValue.intValue() - ((last - first) / 2));
}
}));

限制是所有行的高度必须相同。

关于javafx-8 - 将所选行保持在 TableView 控件的中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25232157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com