Swing, JPanel - podmiana panelu

0

Witam,
klikam sobie GUI w Netbeans7 i mam coś takiego jak w załączniku.

  • Ten prostokąt zaznaczony na pomarańczowo to zmienna "ustawieniaPanel" typu JPanel.
  • Po lewej mam listę typu JList w której są kolejno takie elementy jak "Dno ostatniego objęcia", "Harami", ...
  • Patrząc na moje pliki w drzewie projektu są tam właśnie takie klasy jak DnoOstatniegoObjecia.java, Harami.java, ... Klasy te dziedziczą po JPanel.

Co chcę zrobić:
Chcę aby po kliknięciu w liście JList np. na "Harami" panel ustawieniaPanel podmienił się na panel Harami itd.
Próbowałem przypisywać pod zmienną ustawieniaPanel inny panel ale to nic nie daje (w gui się nic nie zmienia). Jak to się powinno zrobić aby działało?

0

W skrócie

remove(oldPanel);
add(newPanel);
validate();
repaint();
0

a nie na się tego zrobić bez usuwania tego panelu? Nie wystarczyło by podmienić referencje i jakoś odświeżyć?

0

a dlaczego nie chcesz usuwać poprzedniego panelu? przecież jak go podmienisz i nie usuniesz to będzie ci niepotrzebnie zaśmiecał pamięć.

0

Ten usunięty panel istnieje, tylko go nie widać. Możesz go potem przywrócić. remove(panel) usuwa panel z okna (robi go niewidocznym), ale w pamięci on zostaje.
Tak naprawdę, to jest podmiana referencji do panelu na liście komponentów okna.

0
remigio napisał(a)

a dlaczego nie chcesz usuwać poprzedniego panelu? przecież jak go podmienisz i nie usuniesz to będzie ci niepotrzebnie zaśmiecał pamięć.

bo dużo prościej byłoby dla mnie po prostu przypisać inną zmienną i jakoś odświeżyć niż usuwać i dodawać komponenty. Wszystko dlatego, że GUI sobie "wyklikałem" w netbeans'ie i on wygenerował jakiś skomplikowany kod. Dodawanie tego panelu wygląda tak:
(w poniższym kodzie dodawany jest panel "newPanel"):

 
GroupLayout jPanel1Layout = new GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
    jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING)
    .addGroup(jPanel1Layout.createSequentialGroup()
	.addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
	.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
	.addComponent(newPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
    jPanel1Layout.createParallelGroup(GroupLayout.Alignment.LEADING)
    .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 356, Short.MAX_VALUE)
    .addComponent(newPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);		

czy da się dodać ten panel w jakiś prostszy sposób?

0

ja się tutaj pomyliłem troszkę....tak jak napisał @bo . Ten panel nie znika z pamięci...Także spokojnie możesz operować tą zmienną mimo że usuwasz panel w którym jej użyłeś.

Co do skomplikowanego kodu wyrzucanego przez kreatora...
Moim zdaniem jeżeli w oknie nie masz jakieś dużej ilości komponentów to zawsze lepiej jest napisać ten kod samemu.

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