Czy można utworzyć nowy obiekt za każdym razem gdy zmieniam kartę w CardLayout?

0

Aktualnie używam CardLayout do skakania pomiędzy różnymi gui w mojej grze (main menu, settings, scoreboard etc.):

static JPanel panels = new JPanel();
        static CardLayout cl = new CardLayout();
        panels.setLayout(cl);
        panels.add(new Menu(), "menu");
		panels.add(new Game(), "game");
		panels.add(new Scoreboard(), "scoreboard");
		panels.add(new Settings(), "settings");
		panels.add(new Info(), "info");

później w tej samej klasie mam statyczną metodę, która pozwala mi na zmianę JComponentów:

public static void changePanel(String panel){
	cl.show(panels, panel);
}

Niestety wszystkie to obiekty są tworzone przy stracie programu.
Chciałbym stworzyć nowy obiekt za każdym razem gdy karta jest zmieniana i usunąć stary żeby nie zjadało to zbyt wiele pamięci. Czy jest to możliwe?

0
  1. Gdy masz publiczną statyczną metodę na GUI "to wiedz, że coś się dzieje" :)
  2. Nie martw się kilkoma obiektami, GC spokojnie sobie z nimi poradzi
  3. Ty i tak nie usuniesz tych obiektów, zrobi to... GC, nie znasz dnia ani godziny :)
0

Hej. Dzięki za odpowiedź.
Używam publicznej statycznej metody do przełączania się pomiędzy oknami gui. Np. z klasy Settings mogę sobie wywołać Main.changePanel("menu"); dzięki czemu w prosty sposób skaczę sobie pomiędzy jcompnentami.
czy jest to jakaś zła metoda/nawyk czy o co chodzi?

0

Rozumiem, że czy metoda będzie statyczna czy nie to Twój kod będzie działał(raczej).
Ale np. gdy ktoś inny będzie chciał skorzystać z Twoich klas i zawoła sobie statyczną metodę bez "utworzenia" obiektu(pamiętaj że należy ona do klasy nie do obiektu) to może nie uzyskać oczekiwanego rezultatu(nic nie będzie się działo lub/i polecą wyjątki).
Nie mniej jednak chodzi tu raczej o zasady dobrego programowania/inżynierię oprogramowania. Metody statyczne stosuje się zwykle w konkretnych przypadkach (np. klasy typu util, Singleton, Factory...). Do "zwykłego" porozumiewania się obiektów należy stosować metody nie statyczne.

0

ok. dzięki za pomoc :)

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