# Button (ActionPerformed) soll neues JFrame erzeugen



## oomworld (13. Jan 2010)

Hallo liebe Community ,

Also ich habe folgendes Problem an meinem Programm.

Ich möchte so langsam ein zweites JFrame erzeugen. Dazu habe ich einen "Button"  mit einem ActionPerformed Event versehen, jetzt habe ich ein weiteres JFrame angelegt und Design und Programmiert. Wenn ich in meinem Sogenanntem "Hauptmenu" auf meinen "Button" klicke möchte ich das es dass zweite JFrame öffnet.:bahnhof:

Meine Frage:

Was muss ich in der // TO DO  Zeile reinschreiben damit es sich beim klicken des Buttons öffnet.
Ich habe es mit neuerJFrame(); versucht aber das war ein Schuss in den Ofen !

ich hoffe ich konnte meine Frage verständlich stellen und hoffe auf eure Unterstützung


----------



## Michael... (13. Jan 2010)

Wie zeigst Du denn den ersten Frame an? ;-)
meinNeuerFrame.setVisible(true)

Sicher, dass ein neuer Frame angezeigt werden soll, oder eher ein Dialog


----------



## oomworld (13. Jan 2010)

Hallo Michael vielen Dank für deine Antwort,
zu deiner Frage:
Also es soll ein JFrame sein weil der erste JFrame mein Hauptmenü ist, wenn ich dort auf ein Button klicke soll sich eine neue Eingabemaske öffnen.

Also Ich Programmiere mit Netbeans,

Ich gehe in meinem Projekt auf "Neu Klasse" und dann auf Swing GUI, dannach JForm, nach dem ich einen Namen für meine Klasse angegeben habe öffnet sich meine Klasse mit einem GUI Builder, ich muss einfach nur die Buttons, Checkboxen, etc.
Auf die Oberfläche ziehen anpassen und dann einem Event zuweisen oder auch nicht.

z.B.
Um ein Label umzubennen wenn ein Button gedrückt wird würde ich z.B. den Button auf Action Performed setzen
und als befehl schreiben


JLabel.setText(" HALLO WELT ");



Jetzt meine Frage:
Was braucht mein Button für ein Befehl damit er mein "Zweites" JFrame das ich auch Design habe öffnet.


----------



## Michael... (13. Jan 2010)

Ich weigere mich seit Jahren erfolgreich GUI - Builder zu verwenden. Von daher kann ich Dir nicht sagen wie Du genau in NetBeans da vorgehen musst.
Aber prinizipiell hast Du entweder bereits eine Instanz des zweiten Frames und rufst dann statt

```
label.setText(" HALLO WELT ");
```


```
meinZweiterFrame.setVisible(true);
```
 auf.
oder Du erstellst eine neue Instanz

```
new MeinZweiterFrame().setVisible(true);
```

Wenn's um eine Eingabemaske geht, würde ich perönlich einen Dialog verwenden.

Wenn Dein Code nicht allzu umfangreich ist, kannst Du ihn ja mal posten.


----------



## oomworld (13. Jan 2010)

danke perfekt das hat geklappt, nur wenn ich jetzt oben das Fenster schließe dann schließt sich leider mein ganzes Programm, es sollte sich eingentlich nur das Fenster schließen.

ich habe es mal mit:
new MeinZweiterFrame().setVisible(false); mit einem Button im 2. JFrame versucht aber leider schließt
sich das Frame dann nicht.:noe:


Wie kann ich verhindern das sich das ganze Programm beendet :bahnhof: 

Darf ich fragen warum du dir soviel arbeit machst alles selbst zu schreiben??
Dann musst du ja sogar die Koordinaten eingeben wo etwas platziert sein soll etc. :rtfm:


----------



## Michael... (13. Jan 2010)

oomworld hat gesagt.:


> Darf ich fragen warum du dir soviel arbeit machst alles selbst zu schreiben??


unter anderem darum: ;-)


oomworld hat gesagt.:


> nur wenn ich jetzt oben das Fenster schließe dann schließt sich leider mein ganzes Programm, es sollte sich eingentlich nur das Fenster schließen.


Von dem Code den ich bisher von GUI - Buildern gesehen habe, bin ich nicht begeistert. Ist mir zu unübersichtlich, zu lang und ohne den entsprechenden GUI - Builder schlecht wartbar.
Und ich finde nicht, dass es viel Arbeit macht sowas selbst zu schreiben in den meisten Fällen bestehen meine GUIs sowieso aus einer Handvoll Komponenten und als LayoutManager verwende ich meistens BorderLayout und/oder GridLayout --> Aufwand für die GUI ca. 5-10 min, wenn ich einen eigenen LayoutManager schreibe schon mal ein bisschen länger. Ich weiss nicht wie lange man benötigt sich so ein Layout zusammen zu clicken, aber da können sicher mal 5 min vergehen.

Zum eigentlichen Problem:
Schau mal, ob Du im Umfeld des zweiten Frames ein 
	
	
	
	





```
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
```
 findest und ersetze es durch 
	
	
	
	





```
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
```

Im Fall der Erzeugung einer neuen Instanz könntest Du folgendes machen:

```
MeinZweiterFrame mzf = new MeinZweiterFrame();
mzf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
mzf.setVisible(true);
```

Mit folgendem Code erzeugst Du ja nur einen neue Instanz, die Du eben nicht anzeigst, die alte Instanz bleibt davon unberührt.


oomworld hat gesagt.:


> new MeinZweiterFrame().setVisible(false);



Oder Du verwendest JDialog


----------



## oomworld (13. Jan 2010)

vielen Dank Michael  das hat jetzt prima funktioniert! :applaus:

hast du für mich gute Tipps wie ich das auch lernen kann "ohne Builder" ? 
Hast du für mich einen Lektüren Tipp ? eBook, Buch, Internetseite ?:rtfm:

vielen Dank :applaus:


----------



## Michael... (13. Jan 2010)

üben, üben, üben ;-)

Grundsätzlich sollte man sich mit LayoutManagern auseinandersetzen Javainsel8 LayoutManager
Meine Favoriten sind da Border- und GridLayout, ab und an das FlowLayout und wenn's sein muss das GridBagLayout.
Mit Hilfe dieser Layouts und ineinander verschachtelten Panels kann man eigentlich (fast) ohne Probleme beliebige Layouts erzeugen.

Ansonsten kann man sich ja mal in diversen Codes anschauen, wie dort die GUI aufgebaut wird

Im openbook von Galileo Computing gibt's ein umfangreiches Kapitel zum Thema Swing:
Javainsel8 Swing


----------



## oomworld (14. Jan 2010)

ahhh Okay ich verstehe jetzt , dann werd ich mir das mal als nächstes Vornehmen und ebenfalls einen GUI Builder meiden :applaus:

super hilfe wiedermal vielen Dank! vlt. kann ich irgendwann auch mal jemadem helfen :bae:!


----------

