und zwar rufe ich in meinem Hauptprogramm folgendes auf:
Code:
new neuesFenster().setVisible(true);
Die Klasse dazu sieht so aus:
Code:
class neuesFenster extends JDialog {
public neuesFenster() {
...
}
}
später wird diese Klasse mit...
Code:
dispose();
zerstört.
Leider funktioniert das nicht so ganz, soll heissen, dass wenn man die Klasse erneut aufruft, der inhalt in den eingaben des 'alten' Fensters erhalten bleibt. Kann man es irgendwie anders machen, ein Fenster zu 100% zu 'zerstören' ?
Wenn du jedesmal ein neues Fenster mit new erzeugst,
bekommst du auch ein frisches. Könnte es sein
das du den Inhalt von Textfeldern etc. aus statischen Variablen beziehst?
Ja was denn nun! Widerlege erstmall Andrés und thE_29's Behauptung
in dem du uns zeigst wie du es in Java schaffst globale Variablen
zu definieren ohne static (wobei auch statische (Klassen-)Variablen
natürlich nicht global sind)
ja, genau so, nur dass den Variablen noch kein Inhalt zugewiesen wird, sie aber deklariert sind.
Während das Programm läuft, werden die Variablen mit Inhalten gefüllt (sind vom Typ 'JTextField').
Wird die Klasse mit ...setVisible(false) und dispose() 'geschlossen' und später wieder aufgerufen (setVisible(true)), dann sind noch die Inhalte der Variablen vorhanden. Und das ist genau das Problem. Wenn die Klasse wirklich 'zerstört' würde, wären danach die Inhalte der Variablen leer, oder ?
ja, genau so, nur dass den Variablen noch kein Inhalt zugewiesen wird, sie aber deklariert sind.
Während das Programm läuft, werden die Variablen mit Inhalten gefüllt (sind vom Typ 'JTextField').
Wird die Klasse mit ...setVisible(false) und dispose() 'geschlossen' und später wieder aufgerufen (setVisible(true)), dann sind noch die Inhalte der Variablen vorhanden. Und das ist genau das Problem. Wenn die Klasse wirklich 'zerstört' würde, wären danach die Inhalte der Variablen leer, oder ?
Spooky meint natürlich setVisible(true) auf die Instanz, nicht auf die Klasse.
Aber daß es funktioniert auf ein Fenster das disposed wurde
ein setVisible(true) machen zu können ist zumindest nicht im
Sinne des Erfinders. Zwei Lösungen:
1) Statt "erneut setVisible(true)" aufzurufen erstmal eine neue Instanz via new kreieren.
2) Sauberer: eine Methode verpassen die die Initialisierung der Textfelder durchführt.
und diese vor dem setVisible(true) aufrufen. Dann aber auf keinen Fall
zuvor dispose aufrufen.
Code:
public MyFrame extends JFrame {
JTextField tf;
public MyFrame() {
initGui();
}
void initGUI() {
tf = new JTextField("...");
}
}