Wróć z powrotem do projektowania tego co chcesz zrobić zamiast ruszać z kodowaniem nie wiedząc czego chcesz.
GUI okienne powstały po to aby uniezależnić aplikacje od parametrów i ilości rzeczywistych ekranów obsługiwanych w systemie. Można na palcach policzyć gry, których koncepcja uwzględnia używanie więcej niż jednego ekranu - zwykle są to symulatory lotnicze lub bardzo rozbudowane strategie (nie żadne RTS). 99% gier potrzebuje i używa jednego ekranu. A odpowiednikiem ekranu jest dla gry opartej na api systemu ramka okna, czyli jakiś frame czyli w Javie np. JFrame. Krótko mówiąc - daj sobie spokój z tworzeniem gry, która potrzebuje/otwiera więcej niż jedno okno. No chyba, że piszesz jakiś symulator lub strategię i dwa ekrany/okna są ku temu niezbędne.
Jednak jeżeli chcesz poznać niuanse obsługi więcej niż jednego okna, to z punktu widzenia użytkownika odpal sobie program GIMP w trybie wielookiennym, a z punktu widzenia programisty demo o nazwie Swingset, Swingset2 lub Swingset3. Tam będziesz się mógl przyjrzeć jak się prawidłowo zarządza więcej niż jednym oknem (top level). Jest jeszcze takie coś jak MDA, czyli zarządzanie wieloma oknami dokumentów w oknie macierzystym. To też warto sobie obejrzeć, żeby przynajmniej wiedzieć co, jak i po co.
A odpowiadając na Twoje pytanie. Wynika z tego posta, że menu jednej gry otwiera drugą nową grę. To jest błąd projektowy.
Zamykając okno jednej gry, albo zamykasz aplikację i wtedy zamykane są wszystkie okna, albo tworzone nowe okno gry ma jako rodzica wpisane okno z którego wywołano polecenie, co oznacza że jedna gra jest zależna od innej (nie potrafię na podstawie tych informacji określić, która z tych możliwości jest zaprogramowana).
Albo więc musisz zrobić osobne okno do obsługi różnych gier w różnych oknach (ale kompletnie niezależnie od siebie nawzajem) - takie okno może być na osobnym ekranie, albo polecenie otwarcia nowej gry musi utworzyć JFrame bez rodzica, a wszystkie dotychczasowe zamknąć. Programowe zamknięcie robi się metodą close okna (zaskakujące nieprawdaż?:)). Żeby wiedzieć co zamknąć musisz oczywiście gdzieś przechowywać referencje otwartych okien gier. Typowym błędem początkujących jest "zachowywanie" referencji w zmiennej lokalnej, która jest w ten sposób niedostępna nigdzie poza metodą main. Musi być ona więc przechowywana w polu klasy aplikacji lub w jakimś kontenerze dostępnym dla operacji na poszczególnych "grach".