我想为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并且不会引发异常.
| 归档时间: |
|
| 查看次数: |
4089 次 |
| 最近记录: |