Zmiana jTextPane z poziomu innej klasy.

0

Witam,

Chcę z poziomu jednej klasy zmienić tekst zmiennej jTextPane w obiekcie innej klasy. Nie mogę...
Próbowałem zmienna jTextPane ustawić jako public - dostęp do niej mam ale setText() nic nie daje.
W klasie w której chcę zmienić zawartość tej zmiennej zrobiłem seter do zmiany wartości niestety za pomocą tego setera też zawartość pola jTextPane nie ulega zmianie.

Jak to inaczej zrobić aby działało?

0

A jesteś pewny że to tekst się nie zmienia czy może po prostu nie odświeżasz widoku i zmiana jest, ale jej nie widać?

0

Mam klasę PersonalWindow która tworzy okienko interfejsu graficznego, w której jest pole jWiadomosc jest to jTextPane.
Następnie tworzę nowy obiekt i zapisuję go w ArrayList.

PersonalWindow m = new PersonalWindow();
SerwerWiadomosci.OkienkaPrywatne = new ArrayList<PersonalWindow>();
SerwerWiadomosci.OkienkaPrywatne.add(m);
m.setVisible(true);

Następnie gdy chcę coś zmienić:

PersonalWindow p = new PersonalWindow();
p = OkienkaPrywatne.get(0);
p.jWiadomosc.setText("jakiś tekst");

Nic się nie dzieje, natomiast jak zaczytam zawartość (p.jWiadomosc.getText) to ten tekst jest tam. Czyli zawartość się nie odświeża.
W takim razie jak odświeżyć widok?

0

Wyświetlasz okienka m, a tekst zmieniasz w okienku p.

0

ale jak dam p.setTitle("jakiś tekst");
To tekst w tytule okna ulega zmianie więc problem jest raczej w odświeżaniu jTextPane'a

0

Zgaduję, że p i m dziedziczą po JFrame. Nie pokazałeś kodu tworzącego, jest możliwe, że okno (JFrame) jest dla nich wspólne, a komponent jWiadomosc już nie. Wtedy p.setTitle() zmieni tytuł okna m, ale p.jWiadomosc.setText(...) nie zmieni tekstu w oknie m.

0

No dobra to jak to zrobić aby było dobrze.
Problem polega na tym, że w trakcie działania programu będą odpalane okienka, do których ma być przekierowywana wiadomość przychodząca z wątku obsługującego połączenia przychodzące.
Wymyśliłem sobie, że podczas odpalania takiego nowego okienka tworzę obiekt i zapisuję go w arraylist. Następnie gdy zaistnieje potrzeba przesłania informacji do tego okienka stworzę obiekt na podstawie informacji z arraylist i dopiszę coś do pola jTextPane. Być może da się to zrealizować inaczej... niestety moja obecna wiedza nie pozwala mi wykombinować innego rozwiązania....

Podsumowując mam wątki, które nasłuchują przychodzące wiadomości i jeżeli jakaś przyjdzie jest wyświetlana w oknie głównym w jTextPane. Tak więc wszystkie wiadomości przychodzące od klientów pokazywane są razem. Chcę zrobić aby po kliknięciu na liscie podłączonych klientów otwierało sie okienko do rozmowy tylko między mną a klientem w którego kliknę 2x.
Stworzyłem więc klasę która odpowiada za takie okienko oraz arrayList gdzie zapisuję obiekt okienka gdy zostanie ono zainicjalizowane. Dalej zaczynają się problemy...

i co nikt nie pomoże?

Tak myślę czy nie lepiej by było aby obiekt okienka tworzył się automatycznie podczas podłączania się nowego klienta przez wątek odpowiedzialny za obsługę połączenia. W momencie wysłania wiadomości przez klienta okienko było by pokazywane na ekranie. Sprawdziłem. W tą stronę działa dobrze, wiadomości są wyświetlane. Nie wiem natomiast jak dobrać się do tego obiektu aby wyświetlić okienko z poziomu innej klasy. Wątków jest tyle ile klientów, jak wybrać ten konkretny który odpowiada danemu klientowi. Znowu sytuacja podobna jak poprzednio...

0

Problem polegał na tym, że tworzyłem nowy obiekt zamiast pobrać go z tablicy

PersonalWindow p = OkienkaPrywatne.get(0);
0

Nie to było przyczyną błędnego działania. Kody

PersonalWindow p = new PersonalWindow();
p = OkienkaPrywatne.get(0);
p.jWiadomosc.setText("jakiś tekst");

oraz

PersonalWindow p = OkienkaPrywatne.get(0);
p.jWiadomosc.setText("jakiś tekst");

działają identycznie.</del>

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