Jframe aus JDialog starten

sh07

Mitglied
Hallo,
ich programmiere ein GUI mit mehrere Fenstern. Alle Fenstern sind bis jetzt in JDialog. Nun brauche ich aber eine Klasse mit JFrame. Die Klassen mit JDialog laufen ohne Problem durch. Die Klasse mit JFrame läuft auch in einem Testprogramm ohne Problem.
Ich möchte nun aber gerne die zusammen binden.
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.File;
public class JFrameKlasse extends JFrame {
    setTitle("JFrame Klasse");
    setLocation(100, 100);
    setSize(600, 500);
    //some code ....
    setVisible(true);
    validate();

    addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
           //some code ....
        }
    });
}
Die Klasse, die JFrameKlasse aufruft. Sie selbst liest nur Dateien und bearbeitet die Informationen.
Java:
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
public class AndereKlasse {
    //Dateien lesen und informationen sameln
    private void test2(){
		JFrameKlasse fe=new JFrameKlasse();
		//fe.pack();
		//fe.setVisible(true);
	}
}
Mein Problem ist nun, dass obwohl die Klasse JFrameKlasse gestartet und das Fenster auch korrekt erzeugt wird, es geht aber im Hintergrund und ich kann das Fenster nicht aktivieren, schließen oder irgendetwas damit machen.
Kann jemand mir sagen, was ich da falsch mache?
Danke
 
Zuletzt bearbeitet:
Mein Problem ist nun, dass obwohl die Klasse JFrameKlasse gestartet und das Fenster auch korrekt erzeugt wird, es geht aber im Hintergrund und ich kann das Fenster nicht aktivieren, schließen oder irgendetwas damit machen.
Kann jemand mir sagen, was ich da falsch mache?
Danke

Beim JFrame das setVisible(true) immer als letztes aufrufen, wenn alle anderen Komponenten erzeugt wurden. Du hast geschrieben, dass du hauptsächlich mit JDialogs arbeitest. Wenn die auf modal gesetzt sind, kannst du nichts anderes im Programm machen, erst wieder, wenn der JDialog geschlossen wird.
 
Danke das hat sehr viel geholfen.
Aber ich habe noch Probleme damit:
wenn ich nur JDialog mit
Java:
this.setModal(false)
umstelle, dann kann ich das neue Fenster auf machen und darin schreiben, aber leider die Menü-Leisten und das schließen des Fensters trotz
Java:
 f.setDefaultCloseOperation(WindowConstants.HIDE_ON_CLOSE);
in the JFrameKlasse funktionieren nicht.
Wenn ich aber JDialog mit
Java:
this.setVisible(false);
this.setModal(false)
new JFrameKlasse(this);
umstelle und die Objekte der klasse JFrameKlasse mit colseIt() schließe
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.io.File;
public class JFrameKlasse extends JFrame {
    setTitle("JFrame Klasse");
    setLocation(100, 100);
    setSize(600, 500);
    //some code ....
    setVisible(true);
    validate();
 
    addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
           closeIt();
        }
    });

   private void closeIt() {
       //some code ...	
       this.objektKlasseJDialog.setModal(true);
       this.objektKlasseJDialog.setVisible(true);
       this.setVisible(false);
   }
}
dann funktionieren die Elemente der jFrame richtig. Aber es gibt wieder ein paar Probleme:
1) Nach schließen (egal ob ich es mit closeIt() oder Schließknopf mache) vom Fenster der JFrameKlasse, das Fenster geht im Hintergrund ist aber immer noch sichtbar aber nicht benutzbar.
2) Nach dem ich das Objekt der Klasse mit JDialog wieder sichtbar mache, brauche ich nun eine Weil-Schleife danach. Vorher hat er gewartet bis ich dieses Dialog schließe so, dass ich keine Schleife brauchte.
3) Mir wäre lieber das Dialog sichtbar zu halten. Hat aber nicht die höchste Priorität.
Ich hoffe das ich es einigermaßen deutlich erklären könnte, falls doch nicht bitte nach fragen.
Vielen Dank für eure Hilfe.
 
Zuletzt bearbeitet:
1) Nach schließen (egal ob ich es mit closeIt() oder Schließknopf mache) vom Fenster der JFrameKlasse, das Fenster geht im Hintergrund ist aber immer noch sichtbar aber nicht benutzbar.
Das Problem habe ich gelöst mit
[Java]
private void closeIt() {
//some code ...
this.setVisible(false);
this.objektKlasseJDialog.setModal(true);
this.objektKlasseJDialog.setVisible(true);
}
[/Java]
Ist doch eigentlich klar 😳
 

Zurück
Oben