Próbuję zmienić JList wewnątrz JScrollPane dynamicznie, przy użyciuBądź JScrollPane wyświetlania pasków przewijania, gdy zostanie zmieniony JList wewnątrz
myList.setListData(someArray);
Po tym chciałbym oczekiwać JScrollPane pokazać przewijania, ile potrzeba, ale to nie robi” t się stało. Googlowanie problemu nie było zbyt pomocne. Próbowałem różnych kombinacji następujących metod, z niewielkim powodzeniem (zasadniczo wywiercenie poprzez api docs):
myScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
myList.validate(); myScrollPane.validate();
myScrollPane.setPreferredSize(Dimension someDimension);
myScrollPane.setViewportView(moduleList);
myScrollPane.setLayout(...);
Podczas korzystania z pierwszej metody pojawi się pasek przewijania, ale nie zostanie aktywowana przez zmianę modelu. Podłączyłem się również do PropertyChangeEvent i sprawdziłem, czy pożary JList i zdarzenie po zmianie modelu. Czego tu mi brakuje? Jakiej metody muszę użyć, aby to działało, lub jeszcze lepiej, która właściwość sprawiłaby, że to działało po wyjęciu z pudełka?
Nie jestem pewien, czy to pomoże, ale upewnij się, że wywołanie metody setListData (...) występuje w wątku zdarzenia. Wszelkiego rodzaju paskudne rzeczy mogą się zdarzyć, jeśli zmutujesz obiekt interfejsu użytkownika w innym wątku. Również spojrzałeś na JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED? Nie jest do końca jasne, co masz na myśli przez "actived przez zmianę modelu". –