ListView

时间:2015-05-26 11:49:27

标签: listview javafx

有没有办法在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;
}

1 个答案:

答案 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个