Jakiś czas temu zapytałem this question. Wszystkie rozwiązania są rozwiązaniem.Czy coś jest nie tak z implementacją MVC Swing dla JList?
Teraz to nie może być. Czuję, że coś tu jest nie tak, ale nie mogę powiedzieć, czy to jest model MVC Swinga, który jest koncepcyjnie zły, czy też jest to moje myślenie, które jest koncepcyjnie błędne.
Oto problem ponownie. Używam JList
do implementacji listy miniatur dla stron dokumentu. Jeśli użytkownik wybierze kolejną miniaturę z listy, ta strona zostanie załadowana. W tym celu dodałem ListSelectionListener
do JList
, który po zmianie wyboru ładuje tę stronę. Ale użytkownik może również zmienić stronę za pomocą innej kontrolki. Naturalnie chcę, aby znalazło to odzwierciedlenie na liście miniatur poprzez wybór tej strony tutaj. Więc setSelectedIndex()
zaktualizować JList
. Niestety ma to niepożądany efekt podniesienia ListSelectionEvent
, co powoduje odświeżenie strony przez słuchacza.
Co jest nie tak? Właśnie zmieniłem model z innego miejsca, więc naturalnie chcę, aby widok się zaktualizował, ale nie chcę, aby powodował zdarzenia. Czy Swing nie wdraża MVC, prawda? Czy może brakuje mi tutaj punktu?
Dzięki wszystkim za wielkie odpowiedzi!Przyjąłem odpowiedź @ britishmutt, ponieważ jest ona najbardziej szczegółowa i wnikliwa i zawiera najczystsze rozwiązanie. Problem polega na tym, że komponent ładujący stronę powinien zobaczyć, że zażądano załadowania tej samej strony i nie powinien tego robić. Linki były bardzo przydatne. Nadal uważam, że model MVC Swinga jest wadliwy. Powinny one pójść tradycyjnie. Ich model wydaje się być większym kłopotem, niż jest wart. –
Napotkałem ten sam problem z aktualizacjami programu nasłuchującego kilka razy. Wyobraź sobie, że masz N komponentów, które muszą się wzajemnie aktualizować ... Nawet jeśli sprawdzisz prawdziwą zmianę wyświetlania, aby zdecydować, czy chcesz wystrzelić jakieś wydarzenie, będą zdarzenia N-1 wystrzelone z innych komponentów N-1 po oni są na bieżąco. – Timmos