我想为 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/