• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zarządzanie JPanelami - "chowanie" jednego, "pokazanie" drugiego.

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
0 głosów
534 wizyt
pytanie zadane 6 czerwca 2016 w Java przez nostressghost Nowicjusz (240 p.)
Witam,

Jak najprościej rozwiązać taki oto problem?

Mam jeden obiekt JFrame, do którego dodaje kilka JPaneli. Chciałbym aby w dowolnym przeze mnie momencie przełączać się pomiędzy tymi panelami.

Proszę o pomoc, czy może jakiś przykład, który obrazuje rozwiązanie.

1 odpowiedź

+2 głosów
odpowiedź 6 czerwca 2016 przez Kornelia Kobiela Nałogowiec (33,340 p.)

Jeżeli chcesz się móc przełączać pomiędzy Jpanelami, to może trzeba by użyć tabbed pane. Nie wiem, w jaki sposób chcesz go wykorzystać, ale pozwala na przełączanie się pomiędzy panelami, na zasadzie kart. Tutaj możesz sobie poczytać o przykładach od najlepszego źródła: https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html 

Jeżeli chcesz się przełączyć pomiędzy dwoma JPanelami, to może warto po prostu wymienić jego zawartość i posługiwać się metodami setVisible, setEnabled. W sumie nie było mi to nigdy potrzebne, ale chyba kombinowałabym w ten sposób

komentarz 6 czerwca 2016 przez nostressghost Nowicjusz (240 p.)

Dziękuję za podpowiedź, chyba nie do końca sprecyzowałem pytanie. A więc piszę  prostą grę 2D. Tworzę okno JFrame oraz dodaję do niego klika paneli JPanel, dokładnie do content pane w oknie. Panele służą mi za menu oraz poszczególne poziomy gry. Panele mają taką samą rozdzielczość co moje okno. Chcę w miarę prosty sposób przełączać się pomiędzy nimi.  Zauważyłem że okno wyświetla jedynie pierwszy panel wstawiony do content pane. Napisałem więc takie metody. 

Poniższa metoda zostawia w content pane jedynie panel o podanej nazwie. 

public void changePanel(String name) {
		
	for(JPanel panel : jPanelList) { 
		if(panel.getName()!= name) panel.setVisible(false);
			else {
			gameWindow.setContentPane(panel);
			panel.setVisible(true);
		}
	}
		setActivePanel(name);
		gameWindow.setVisible(true);
		refresh();
}	

Poniższa metoda wstawia panel o podanej nazwie na początek content pane, zostawia resztę i je ukrywa ( setVisible(false) ).

public void changePanel1(String name) {
	JPanel temp;
	for(JPanel panel : jPanelList) { 
		if(panel.getName()== name){
			panel.setVisible(true);
		}
		else {
	temp = (JPanel) gameWindow.getContentPane().getComponent(0);
		gameWindow.removePanelFromContentPane(temp);
		gameWindow.getContentPane().add(temp);	
		panel.setVisible(false);
		}
	}
			
			setActivePanel(name);
			gameWindow.setVisible(true);
			refresh();
} 

Mogę także napisać metodę, która usunie wszystko z content pane i wstawi odpowiedni panel . 

Którą metodę wybrać ?

Podobne pytania

0 głosów
1 odpowiedź 152 wizyt
pytanie zadane 23 czerwca 2017 w Java przez student33 Początkujący (250 p.)
0 głosów
1 odpowiedź 236 wizyt
pytanie zadane 16 marca 2016 w Java przez mkl215 Początkujący (280 p.)
0 głosów
0 odpowiedzi 165 wizyt
pytanie zadane 25 czerwca 2016 w JavaScript przez DariuszH Gaduła (3,100 p.)

93,433 zapytań

142,429 odpowiedzi

322,661 komentarzy

62,796 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

...