# JFrame neu laden



## bicpi (24. Dez 2004)

Ich habe einen JFrame und auf ihm einige Elemente eines Spiel angeordnet, u.a. eine JMenuBar. Aus dieser heraus möchte ich nun das Spiel neustarten können, also der JFrame müsste sich neu aufbauen. Wie kann ich das machen? Kann ich den JFrame zerstören und neu Instanziieren oder gibts was anderes? 

Besten Dank und viele Weihnachtsgrüße !
Phil


----------



## foobar (24. Dez 2004)

Was meinst du denn mit neu aufbauen?
Du kannst den Frame neu zeichnen lassen mit myFrame.revalidate() und myFrame.repaint().


----------



## L-ectron-X (24. Dez 2004)

Du brauchst doch einfach nur einen anderen Inhalt (JPanel) in die ContentPane laden und validieren.


----------



## bicpi (24. Dez 2004)

Eure Tipps bringen mich da auf folgende Idee: Ich baue in den JFrame eine Methode zum aufbauen des Spielbretts und rufe sie aus dem Konstruktor erstmalig auf. Zum neustarten ruf ich sie einfach nochmal aus dem JMenu auf, korrekt?
Nun kommt bei mir zwar, dass diese Methode undefiniert in JFrame wäre, wenn ich versuche sie aufzurufen...aber ich such mal den Fehler.
Eine wichtige Frage wäre noch, was es genau mit dem (re)validieren auf sich hat, was macht das denn und wann muss ich es aufrufen?
Danke schon mal auf jeden Fall


----------



## bicpi (24. Dez 2004)

Also um genau zu sein, versuche ich es nun so (die wichtigen Ausschnite):


```
public class AppWnd extends JFrame{	
	private MenuBoard menuBoard = new MenuBoard(this);
	
	public AppWnd(){
		build("erster Start");
	}
	
	public void build(String text){
		JButton jp = new JButton(text);
		
		Container contentPane = getContentPane();
		
		try{		
			this.setJMenuBar(menuBoard);
			contentPane.setLayout(new GridLayout(3, 1));		
			contentPane.add(jp);
                    }
		catch(Exception e){
			e.printStackTrace();
		}
}

public class MenuBoard extends JMenuBar implements ActionListener{
	private JFrame owner;

	public MenuBoard(JFrame owner){
		this.owner = owner;
         }
	
	public void actionPerformed(ActionEvent event){
		String cmd = event.getActionCommand();
		if(cmd == newstart){
			owner.build("Neustart");
			}
          }
}
```
Aber nun heisst es (in eclipse), dass die Methode build nicht existiert, die ich von actionPerformed aus aufrufen will. Was ist denn da los?


----------



## Roar (24. Dez 2004)

deine variable owner ist ein JFrame. build() gibts aber nur in AppWnd. wenn du die build() methode verwendenn wilslt benutze statt JFrame AppWnd als typ der variable (und im konstruktor parameter natürlich auch)


----------



## L-ectron-X (25. Dez 2004)

validate() rufst Du auf, wenn Du _zur Laufzeit_ die GUI verändert hast, also z.B. einen Button oder ein JPanel hinzugefügt hast. Mit Aufruf der Methode wird ein Neuzeichnen angefordert, so dass die GUI aktualisiert wird.


----------



## bicpi (25. Dez 2004)

Hey ihr seid super, Danke.


----------

