Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird?

Thallius

Top Contributor
Hi,

ich habe hier ein sehr merkwürdiges Verhalten meiner Anwendung.

Ich habe ein "MainFrame" (JFrame) das ich bei Anwendungsstart öffne. Wähle ich nun in diesem Frame einen Menupunkt aus, so erstelle ich einen Controller nennen wir ihn "ActionController" und der öffnet ein neues JFrame "ActionFrame". Dieser Controller muss zunächst Daten laden. Deshalb öffne dfer Controller wiederum ein weiteres JFrame nennen wir es "CancelFrame" welches einen Langzeitbalken und einen CancelButton enthält. Dieses Cancelframe bekommt noch das alwaysOnTop Attribut. Nach dem Öffnen des CancelFrames starte ich einen Swingworker, welcher die Daten läd. Ist der Worker fertig, so ruft die done() Methode des Workers ein Methode dataloaded() in meinem ActionController auf. Dieser schließt nun das CancelFrame mit

Code:
if(cancelDialog != null)
    cancelDialog.close();
cancelDialog = null;

Das close im cancelDialog macht einfach nur ein

Code:
if(frame != null)
    frame.setVisible(false);

In dem Moment schließt sich das CancelFrame und das MainFrame kommt in den Vordergrund und überdeckt das ActionFrame, welches vorher noch vor dem MainFrame war.

Selbst wenn ich nach dem canclDialog.close() noch ein actionFrame.toFront() mache, kommt trotzdem das MainFrame nach vorne.

Woran kann das liegen. Wie kann ich das debuggen?

Jede Anregung ist herzlich willkommen.

Gruß

Claus
 

Thallius

Top Contributor
Gerade noch was ausprobiert.

Mache ich nach dem cancelDialog.close() ein

Code:
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                actionFrame.toFront();
            }
        });

dann kommt erst das MainPanel nach vorne und kurz danach das ActionPanel wieder vor. Also schein es ja so, als würde im EDT noch ein MainFrame.toFront() in der Queue hängen. Aber wo kommt das her?
 

Tobse

Top Contributor
--DISCMLAIMER: pure Spekulation! --

Ich vermute mal, da sowohl das CancelFrame als auch das ActionFrame beide "aus dem MainFrame heraus" geöffnet werden versucht Spring nach dem Schließen eines der beiden wieder zum vorherigen Frame, also dem MainFrame, zurückzukehren. Ich denke Swing kann das zuordnen, weil das öffnen der neuen Frames innerhalb des UI-Events passiert. Du kannst versuchen das invokeLater direkt da zu benutzen, wo die beiden neuen Frames geöffnet werden.
 

Thallius

Top Contributor
Erstmal danke für die Antwort aber so ist es ja gerade nicht.

Also das MainFrame hat natürlich einen eigenen Controller mainController. Dieser öffnet das MainFrame. Wird jetzt im MainFrame der Menupunkt aktiviert, schickt dieser per Listener an seinen Controller das Commando. Der mainController erstellt dann einen actionController und dieser öffnet erst das ActionFrame und dann das CancelFrame und startet dann den SwingWorker.

Gruß

Claus
 

Thallius

Top Contributor
Du hast recht.

ich habe jetzt das Öffnen des CancelFrames und das Starten des Swingworkers in ein invokdeLater gesetzt und es funktioniert. Nicht schön aber was will man machen. Anscheinend ist Swing tatsächlich nicht in der Lage festzustellen, dass zwischen dem MainFrame und CancelFrame noch das ActionFrame geöffnet wurde.

btw gibt es eigentlich eine schönere Lösung im runable block this zu benutzen?

Code:
        cancelLister = this; // hier der Fusch, damit ich auf this zugreifen kann
        SwingUtilities.invokeLater(new Runnable() 
        {
            public void run() 
            {
                cancelDialog=new CancelDialog("Download", "Downloading Fieldengineer Tools","LOAD_SYSTEMTOOLS", listFrame.getFrame()); 
                cancelDialog.setCancelActionListener(cancelLister);
                cancelDialog.progressBar.setIndeterminate(true);
                cancelDialog.progressBar.setMaximum(0);
                cancelDialog.frame.setLocationRelativeTo(listFrame.getFrame());

                worker = new DownloadWorker();
                worker.execute();
            }
        });

Gruß

Claus
 

Tobse

Top Contributor
Nicht, dass ich wüste. Ein Lambda erlaubt dir das; aber ich vermute du kannst Lambdas nicht benutzen, sonst wärst du selbst schon drauf gekommen:

Java:
SwingUtilities.invokeLater(() -> {
    // ...
    cancelDialog.setCancelActionListener(this);
    // ...
});
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Wie greife ich auf ein Element zu, welches ich beim Scenebuilder erstellt habe AWT, Swing, JavaFX & SWT 10
S Welches Java Layout sollte ich verwenden? AWT, Swing, JavaFX & SWT 3
P Bewegung eines Balkens in eineum JPanel welches als Spielfeld fungiert AWT, Swing, JavaFX & SWT 2
K Fenster welches den Sieger anzeigt AWT, Swing, JavaFX & SWT 5
ImperatorMing JavaFX Übersicht - Welches Element kann welches Erreignis AWT, Swing, JavaFX & SWT 3
Soloeco LayoutManager Wie und welches Layout nutze ich am Besten? AWT, Swing, JavaFX & SWT 13
M Java FX Welches Accordion Tilded Pane geöffnet? AWT, Swing, JavaFX & SWT 4
B Hilfe welches Layout brauch ich AWT, Swing, JavaFX & SWT 4
M Welches Pattern bei GUI Anwendungen? AWT, Swing, JavaFX & SWT 2
S Größe von Panel verändern welches auf anderem Panel sitzt AWT, Swing, JavaFX & SWT 10
F Welches GUI Plugin bzw. IDE für schnelle und gute Lösungen AWT, Swing, JavaFX & SWT 7
K 2D-Grafik BufferedImage eingelesen, welches Modell?! AWT, Swing, JavaFX & SWT 2
C [GUI] Welches GUI? AWT, Swing, JavaFX & SWT 28
G LayoutManager Layout welches von Links nach rechts anordnet mit TOP Alignment! AWT, Swing, JavaFX & SWT 5
F Timer welches JPanel aktualisiert AWT, Swing, JavaFX & SWT 6
C GUI Entwicklung - welches Pattern? AWT, Swing, JavaFX & SWT 16
E Layout, aber welches? AWT, Swing, JavaFX & SWT 8
N Bilder aus Infos generieren lassen. Welches Framework? AWT, Swing, JavaFX & SWT 8
L Welches Layout? AWT, Swing, JavaFX & SWT 6
S Welches Event beim ändern einer Zelle in einer JTable AWT, Swing, JavaFX & SWT 4
S Welches Event beim auswählen einer Zelle? [JTable] AWT, Swing, JavaFX & SWT 3
GilbertGrape Wie Panel anordnen? Welches Layout? AWT, Swing, JavaFX & SWT 7
J welches Layout? AWT, Swing, JavaFX & SWT 8
A welches programm? AWT, Swing, JavaFX & SWT 17
D Welches Layout für prozentuale Aufteilung: 20% - 60 % - 20% AWT, Swing, JavaFX & SWT 3
G welches Layout sollte ich benutzen? AWT, Swing, JavaFX & SWT 2
D Wie viele Pixel welches Icon? AWT, Swing, JavaFX & SWT 4
D Welches Layout? AWT, Swing, JavaFX & SWT 2
K welches package muss ich angeben um GUIs zu erstellen? AWT, Swing, JavaFX & SWT 5
D JPanel, welches sich per Button vergrößert(in GridBagLayout) AWT, Swing, JavaFX & SWT 2
A Herausfinden welches Document gesetzt ist AWT, Swing, JavaFX & SWT 4
G Welches L&F gesetzt? AWT, Swing, JavaFX & SWT 12
T mousemoved abfrage - aber welches event wenn maus weg? AWT, Swing, JavaFX & SWT 2
lin Welches Objekt für einen About-Dialog verwenden? AWT, Swing, JavaFX & SWT 2
V Welches Event wird von einer JTabbedPane gefeuert? AWT, Swing, JavaFX & SWT 2
B 3 Zeilen die unterschiedlich gross sind -->Welches Layout AWT, Swing, JavaFX & SWT 3
R Welches Layout? AWT, Swing, JavaFX & SWT 4
W welches Layout? AWT, Swing, JavaFX & SWT 3
C Welches Toolkit für GUI AWT, Swing, JavaFX & SWT 2
O Welches Layout ? AWT, Swing, JavaFX & SWT 5
Fragerjava Frame inhalt komplett löschen AWT, Swing, JavaFX & SWT 4
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
Kotelettklopfer Frame ändert Farbe nicht AWT, Swing, JavaFX & SWT 12
P Swing Zufallsbilder auf Frame ausgeben AWT, Swing, JavaFX & SWT 1
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
R 2D-Grafik Massive Frame Drops beim Benutzen von AffineTransformOp AWT, Swing, JavaFX & SWT 2
C Swing F5 Taste neu laden auf ganzen Frame AWT, Swing, JavaFX & SWT 9
J Genutzte Methoden in einen Frame einbauen AWT, Swing, JavaFX & SWT 21
H Swing Frame an andere Klassen weitergeben AWT, Swing, JavaFX & SWT 4
olfibits Swing JavaFX-Frame in JDesktopPane darstellen? AWT, Swing, JavaFX & SWT 2
F Swing Frame nach vorne holen AWT, Swing, JavaFX & SWT 2
J Panel auf Frame positionieren AWT, Swing, JavaFX & SWT 9
K Frame aus anderer Klasse schließen AWT, Swing, JavaFX & SWT 3
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
S Tastatur frame nur nur 1 mal öffnen AWT, Swing, JavaFX & SWT 1
T Swing Java-Frame bei Programmstart NICHT im Vordergrund öffnen AWT, Swing, JavaFX & SWT 2
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
T Frame öffnet nicht AWT, Swing, JavaFX & SWT 1
A Swing GUI - Button soll Frame verändern AWT, Swing, JavaFX & SWT 4
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
M Internal Frame in den vordergrund AWT, Swing, JavaFX & SWT 4
Tausendsassa Frame öffnet aber zeigt keinen Inhalt... AWT, Swing, JavaFX & SWT 10
Tom299 JavaFX Ähnliche Komponente wie der VB6 Frame? AWT, Swing, JavaFX & SWT 2
L Swing Frame in Thread wird nicht gezeichnet AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
D Buttons erscheinen nicht auf Frame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
B Frame hängt sich auf trotz invokeLater AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
M JavaFX wie kann mann sein frame mit einem Icon fersehen? AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
P Frame friert ein AWT, Swing, JavaFX & SWT 6
Z Frame mit Rechteck! AWT, Swing, JavaFX & SWT 16
Messoras JWindow/Frame durch das man durchklicken kann AWT, Swing, JavaFX & SWT 5
M Swing "Frame.setResizable(false);" verschiebt Content? AWT, Swing, JavaFX & SWT 9
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
J JTable aktuallisieren über anderen Frame AWT, Swing, JavaFX & SWT 6
J JTable Zeile anklicken und neues Frame öffnen AWT, Swing, JavaFX & SWT 4
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
B JFrame immer an gleicher stelle auf anderem Frame AWT, Swing, JavaFX & SWT 5
F JAVA-EDITOR: Panel in Frame aufnehmen AWT, Swing, JavaFX & SWT 3
B Swing JMenuBar unten in der Frame setzen? AWT, Swing, JavaFX & SWT 15
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
D Buttons erscheinen nicht auf dem zweiten Frame AWT, Swing, JavaFX & SWT 4
X Swing Größe eines Fensters JFrame / Frame AWT, Swing, JavaFX & SWT 5
BRoll Frame- Video einbinden machbar? AWT, Swing, JavaFX & SWT 6
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
B Frame always on top nur auf anderem Frame AWT, Swing, JavaFX & SWT 9
S Aufteilung von JPanels in einem Frame AWT, Swing, JavaFX & SWT 13
K Options-Frame integrieren (zum zuschalten und wegschalten wie geht man da ran? AWT, Swing, JavaFX & SWT 7
J Frame mit Button erstellen - Warum ist es nötig, Frame über Unterklasse zu erstellen? (Reg Listener) AWT, Swing, JavaFX & SWT 2
N Swing Endlosschleife blockt Frame AWT, Swing, JavaFX & SWT 11
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
N Swing Frame ungewollt transparent! AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben