Fenster öffnen und schließen

Hi Leute.

Hab da grad ein problem beim öffnen und schleßen von Fenstern.
Ich lerne grad erst Java und ihr werdet das wahrscheinlich als Kleinigkeit sehen… :smile:

Also ich hab das Problem das ich mir ein Fenster gebaut hab mit ein paar Buttons. Nun möchte ich, dass wenn ich auf einen Button drück, sich das aktuelle Fenster schließt und sich ein neues öffnet. Das neue fenster hab ich in einer neuen Klasse schon fertig geschrieben und ich muß es nurnoch öffnen können.

Die Buttons behandel ich auch in einer seperaten Klasse.

Wäre also froh wenn mir jemand sagt wie ich das realiesieren kann.

Dank euch schonmal im vorraus. .-)

Mfg

Jens

Moin

Hab da grad ein problem beim öffnen und schleßen von Fenstern.
Ich lerne grad erst Java und ihr werdet das wahrscheinlich als
Kleinigkeit sehen… :smile:

für swing (JF1 ist Fenster 1, JF2 ist Fenster 2):

JF1.setVisible(false);
JF2.pack();
JF2.setVisible(true);

(Wenn du grössere Dinge schreiben willst sollte man noch über ein JF1.dispose() nachdenken, das muss aber nicht)

cu

Danke!!! Denk mal das wird in den „void“ Teil reinkommen oder?? Kann ich JF1 und JF2 direkt mit dem Klassennamen ansprechen??? Wofür ist das pack eigentlich?? .-)

Da mein Programm schon etwas größer wird würd es ich mal interessieren was ein JF1.dispose() ist. Davon hab ich noch nie was gehört. :smile:

CYA

mit dispose() gibst du den Speicher wieder frei…
mit pack() gibst du den Elementen im Fenster die „optimale“ also die benötigte größe…

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Achso. Gut zu wissen. Ist es nötig den Speicher zu leeren wenn keine Variablen oder so übergeben werden???

Wie bekomm ich denn Zugriff auf die Klasse mit dem neuen Fenster??
Das alte bekomm ich nun geschlossen mit:

private Gut f;
public Aktion(Gut f)
{
this.f=f;
}

public void actionPerformed(ActionEvent e)
{
if(e.getSource() == f.btnNewBorrow)
{
this.f.setVisible(false);
}
}

darunter hab ich auch schon das pack und das setVisible(true) geschreiben aber er will mir das nicht öffnen… Mir fehlt glaub ich die neue Klasse darin. Weiß aber nicht wie ich die darein bekomme… :frowning:

Wenn also jemand noch ne Idee hätte wär ich echt dankbar.

mfg

jens

Hmm, wenn ich dich jetzt richtig verstanden habe möchtest du nur ein „Fenster“ schließen und ein anders öffnen, wäre es da nicht einfacher mit einem „Fenster“ aber verschiedenen Panels zu arbeiten?

Den Speicher mußt du nicht freigeben, denke mal das Prog wird ja nicht soooooooo riesig sein - er wird ja auch automatisch wieder freigegeben wenn die VM runterfährt. Ist aber halt schöner wenn man´s macht…

Da hast du mich schon richtig verstanden. Mit Panels zu arbeiten ist dabei aber nicht einfacher denk ich, da ich insgesamt 5 Buttons habe und jeder zu einem neuen Fenster führen soll. Deswegen ist es meiner meinung nach unumgänglich das ich das mit verschiedenen Fenstern mache. Auch weil die einzelnen Fenster völlig unterschiedliche Funktionen darbieten möchte ich das schon irgendwie getrennt haben.
Die Klassen die ich bis jetzt dafür habe sind diese:

Gut --> Das Hauptfenster
Aktion --> ActionListener
Verwaltung --> das neue Fenster

Der ActionListener: (auszug)

import java.awt.*;
import java.awt.event.*;
public class Aktion implements ActionListener
{
private Gut f;
public Aktion(Gut f)
{
this.f=f;
}
private Verwaltung y;
public Aktion(Verwaltung y)
{
this.y=y;
}

public void actionPerformed(ActionEvent e)
{
if(e.getSource() == f.btnNewBorrow)
{
this.f.setVisible(false);
this.y.setVisible(true);
}

}
}

So wird das alles compiliert aber bei der Ausführung
schließt das Fenster „Gut“ aber beim öffnen von „Verwaltung“ wirft er mir jedemenge Fehler rein.

Wenn ich das richtig sehe, versuchst du einen Ast aufzurufen obwohl du vorher den Baum gefällt hast…

Wenn du ein neues Fenster (ich denke du meinst ein Frame) aufrufen möchtest mußt du die Main methode von der classe aufrufen.

Bei Panels ist es doch egal wie viele Buttons, dann führt halt jeder Button zu einem neuen Panel und was die Panels dann darbieten ist egal…

Versuche es doch mal in der Art:

try
{
Verwaltung f = new Verwaltung();
}
catch (Exception e)
{
e.printStackTrace(System.out);
}


import java.awt.*;
import java.awt.event.*;
public class Aktion implements ActionListener
{
private Gut f;
public Aktion(Gut f)
{
this.f=f;
}
private Verwaltung y;
public Aktion(Verwaltung y)
{
this.y=y;
}

public void actionPerformed(ActionEvent e)
{
if(e.getSource() == f.btnNewBorrow)
{
this.f.setVisible(false);
this.y.setVisible(true);
}

}
}

Hat funktioniert. Versteh das zwar noch nicht so ganz aber hauptsache ist das es funzt.!
mußte nurnoch über dem try das this.f.setVisible(false) setzen und das wars. :smile:

Echt Super. Freu mich riesig da ich da schon seit 3 Tagen dransaß und nie irgendwas geklappt hatte… :smile:

Fertig sieht das so aus:

private Gut f;
public Aktion(Gut f)
{
this.f=f;
}

public void actionPerformed(ActionEvent e)
{
if(e.getSource() == f.btnNewBorrow)
{
this.f.setVisible(false);
try
{
Verwaltung f = new Verwaltung();
}
catch (Exception err)
{
err.printStackTrace(System.out);
}

Eine kleine Frage noch…
wofür ist eigentlich das printStackTrace?
Der gibt doch nur Fehler aus wenn er die klasse Verwaltung nicht finden kann oder??

Wie gesagt, du hast versucht einen Ast anzuzeigen ohne den Baum zu haben.
Das err.printStackTrace(System.out); gibt alle Systemerzeugten Fehlermeldungen aus die hier auftreten können. Er gibt auch fehler aus wenn die erzeugung - aus welchen gründen auch immer - nicht gefunzt hat…

Finds auf jedenfall Prima das du mir das mal erklärt hast.
Lern halt grad erst java und hab vorher nur mit VB gearbeitet.
Java ist da um einiges komplizierter find ich… Vor allem was Fenster bauen angeht .-) Aber trotzdem sehr interessant find ich. :smile:

Habs grad nochmal ohne den try probiert. Läuft auch, findet nur keine Fehler mehr :smile: