Mam program wielowątkowy. W pierwszej klasie funkcję która wyświetla dane przez system.out, a potrzebuję to wyświetlać w polu tekstowym, które jest tworzone w następnej klasie. Jak zakomunikować między sobą te 2 klasy, żeby ta pierwsza miała dostęp do zmiennej z tej drugiej?
Zacznij od zapoznania się z zagadnieniem: czym różni się obiekt od klasy. Jak już to pojmiesz to sam będziesz wiedział jak rozwiązać swój problem.
Wiem, czym się różni, ale nie wiem gdzie to potworzyć. Jestem przyzwyczajony do C++ a tu wszędzie muszą być obiekty
Chrzani waść, pokaż jak by to zrobiłeś w C++. W javie będzie nieco prościej.
W klasie ostatniej odpowiedzialnej za okno, "...extends JFrame implements ActionListener" mam funkcję main w której tworzę obiekt tej klasy oraz 3 obiekty 3 różnych klas, które sobie działają. W tej klasie, ale poza funkcją main tworzę przyciski i pole tekstowe dla okienka. Potrzebuję w funkcji pierwszej napisanej klasy odwołać się do tego okienka, ale nie wiem jak.
W metodzie OBIEKTU pierwszej z klas chcesz odwołać się do okienka? To przekaż do tego obiektu referencje do okienka. Na przykład w konstruktorze, albo przez setter.
Dobra, działa, dzięki.
Chociaż takich sytuacji będę miał jeszcze kilka i to chyba mało optymalne przekazywać po 5 argumentów przez referencje, wszystko na krzyż. Nie ma jakiegoś sposobu, żeby niektóre obiekty zadeklarować jako globalne i się do nich normalnie odwoływać?
Jest.
- Singletony, jeśli to są jakieś takie obiekty "serwisy" które udostępniają funkcjonalności.
- ServiceLocator, jw
- Kontener IoC, do składania implementacji trochę jak z klocków.
Ale to sie wszystko średnio nadaje do wiązania ze soba elementów GUI. Jesli masz pole tekstowe w okienku i tylko tam z niego korzystasz i tylko tam się do niego odnosisz (ergo masz tu ewidentnie kompozycje) to powinieneś to pole tekstowe tworzyć w konstruktorze okienka.
Możesz również wykorzystać EventBus guavy albo otto. Wtedy nie musisz w ogóle trzymać referencji do UI.