Wzorzec projektowy do zarządzania oknami w aplikacji Java Swing

9

Właśnie zacząłem tworzyć moją pierwszą małą aplikację Java Swing. Po otwarciu program wyświetla pojedyncze, proste okno z etykietą i kilkoma przyciskami. Kliknięcie jednego z tych przycisków ma wyczyścić ekran powitalny i zastąpić go całkowicie innym panelem.

Nie jestem pewien, jaki jest najlepszy sposób na stworzenie tej funkcjonalności. Jedną z metod byłoby przekazanie mojego JFrameargumentu do ... prawie każdego innego elementu, ale wydaje mi się to hackingiem. Lub, zdublowanie każdego panelu jako słuchacza akcji, ale to też nie wydaje się właściwe.

Czy jest jakiś wzór, który powinienem tutaj zastosować? „Zamień zawartość głównego i jedynego okna” musi być dość powszechną operacją. Nazwa wzorca wystarczyłaby; Stamtąd mogę korzystać z Google na własną rękę. (Nie odmówiłbym jednak dłuższego wyjaśnienia.)

Wyskakuje
źródło
Jest to pytanie dotyczące rzeczywistych technik programowania, prawdopodobnie uzyskasz o wiele więcej odpowiedzi na temat przepełnienia stosu.
Alex Feinman,

Odpowiedzi:

6

Tworząc aplikacje Swing, zwykle opieram je na Wzorze Mediatora. Zgodnie z tym wzorcem klasa Mediator (zwykle główna JFrame) obsługuje różne części GUI (zwykle JPanels, JMenus ...) i dba o komunikację między nimi.

Na przykład, jeśli zdarzenie miało miejsce w JPanel1, JPanel1 powiadamia mediatora (JFrame). JFrame następnie podejmuje działania, modyfikując JPanel2.

FYI: wszystkie moje projekty były małymi i średnimi aplikacjami GUI, więc nie jestem pewien, czy te wzorce dobrze się skalują. Ale jeśli możesz zaprojektować odpowiednią architekturę, wzór Mediatora może być solidną podstawą.

HH
źródło
4

Możesz mieć główną metodę wyświetlania JDialog. Kiedy okno dialogowe zostanie zamknięte, główna JFrame jest tworzona i wyświetlana.

JDialog zapewnia łatwe w użyciu metody statyczne, które wyświetlają okno dialogowe z niestandardową zawartością i przyciskami oraz zwracają kod klikniętego przycisku. Testując tę ​​wartość, Twoja główna metoda może zdecydować o wyświetleniu głównej ramki lub wyjściu (lub cokolwiek innego). Proszę przeczytać Javadoc.

W przeciwieństwie do niektórych starszych platform interfejsu użytkownika, aplikacja Swing nie jest powiązana z określoną ramką lub oknem. Możesz utworzyć dowolną liczbę okien. Aplikacja kończy się po zakończeniu wszystkich wątków, a nie po usunięciu wszystkich okien. Zazwyczaj osiąga się to za pomocą System.exit (0).

Nie wiem, czy istnieje konkretny wzorzec projektowy dla tego przypadku. Polecam samouczek Java Swing.

Laurent Pireyn
źródło
1
-1. To pytanie dotyczy wzorca projektowego. Polecenie zmiany specyfikacji, które otrzymałem, i zakończenie „Nie wiem, czy istnieje jakiś wzorzec projektowy”, nie odpowiada.
Wyskakuje
2
Jego odpowiedź jest bardzo dokładna. Nie masz problemu z wzorcem projektowym, musisz najpierw dowiedzieć się, jak działają formularze i okna dialogowe.
Alex
2

Wiele ram interfejsu użytkownika ma różne reguły dotyczące „głównego” lub „aktywnego” okna. Jednym ze sposobów zarządzania tą złożonością jest posiadanie głównego okna, które kontroluje główną pętlę komunikatów, jako niewidocznego (lub małego, bezchromowego 1 piksela, poza ekranem dla szczególnie irytujących ram). wtedy wszystkie pozostałe okna i okna dialogowe będą potomkami tego okna.

Ta metoda ma wiele zalet, zwłaszcza w przypadku globalnych klawiszy i zdarzeń myszy, a także podczas rejestrowania najwyższego poziomu i obsługi wyjątków.

Neal Tibrewala
źródło