Swing Wie mit geschlossenen Dialogen verfahren?

Status
Nicht offen für weitere Antworten.

Antoras

Top Contributor
Hallo,

ich hab in meinem GUi mehrere Dialoge, die natürlich irgendwann wieder geschlossen werden müssen. Momentan frag ich mich aber gerade was ich mit denen machen soll wenn sie geschlossen werden.
Bei "normalen" DIalogen (Ja-Nein-Abfrage usw.) hab ich beim schließen einfach ein dispose() ausgeführt und die Dialoge dann beim erneuten Aufruf einfach wieder eingeblendet.

Das gab allerdings mit umfangreicheren Dialogen, bei denen man bspw. Textfelder ausfüllen musste, Probleme, da diese beim wieder einblenden nicht auf den Anfangswert zurückgesetzt waren.

Was ist hier jetzt die sinnvollste Vorgehensweise die Dialoge wieder zurückzusetzen? Alle Änderungen auf den Anfangswert zurücksetzen, oder das Objekt auf "null" setzen und beim erneuten Gebrauch wieder mit Anfangswerte beladen. Letzere Methode geht einfacher und so würde ich es jetzt auch machen. Ich frag trotzdem, da es vllt. ja noch eine "geschicktere" Lösung gibt.
 
Zuletzt bearbeitet von einem Moderator:

SebiB90

Top Contributor
Ich würde eine clear-Methode einbauen, die alle Felder zurücksetzt. Finde ich besser als ständig den Dialog neu aufzubauen.
 

Antoras

Top Contributor
Eine clear-Methode macht doch viel mehr Arbeit, als das bloße Neuaufbauen der Komponenten. Programmiertechnisch mal gesehen. Von der Prozessorleistung dürfte das aber die bessere Vorgehensweise sein. Aber bei der Leitung heutiger Prozessoren ist das vernachlässigbar. ;)

Na ja, wahrscheinlich ist es sowieso egal wie ich vorgehe.
 

Antoras

Top Contributor
Glaube nicht, das er es meint.
Instanzieren heißt eine neue Instanz von einer Klasse erzeugen ;)
Ja schon, aber die Instanz erstelle ich ja schon beim ersten Aufruf meiner Klasse. Danach initialisier ich sie ja mit meinem Dialog, setze sie beim schließen des Dialogs weider auf "null" und initialisiere sie beim erneuten Aufruf des Dialoges noch einmal. Dazu muss ich ja keine neue Instanz erstellen, diese bleibt ja die Selbe.
Oder verwechsel ich da jetzt was?
Und was sind schon die paar Zeilen Code für ne clear Methode? Hättest schneller fertig gehabt als diese Frage hier *g*
Ja, eigentlich war die Frage sinnlos. Ich hab sie eigentlich nur gestellt, weil ich mich gefragt hatte, ob es vllt. einen bestimmten "Stil" gibt, den man als Programmierer einhalten sollte.
Aber das dürfte auch nebensächlich sein. Schließlich ist das wichtigeste ja, dass das Programm läuft und nicht, dass jeder versteht was ich da jetzt programmiert hab - wobei man das auch nicht außen vor lassen sollte.
 

SebiB90

Top Contributor
Ja schon, aber die Instanz erstelle ich ja schon beim ersten Aufruf meiner Klasse. Danach initialisier ich sie ja mit meinem Dialog, setze sie beim schließen des Dialogs weider auf "null" und initialisiere sie beim erneuten Aufruf des Dialoges noch einmal. Dazu muss ich ja keine neue Instanz erstellen, diese bleibt ja die Selbe.
Oder verwechsel ich da jetzt was?
Du verwechselst da was ;)
Was du meinst ist deklarieren. Da ist das richtig, du deklarierst die variable nur einmal so:
Java:
JDialog myDialog;
Damit deklarierst du die variable myDialog als ein JDialog.
Instanzieren wäre das
Java:
new JDialog()
Also einfach eine neue Instanz erstellen. Und mit dieser neuen Instanz initialisierst du die Variable
Java:
myDialog = new JDialog();

Ja, eigentlich war die Frage sinnlos. Ich hab sie eigentlich nur gestellt, weil ich mich gefragt hatte, ob es vllt. einen bestimmten "Stil" gibt, den man als Programmierer einhalten sollte.
Aber das dürfte auch nebensächlich sein. Schließlich ist das wichtigeste ja, dass das Programm läuft und nicht, dass jeder versteht was ich da jetzt programmiert hab - wobei man das auch nicht außen vor lassen sollte.
Naja, man sollte es sich schon angewöhnen so zu programmieren, dass es verständlich ist. Zumindest wenn man Softwareentwickler werden will.
Was jetzt die Best Practise in dem Fall wäre, kann ich dir nicht sagen. Wenn du es eh nur alleine programmierst, kannst du es machen wie du willst. Beides bringt dich zum Ziel ;) Ich persönlich würde aber eine clear-Methode bevorzugen.
 

dvid85

Aktives Mitglied
also ich hab eine "statische klasse" mit dialogen. meine dialogsammlung so zu sagen.

und dann rufe ich z.b. MyDialogs.showAboutDialog(); auf.

das ist doch dann jedes mal neu instanziieren, oder?
 

Antoras

Top Contributor
@SebiB90

Danke, dass du mich aufgeklärt hast. Muss gleich nochmal in meine Bücher reingucken. Hab da wohl was falsch verstanden...
 

dvid85

Aktives Mitglied
Kommt auf die Implementierung der Methode drauf an.
Zeig mal wie die aussieht ;)

naja ungefähr so

Java:
public class MyDlgs{

public void showDialog(){
JDialog d = new JDialog();
//...
d.setVisible(true);
}
}

mit aufruf MyDlgs.showDialog();

nochmal zum verständnis:
1. wird die klasse MyDlgs instanziiert? oder wie nennt man das im statischen fall?
2. der dialog d wird doch durch den new-Aufruf instanziiert, oder sind wir jetzt alle verwirrt?
 

Meru

Bekanntes Mitglied
An deiner Klasse ist nichts statisch im eigentlich programmierer-static-code.

Bei deiner Klasse musst du immer erst ein Objekt dieser Klasse erstellen (MyDlgs instanziieren) um auf die Methode showDialog() zugreifen zu können. Des Weiteren erzeugst du jedes mal ein neues Objekt vom Typ JDialog (new ...)

Statisch würde das wie folgt aussehen:
Java:
public class MyDlgs{
 
public static void showDialog(){
JDialog d = new JDialog();
//...
d.setVisible(true);
}
}

Nun brauchst du MyDlgs nicht mehr instanziieren, sondern kannst direkt mit MyDlgs.showDialog() aufrufen. Aber das Problem, dass du immer eine neue Instanz von dem Objekt erzeugst, bleibt.
 

SebiB90

Top Contributor
nochmal zum verständnis:
1. wird die klasse MyDlgs instanziiert? oder wie nennt man das im statischen fall?
2. der dialog d wird doch durch den new-Aufruf instanziiert, oder sind wir jetzt alle verwirrt?
1. Wenn du auf eine Klasse statisch zugreifst, instanzierst du diese nicht.
2. Eine Variable wird nicht instanziert sondern initialisiert. Du instanzierst die Klasse JDialog und mit dieser Instanz initialisierst du die Variable d (das habe ich jetzt aus keinem Buch oder so, sondern mein Verständnis, wie es mir richtig erscheint, ich hoffe da ist kein Fehler drin)
 

andre111

Bekanntes Mitglied
Man kann dem Dialog auch einen WindowListener hinzufügen und sobald der Dialog geschlossen wird, mithilfe von windowClosing alles auf die Anfangswerte zurücksetzen.
 

SebiB90

Top Contributor
Man kann dem Dialog auch einen WindowListener hinzufügen und sobald der Dialog geschlossen wird, mithilfe von windowClosing alles auf die Anfangswerte zurücksetzen.
Könnte man machen, aber nicht unbedingt immer sinnvoll.
Vorallem bei modalen Dialogen bei denen man nach dem schließen erst auf die Daten zugreifen will ;)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben