Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

Java-ein zweites Fenster öffnen





Frage

Hallo an alle, ich hab ein Problem bezüglich Java. Habe eine Classe geschrieben, welche ein Fenster im BorderLayout öffnet. Dieses BorderLayout enthählt mitunter ein Button, welcher ein zweites Fenster öffnen soll. Dieses zweite Fenster ist eine schon Vorhandene Klasse. Also: ich möchte dem Button "zweites Fenster öffnen" sagen, dass er eine andere Klasse (wo auch ein Frame im BorderLayout vorhanden ist) öffnen soll. So, dass ich letzten endes zwei Fenster geöffnet habe UND, wenn ich das zweite Fenster schließe, sich das erste Fenster nicht gleich mit schließt. Ich hoffe, die Beschreibung reicht euch aus. Bitte helft mir, denn ich weiß nicht mehr weiter. Danke im Vorraus und Grüße, Steffie

Antwort 1 von mr_x_hacker

Hi,

wie öffnest Du denn das erste Fenster? Irgendwo steht auf jeden Fall "setVisible(true)" - ich bevorzuge es z.B. im Konstruktor der Fenster-Klasse :-)

In diesem Fall erzeugst Du also in der actionPerformed() zum entsprechenden Button eine neue Instanz der zweiten Klasse, und das Fenster sollte aufgehen und auch unabh. vom ersten wieder geschlossen werden können.
Du kannst auch einfach einen neuen Frame anlegen, und diesen dann manuell mittels "frame.setVisible(true)" anzeigen lassen...

Soweit hat die Beschreibung gereicht - wenn's das nicht war, bitte genauer sagen was Du willst :-)

Ciao Sascha


Antwort 2 von Steffie

Hallo, Du hast genau den Punkt getroffen, Danke dafür. Nur, eine Frage hab ich dazu noch (siehe am Schluss)

das erste Fenster öffne ich mit setVisible(true); dies steht auch im Konstruktor der Fenster-Klasse

1)Ich hab es so gelöst, aber das ist keine neue Instanz zu einer zweiten Klasse
2)in dieser Variante schließt sich das erste und das zweite Fenster.
3)in der actionPerformed() zum entsprechenden Button sthet

-->
Button neues_Fenster = new Button("öffnen");
. . .
. . .
. . .
public void actionPerformed(ActionEvent ae)
{
else if (ae.getSource() == neues_Fenster)
{
Frame wnd = new Frame("Fenster schließen");
wnd.addWindowListener(new WindowClosingAdapter(true));
wnd.setSize(400,300);
wnd.setVisible(true);
}
}


Jetzt meine Frage:
Wie erszeuge ich in der actionPerformed() zum entsprechenden Button eine neue Instanz der zweiten Klasse? Was muss ich dabei alles beachten, damit dies auch funktioniert? Also, muss ich noch zusätzlich zB. die zweite Klasse in die erste Klasse (mit extends oder import) einbinden?

wieder einmal Danke im Vorraus.
ciao Steffie

Antwort 3 von mr_x_hacker

Hi,

also zuerst mal:
WindowClosingAdapter(boolean) ist aber nix aus der Java-API, hmm?:-)
Wenn es das ist was ich in Google gefunden hab, dann führt es vermutlich automatisch einen System.exit() aus, wonach logischerweise alle Fenster zu sind...

Ansonsten ist Deine Methode wunderbar, sofern Dir diese Art der Frame-Erzeugung ausreicht - eine eigene Klasse für's 2te Frame muß nicht von der ersten abgeleitet sein, sofern sie nichts miteinander zu tun haben sollen...

Eigentlich muß Du nur den WindowListener des 2ten Frames überarbeiten, so dass er Dir nicht alles zumacht, sondern nur das 2te Fenster.

Beispiel:

wnd.addWindowListener(new WindowAdapter(){
	public void windowClosing(WindowEvent we) {
		Frame f = (Frame)we.getSource();
		f.dispose();
	}
});


Ciao Sascha


Antwort 4 von semi

frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
sollte ausreichen.



Antwort 5 von mr_x_hacker

Ja, bei JFrames schon - ich hab halt mal AWT unterstellt, nachdem in ihrem Beispiel-Code kein 'J' zu finden war... ;-)

Ciao Sascha

Antwort 6 von Steffie

Hallo,
sorry ersteinmal für meine lange Abwesenheit und danke für die Unterstützung.
Das mit dem Schließen geht einwandfrei.
Ja, ich mach dies noch auf AWT-Basis. Aber @semi, danke für dein Tipp.

Aber nun zu dem Problem mit der zweiten Klasse (welche ein zweites Fenster öffnet). Diese soll aus der ersten Klasse gestartet werden.


else if (ae.getSource() == neues_Fenster)
{
Frame wnd = new Frame("Fenster schließen");
wnd.setSize(400,300);
wnd.setVisible(true);

wnd.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we)
{
Frame f = (Frame)we.getSource();
f.dispose();
}
});
}

Was muss zwischen der ersten und letzten eckigen Klammer rein, damit ich eine zweite Klasse (Name: Fenster2.java) öffnen kann?

Entschuldigt diese "Anfängerfragen" und ich freu mich auf eure Hilfe.

Gruß, Steffie

Antwort 7 von Steffie

... noch etwas

muss diese zweite Klasse erst übersetzt werden, oder kann ich sie auch einbinden ohne dass ich sie extra übersetze?

Antwort 8 von mr_x_hacker

Hi,

wenn Du eine 2te Klasse Fenster2.java schon geschrieben hast, solltest Du an beliebiger Stelle (also z.B. in der actionPerformed) mittels

new Fenster2();

eine Instanz davon erzeugen können, die dann ensprechend sichtbar wird, wenn in deren Konstruktor setVisible(...) aufgerufen wird.

Übersetzen macht der Compiler automatisch wenn Du die erste Klasse übersetzt.
Ach ja, die Fenster2 sollte im gleichen Verzeichnis liegen wie die erste, sonst mußt Du sie importieren...

Ciao Sascha

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: