2015-05-26 3 views
1

Есть ли способ получить видимые элементы ListView в JavaFX? Я хочу определить первый видимый элемент, отображаемый ListView в моем приложении JavaFX.Видимые элементы ListView

Следующий код 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

Вы пытались использовать 'onScrollTo'? Это дает вам необходимую информацию? –

+0

'onScrollTo' перейдите к определенному индексу, что не связано с моим вопросом ... Я хочу определить индекс первого видимого элемента. – alex

+0

Нет никакого способа сделать это (без некоторых довольно уродливых хаков, по крайней мере). Зачем вам это нужно (возможно, существует другое решение того, что вы на самом деле пытаетесь достичь)? –

ответ

0

Как пояснил @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 Применение Нить] ОТЛАДКА getFirstAndLast - скроллинг #### первый 11 последние 20 13: 56: 48,503 [X Применение Нить] DEBUG getFirstAndLast - прокрутка #### первая 9 последняя 17 13: 57: 08.491 [X Application Thread] DEBUG getFirstAndLast - Прокрутка #### первая 7 последняя 15 13: 57: 18.371 [X Application Thread] DEBUG getFirstAndLast - Прокрутка #### первая 3 последние 15