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 JFrame
argumentu 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.)
źródło
Odpowiedzi:
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ą.
źródło
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.
źródło
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.
źródło