Java JFrame aus eine anderen Klasse beenden?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Da gabs diese Zugriffsrechte. Siehe hier:

http://openbook.rheinwerk-verlag.de/javainsel/javainsel_05_002.html#dodtp2f2a18cf-abe8-48d5-843d-dc7a54b6645b

Durch z.B. public vor der JFrame-Variable kannst du dafür sorgen, dass die JFrame-Variable überall sichtbar ist. Also dass du einfach mit . darauf zugreifen kannst. Also z.B. JFrame.frame.close().

Nun um ein bisschen weiter auszuführen:

Es gibt das objektorientierte Design. Und das besagt unter anderem, dass jede Klasse eine feste Aufgabe haben sollte. Und da auch keine andere Klasse reinpfuschen sollte.

In diesem Beispiele: Hast du eine Klasse mit der Aufgabe "Fenster", dann hat keine andere Klasse etwas an der JFrame zu suchen. Deshalb ist public ziemlich schlechter Stil - und alles sollte private sein.

Wirst häufig über Getter/Setter Prinzip stolpern. Das ist aber der gleiche Schrott in einen Sack getan und vor die Tür gestellt.

Wirklich "guter" Stil ist es zu sagen: Deine Loginframe hat eine Aufgabe: Beende dich. Aufgabe gleich Funktion. Das heißt, du fügst eine Funktion in Loginframe wie

public void close(){

frame.close();

}

ein. Und rufst bei Bedarf dann diese Funktion auf.

Ein weiterer Hinweis. "Loginframe JFrame = new Loginframe();" ganz schlechte Benennung. Loginframe (oder LoginFrame) ist ok (Klassen immer groß). Objekte aber IMMER klein schreiben. also nenn diese konkrete Loginframe nicht JFrame sondern einfach nur frame. Mit JFrame hast du übrigens zusätzlich Kollision mit der Java JFrame - und das ist böse. Wenn du schon von static-Methoden gehört hast: Da kannst du nämlich auch sagen JFrame.methode() und rufst dann methode von java.awt.JFrame auf...

Gruß

Tuxgamer

Miki2015 
Fragesteller
 30.12.2016, 09:40

Danke! habe es jetzt aber einfach mit einer instance gelöst(public static LoginFrame instance = new LoginFrame(); in die methode publiv LoginFrame wo ich das JFrame erstelle dann ein instance = this; und in der anderen Klasse dann einfach LoginFrame.instance.dispose();

0
tuxgamer  30.12.2016, 10:04
@Miki2015

Das wiederum ist eine ganz schlechte Idee...

static ist immer sehr gefährlich - und sollte nur in ganz durchdachten Fällen eingesetzt werden.

Was funktioniert und so ähnlich ist, wie das was du versuchst (aber auch nur in gewissen Fällen sinnvoll ist; hier denke ich, man kanns so machen) ist das Singleton-Designpattern.

https://de.wikipedia.org/wiki/Singleton\_(Entwurfsmuster)

Das heißt, du schreibst irgendwie so etwas:

public class LoginFrame(){
private static LoginFrame instance = new LoginFrame();
// wichtig: privater Konstruktor!!!
private LoginFrame(){
//(...)
}
// das ist der neue Konstruktor: Wenn LoginFrame haben willst, rufst du nicht new LoginFrame() sondern LoginFrame.get_login_frame() auf.
public static LoginFrame get_login_frame(){
return instance;
}
public void create(){
// hier neue Frame erstellen
}

public void close(){
// hier frame schließen
}

oder so ähnlich.

0
Miki2015 
Fragesteller
 30.12.2016, 09:41

Trotzdem vielen dank für deine laaaange Antwort :D Mit den Java Konventions hab ichs noch nicht so muss die mir umbedingr mal wieder anschauen xD

0

Ob du auf ein entferntes Objekt zugreifen kannst hängt von deiner Programmstruktur ab.

Miki2015 
Fragesteller
 30.12.2016, 09:42

Wow.. danke... jetzt weis ich was ich machen muss kappa

0