altes JPanel entfernen und neues öffnen

Amir

Mitglied
Hallo,
weiß jemand wie ich ein JPanel entfernen und eine neue, wessen code in der anderen Klasse definiert ist hinzufügen kann.
Ich wäre sehr dankbar, wenn mir jemand helfen würde, denn ich brauche dringend Hilfe.


Java:
 class Programm extends JFrame implements ActionListener  {
	
	 Buttons b = new Buttons();
	 Frame f = new Frame();
	 JButton button_next;
	  
	  URL file = this.getClass().getResource("firstPage.png");
	  
	  ImageIcon firstImage = new ImageIcon(getClass().getResource("firstPage.png"));
	  ImageIcon secoundImage = new ImageIcon(getClass().getResource("secoundPage.png"));
	  Image img = firstImage.getImage();  
	  Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
	  
	  JLabel label;
	  JPanel panel = new JPanel();
		 
	 public Programm(){
		  f.frame();
		  
		  Image newimg = img.getScaledInstance((int)dim.getWidth(),(int)dim.getHeight(), java.awt.Image.SCALE_SMOOTH);
		  firstImage = new ImageIcon(newimg);  
		  label= new JLabel(firstImage);
		 
		  panel.setSize((int)dim.getWidth(),(int)getHeight());
		  panel.setLayout(new BorderLayout()); 
		  //label.setPreferredSize(new Dimension((int) dim.getWidth(),(int) dim.getHeight()));
		 
		  panel.add(label, BorderLayout.CENTER);
		   //frame.setContentPane(new JLabel(firstImage));
		   addButtons();
	 	  	f.frame.add(panel, BorderLayout.CENTER);
	  }
	 
	  public void addButtons(){
			  b.button_next1.addActionListener(this);
			  f.frame.add(b.button_next1);
			  
			  b.button_mainMenu.addActionListener(this);
			  f.frame.add(b.button_mainMenu);
		  }		  
		  
	  public void actionPerformed(ActionEvent e){
		  if(e.getSource() == b.button_next1){
  			        f.frame.remove(panel);
  			        SecoundPage s = new SecoundPage();
			 }		  
		  if(e.getSource() == b. button_mainMenu){
				 f.frame.setVisible(false);
			 }
	  }
	  }

die zweite Klasse:
Java:
public class SecoundPage extends JFrame implements ActionListener  {
    Buttons b = new Buttons();
    Frame f = new Frame();
    
    ImageIcon secoundImage = new ImageIcon(getClass().getResource("secoundPage.png"));
	Image img = secoundImage.getImage();  
	Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
	
	JLabel label;
	JPanel panel = new JPanel();
	public  SecoundPage(){
		    Image newimg = img.getScaledInstance((int)dim.getWidth(),(int)dim.getHeight(), java.awt.Image.SCALE_SMOOTH);
		    secoundImage = new ImageIcon(newimg);
		    addButtons();
		   
		    label= new JLabel(secoundImage);
		    panel.setSize((int)dim.getWidth(),(int)getHeight());
			panel.setLayout(new BorderLayout());
			panel.add(label, BorderLayout.CENTER);
			f.frame.add(label, BorderLayout.CENTER);
	}
	
	
	public void addButtons(){
		 b.button_back2.addActionListener(this);
		 f.frame.add(b.button_back2);
		 
		 b.button_next2.addActionListener(this);
		 f.frame.add(b.button_next2);
		 
		 b.button_mainMenu.addActionListener(this);
		 f.frame.add(b.button_mainMenu);
	}
	
	 public void actionPerformed(ActionEvent e){
		 if(e.getSource() == b.button_back2);   
		    Programm p = new Programm();
		    
		 if(e.getSource() == b.button_next2){
			 ThirdPage t = new ThirdPage();
			 }

		 if(e.getSource() == b. button_mainMenu){			
			 f.frame.setVisible(false);
		 }	 
	 }
	 }
 
Zuletzt bearbeitet von einem Moderator:
Mit Container#remove(Component) kannst du eine bestimmte Komponente entfernen.

Aber ich muss sagen, dass ich nicht verstanden habe, was du meinst. 😉
 
Danke für deine Antwort. Durch das weiter Button soll sich das neue JPanel auf dem selben JFrame zeichnen lassen.
 
Zuletzt bearbeitet:
In beiden Klassen erbst du von JFrame .. das ist mmN nicht korrekt. Es braucht in der Regel nur einen JFrame und viele JPanels. Ein JFrame mit vielen JPanels lässt sich dabei zB. bequem mit dem CardLayout realisieren. Vielleicht solltest du dir mal dazu Tutorials oder Beispiele anschauen. Ich fand das immer sehr einfach zwischen den jeweiligen JPanels hin und her zu schalten.
 
danke für deine Antwort ich habe in Google sehr viel zu dem Thema gesucht, aber leider habe ich nichts gefunden, was mir weiter helfen kann. Ich wäre dir sehr dankbar wenn du mir das genauer erklären würdest und vielleicht ein Beispiel schreiben könntest. Denn ich muss dieses Projekt bis nächste Woche fertig kriegen und habe noch viel zu tun.
 
Oracle CardLayout Tutorial
CardLayoutDemo.java

Hi,
also das hier sieht erstmal viel aus, aber du musst dich nur auf folgendes konzentrieren:

in addComponentToPane wird das JPanel (cards) mit dem CardLayout erstellt und befüllt. Dazu werden 2 JPanels (card1 und card2) erzeugt und befüllt. Das eine mit 3 JButtons, das anderer mit einem JTextfield.

Danach werden diese beiden JPanels auf das cards-Panel gelegt, quasi ihrem Container, der dann die Anzeige steuern kann durch sein Layout. Beim hinzufügen wird allerdings noch ein String mitgegeben (BUTTONPANEL, bzw. TEXTPANEL) damit sind die einzelnen Cards eindeutig identifizierbar. Das ist notwendig um zu sagen, welche Card aktuell angezeigt werden soll.

Zusätzlich bekommt das Haupt-Panel noch eine JComboBox mit der du die aktuelle Card wechseln/auswählen kannst.

Beim Auswählen in der Combobox wird dann die Methode "itemStateChanged" aufgerufen (die Klasse fungiert als entsprechender Listener und wird der Combobox als solcher bekannt gemacht).
Die Methode setzt dann über das CardLayout die aktuelle Card und dazu benötigt Sie den String, welcher beim Hinzufügen der Card zum Layout genutzt wurde. In diesem Fall ist das genau der String der auch in der Combobox steht.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben