2010-04-23 9 views
5

Mam JList zagnieżdżony wewnątrz JScrollPane. Kiedy dodaję elementy do listy JList, chcę JScrollPane automatycznie przewinąć do dolnej części listy JList, aby ostatni element był widoczny. Aby to zrobić, mam następujący kod:Nie można programowo przewinąć do ostatniego elementu w JList

getWordListScroller().getVerticalScrollBar().getModel().setValue(getWordListScroller().getVerticalScrollBar().getModel().getMaximum()); 

gdy próbuję przy użyciu tego kodu, jednak tylko JScrollPane przewija do przedostatniej pozycji, pozostawiając ostatnią pozycję z widzenia. Nie jest to w żaden sposób pożądane. Próbowałem dodać wartości do funkcji getMaximum(), ale problem nadal występuje.

Jak mogę JScrollPane przewinąć do samego dołu?

Odpowiedz

14

Postaraj się metodą JList#ensureIndexIsVisible():

JList wordList = getWordListScroller(); 
int lastIndex = wordList.getModel().getSize() - 1; 
if (lastIndex >= 0) { 
    wordList.ensureIndexIsVisible(lastIndex); 
} 
+0

Właśnie znalazłem, że ja i to działa pięknie. –

+2

Nice. Btw. rzecz do zapamiętania (ponieważ wymuszanie przewijania jest związane ze zmianą zawartości) http://stackoverflow.com/a/7114267/210342 – greenoldman

+0

To działa! Dziękuję Ci. – Horizon

0

Chociaż ta odpowiedź nie działa dla mnie, znalazłem to: http://forums.sun.com/thread.jspa?threadID=623669 (Post napisany przez 'inopia') który działa doskonale.

Jak mówi: "Problem polega na tym, że może być trochę trudniej znaleźć zdarzenie, które zostanie wywołane po zaktualizowaniu ListModel, JList i JScrollPane."

Powiązane problemy