有没有办法在ListView
中获取JavaFX
的可见项?我想确定ListView
应用程序中JavaFX
显示的第一个可见项目。
以下代码found here对我不起作用(仅适用于TableView
):
@SuppressWarnings("restriction")
public void getFirstAndLast(ListView<?> t) {
try {
ListViewSkin<?> ts = (ListViewSkin<?>) t.getSkin();
VirtualFlow<?> vf = (VirtualFlow<?>) ts.getChildren().get(0);
first = vf.getFirstVisibleCell().getIndex();
last = vf.getLastVisibleCell().getIndex();
}catch (Exception ex) {}
}
public int getFirst() {
return first;
}
public int getLast() {
return last;
}
答案 0 :(得分:2)
正如@James_D所解释的那样,开箱即用的解决方案并不是很好,但只有黑客可以使用。我改编了一个我在网上找到的解决方案,如下所示。
[...]
private int first = 0;
private int last = 0;
public void getFirstAndLast(ListView<?> t) {
try {
ListViewSkin<?> ts = (ListViewSkin<?>) t.getSkin();
VirtualFlow<?> vf = (VirtualFlow<?>) ts.getChildren().get(0);
first = vf.getFirstVisibleCell().getIndex();
last = vf.getLastVisibleCell().getIndex();
logger.debug("##### Scrolling first {} last {}", first, last);
} catch (Exception ex) {
logger.debug("##### Scrolling: Exception " + ex);
}
}
public int getFirst() {
return first;
}
public int getLast() {
return last;
}
[...]
示例输出:
13:56:38.652 [X Application Thread] DEBUG getFirstAndLast - 滚动####前11后20 20:56:48.503 [X应用程序主题] DEBUG getFirstAndLast - 滚动####前9个,最后17个 13:57:08.491 [X应用程序线程] DEBUG getFirstAndLast - 滚动####前7后15 15:57:18.371 [X应用程序主题] DEBUG getFirstAndLast - 滚动####前3个最后15个