# In einem JFrame Menüs & . während der Laufzeit verändern



## magix (21. Feb 2005)

Hallo erstma,

ich habe folgendes problem. Ich möchte mir einen JFrame machen, der halt über ein Menübar gesteuert wird.
Wenn ich z.B. das Menü Datei->hinzufügen drücke soll im Frame meine Textfelder und Buttons kommen und die Menübar soll sich dann auch verändern. Hab aber leider keine Ahnung wie ich das realisieren soll. JFrames und alles drum und dran krieg ich hin aber das nicht.

Im Forum habe ich bis jetzt dazu noch nichts gefunden.

Danke schon mal im voraus

magix


----------



## Beni (21. Feb 2005)

Irgendwie so?

```
JMenuBar bar = ...
JMenu menu = new JMenu( "Neues Menu" );
bar.add( menu );
menu.add( new JMenuItem( "Neuer Eintrag" );
```

Sonst müsstest du deine Frage irgendwie konkretisiren... :bahnhof:


----------



## Sky (21. Feb 2005)

Also, falls sich die Menü von Mal zu Mal sehr unterscheiden, so kannst Du dir auch für die verschiedene Fälle jeweils eine Menubar erstellen und dann setzen per *setJMenuBar*


----------



## magix (21. Feb 2005)

Beni hat gesagt.:
			
		

> Irgendwie so?
> 
> ```
> JMenuBar bar = ...
> ...



Nein,

ich meine, wenn ich diesen "Neuer Eintrag" im Menü anklicke, dann soll das aktuelle Menü verschwinden
und ein neues JMenu soll erstellt werden und dazu dan auch noch wahrscheinlich in einem neuen Panel Textfeld,
Button usw.

versteht du jetzt was ich meine.

MfG


----------



## Beni (21. Feb 2005)

Zum entfernen gibt es bei allen Containern Methoden wie "remove( irgendwas )", "removeAll", ...
Und Hinzufügen funktioniert mit den "add"-Methoden...

Tja, jetzt musst du "nur" eine Logik bauen, welche diese Methoden aufruft (sry, ich weiss jetzt nicht, wie ich dir da gross helfen soll).


----------



## magix (22. Feb 2005)

Das mit dem remove geht irgendwie nicht, dann bleibt bei mir das Programm stehen, aber ich habe ein neues Problem, wenn ich jetzt ein neues Menü starte, aktualisiert es sich im Frame nicht ich muss erst das FrameFenster vergrössern oder verkleinern, damit es sich aktualisiert, wie kann ich das erreichen?

Hier ist mein Code
Die Frame Klasse:

```
public class StartGui extends JFrame{
	StartMenue menue1;
	StartMitarbeiterMenue menue2;
	
	public StartGui(){
		this.getContentPane().setLayout(new BorderLayout());
    	this.setSize(new Dimension(400, 300));
    	this.setTitle("Verrechnungs Tool");
    	
    	menue1 = new StartMenue(this);
	}
	
	public void mitarbeiterMenue(){
		menue2 = new StartMitarbeiterMenue(this);
	}
	
	public void startMenue1(){
		menue1 = new StartMenue(this);
	}
}
```

Das Startmenü:

```
public class StartMenue {

	StartGui frame = null;
	
	private JMenuBar menuBar = new JMenuBar();
  
	private JMenu menuFile = new JMenu();
	private JMenuItem menuFileNew = new JMenuItem();
	private JMenuItem menuFileSave = new JMenuItem();
	private JMenuItem menuFileExit = new JMenuItem();
	private JMenuItem menuFileOpen = new JMenuItem();
  
  	private JMenu menuFile2 = new JMenu();
	private JMenuItem menuFile2Import = new JMenuItem();
	private JMenuItem menuFile2Delete = new JMenuItem();
  
	private JMenu menuFile3 = new JMenu();
	private JMenuItem menuFile3About = new JMenuItem();
  
	public StartMenue(StartGui derFrame) {
		frame = derFrame;
		frame.setJMenuBar(menuBar);
		
		menuFile.setText("Datei");
    	menuFileExit.setText("Mitarbeiter");
    	menuFileNew.setText("Neu");
    	menuFileSave.setText("Speichern");
    	menuFileOpen.setText("Öffnen");
    
    	menuFile2.setText("Bearbeiten");
    	menuFile2Import.setText("Importieren");
    	menuFile2Delete.setText("Löschen");
    
    	menuFile3.setText("Info");
    	menuFile3About.setText("Über");
    	
    	menuBar.add(menuFile);
    	menuFile.add(menuFileNew);
    	menuFile.add(menuFileOpen);
    	menuFile.add(menuFileSave);
    	menuFile.add(menuFileExit);
    
    	menuBar.add(menuFile2);
    	menuFile2.add(menuFile2Import);
    	menuFile2.add(menuFile2Delete);	
    	
    	menuBar.add(menuFile3);
    	menuFile3.add(menuFile3About);
    	
    	menuFile3About.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //System.out.println("3333");
                frame.mitarbeiterMenue();
            }
        });
	}
}
```

und eine anderes Menü:

```
public class StartMitarbeiterMenue {

	StartGui frame = null;
	
	private JMenuBar menuBar = new JMenuBar();
  
	private JMenu menuFile = new JMenu();
	private JMenuItem menuFileNew = new JMenuItem();
	private JMenuItem menuFileSave = new JMenuItem();
	private JMenuItem menuFileOpen = new JMenuItem();
  
	public StartMitarbeiterMenue(StartGui derFrame) {
		frame = derFrame;
		frame.setJMenuBar(menuBar);
		
		menuFile.setText("Datei");
    	menuFileOpen.setText("Mitarbeiter suchen");
    	menuFileNew.setText("Mit löschen");
    	menuFileSave.setText("zurück");
    	
    	menuBar.add(menuFile);
    	menuFile.add(menuFileNew);
    	menuFile.add(menuFileOpen);
    	menuFile.add(menuFileSave);
    	
    	menuFileSave.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                //System.out.println("3333");
                //frame.removeAll();
                frame.startMenue1();
            }
        });
	}
}
```


----------



## magix (22. Feb 2005)

Puh hingekriegt,

Ich versuchs die ganze Zeit mit frame.getContentPane.validate();
aber stattdessen brauchte ich nur frame.validate();


```
public class StartGui extends JFrame{
   StartMenue menue1;
   StartMitarbeiterMenue menue2;
   
   public StartGui(){
      this.getContentPane().setLayout(new BorderLayout());
       this.setSize(new Dimension(400, 300));
       this.setTitle("Verrechnungs Tool");
       
       menue1 = new StartMenue(this);
   }
   
   public void mitarbeiterMenue(){
      menue2 = new StartMitarbeiterMenue(this);
      this.validate();
   }
   
   public void startMenue1(){
      menue1 = new StartMenue(this);
      this.validate();
   }
}
```
aber trotzdem danke an alle.

MfG

magix


----------

