Swing- przekazywanie informacji między oknami

0

Cześć :)
mój problem wygląda następująco- mam kilka okien i potrzebuję sposobu, żeby się między nimi przełączać. Tzn, na przykład:
Okno 1 - logowanie. Po kliknięciu buttona 'Zaloguj' przenosi mnie do innego okna (Okno 2)
Okno 2 - okno opcji. Kilka buttonów z opcjami, po wybraniu jakiegoś przenosi mnie do kolejnego okna (Okno 3), lub po wybraniu opcji powrót, wraca znowu do Okna 1.
Okno 3 - kolejne opcje, wpisy do bazy danych itp. Też muszę mieć możliwość powrotu do wcześniejszych okien.

Przejrzałam dotychczasowe wątki na ten temat, ale nie znalazłam satysfakcjonującej mnie odpowiedzi :(
Aplikacja ma być napisana w Swingu, za pomocą WindowBuildera.
Proszę o jakieś wskazówki jak się do tego zabrać...

edit: od razu dodam, że sposób z przekazywaniem referencji niezbyt mnie satysfakcjonuje

0

Można wiedzieć dlaczego najbardziej naturalny sposób (przekazywanie referencji) nie jest satysfakcjonujący?

0

@Qkartka przykro mi że cię nie satysfakcjonuje, ale mimo wszystko będzie musiał. Przypuszczam ze nie masz pojęcia o OOP i stąd twoje "nieusatysfacjonowanie". Bo już sam fakt o pytanie jak komunikować ze sobą "okna" zamiast "obiekty" wskazuje że nie masz pojęcia co robisz.

0

@Shalom Napisałam okna, bo tak jest bardziej obrazowo i pytam nie o implementację, tylko sam pomysł jak to rozwiązać. Tak, każde moje okno to obiekt jakiejś klasy. Akurat Builder rozwiązuje to tak, że w każdej takiej klasie mam JFrame'a, oraz inne komponenty potrzebne do budowy. Mam też główną klasę która nimi zarządza. Problem w tym, że nie mogę się dostać do obiektu jednej klasy z obiektu innej (mogę to zrobić jedynie z klasy głównej). Mogę dziedziczyć, stworzyć sobie jakąś tam hierarchię, ale dziedziczenie takie będzie nielogiczne i zaburzy czytelność programu. Dlatego pytam o dobry sposób rozwiązania.

0

Jeśli jeden obiekt potrzebuje wpłynąć na inny obiekt, np. poprzez wywołanie jakiejś jego metody to musi mieć do niego referencje i już. Istnieje rozwiązanie alternatywne -> obiekt X generuje zdarzenie Y a następnie "w jakiś sposób" (np. wykorzystując Observera) obiekty oczekujące na zdarzenia Y są o tym informowane. Ale nie wiem czy tutaj byłoby to sensowne.

1

Niech okna "rozmawiają" za pośrednictwem klasy głównej. Każde okno ma referencję do klasy głównej, klasa główna ma referencję do wszystkich okien. Być może w postaci HashMapy z kluczami będącymi nazwami okien. A potem

mainClass.okna.get("Okno logowania").doSomething();
0

@bogdans dzięki, przydało się :)

0

Możesz też skorzystać z javovej implmentacji Event Bus (o ile dobrze pamiętam, jest taka w Guavie). Wtedy możesz między dowolnymi częściami w aplikacji przesyłać wiadomości, a każda klasa może na takie wiadomości reagować.

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