Problem z odświeżaniem JTextArea

0

Witam,

Napisałem aplikację Czatu, w której wykorzystuję kontrolkę JTextArea do wyświetlania wysłanych/odebranych wiadomości. Pole z wiadomościami uzupełniam po każdym wysłaniu/odebraniu wiadomości poleceniem setText (podając za każdym razem całą zawartość okna do wyświetlenia).
Napotkałem jednak pewien problem z odświeżaniem w przypadku, gdy próbuję odświeżyć tekst w momencie, gdy okno aplikacji jest zminimalizowane na pasku. Po zmaksymalizowaniu okna widoczna jest jego stara zawartość, bez dodanej nowej wiadomości, jednak np. przewinięcie paskiem pola tekstowego lub zaznaczenie tekstu powoduje, że nowa wiadomość wyświetla się poprawnie. Ważną rzeczą jest to, że ten problem występuje tylko na Linuxie Ubuntu/Mint i to nie na wszystkich systemach.
Próbowałem naprawić ten problem poprzez użycie metod repaint() i updateUI() po metodzie setText, jednak to nie pomaga.

Proszę o podpowiedź, co może być przyczyną tego problemu i jak można go rozwiązać.

Pozdrawiam
Michał

3

Znów opowieści o kodzie, a nie kod.

Ja uważam w używaniu Swinga należy używac Modeli do zasilania widgetów, tam prawidłowo przebiegają eventy. Nie miałem problemu z odświeżaniem (co prawdę mówiąc było "kilka" lat temu).
Ty, jak z opisu wnioskuję, używasz "zygania" danymi bezpośrednio do widgetu.

0

Z założenia ta aplikacja ma być bardzo prosta (służy jedynie do weryfikacji usługi w systemie), dlatego jest w niej prosty mechanizm timera, który co 700ms sprawdza licznik wysłanych/odebranych wiadomości znajdujących się w liście i pobiera z niej niewyświetlone wiadomości, a następnie ustawia setText na kontrolce. Sam mechanizm odczytu wiadomości działa oczywiście prawidłowo, jedynie kontrolka w wymienionych wyżej przypadkach nie odświeża danych.
Dodatkowym wymaganiem jest konieczność użycia Javy 1.8.

0

@MichTar:

A te "wiadomości" to wieloliniowe, jednolionowe? W moim projekcie myślał bym o gridzie (że w nim wygasić wzrokowo linie graniczne, to inna sprawa)

Tekstowe pola wieliniowe, memo, richtexty są we wszystkich frameworkach GUI gorsze do dynamicznego "podładowywania" danymi niż gridy. W każdy działa nieco ułomnie, np traci kursor itd... nie są do tego przeznaczone *)
Grid w Swingu, prawidłowo zasilany modelem (polecam tryb wirtualny), działa ślicznie w dymanicznych sytuacjach.

*) co nie znaczy, że sie nie da. Ale bez kodu, tylko z opowieściami, sorry Winentou

1 użytkowników online, w tym zalogowanych: 0, gości: 1