# JFrame im Vordergrund halten



## Mr.Radar (17. Mrz 2010)

Folgendes Problem:

in einem ActionListener wird (vom "Stammfenster" aus) ein neuer (abgeleiteter) JFrame erzeugt, dieser ist dann für einige ms im Vordergrund. Dann wird (beabsichtigterweise) im Stammfenster ein JPanel geändert, wodurch sich dieses scheinbar den Fokus holt. (Dadurch sind dann wohl auch die Aufrufe von #toFront() und #requestFocus() im Konstruktor des neuen JFrames wirkungslos).

Ich hätte aber gern, dass das neu geöffnete Fenster vorne bleibt - any ideas? (#setAlwaysOnTop() möchte ich nicht - denn der Frame soll ja nicht immer vorne sein)


----------



## SuperSeppel13 (17. Mrz 2010)

Benutz doch JDialog. Funktioniert im Grunde genauso, nur kannst du dort ein "parent" angeben (das Stammfenster), welches dann in jedem Fall hinter dem Dialog bleibt (jedoch auch nicht modifiziert werden kann, solange dieser geöffnet ist).

RequestFocus bringt im Konstruktor wenig, da du damit einmalig den Focus besorgst. Du müsstest es also aufrufen, nachdem der Frame den Focus verloren hat. Das bringt das Fenster aber nicht in den Vordergrund. Dazu brauchst du dann toFront. Aber auch erst, nachdem es den Focus verloren hat.


----------



## Mr.Radar (17. Mrz 2010)

Nu ja, möchte es eigentlich vermeiden, dass man das parent nicht modifizieren kann...sonst hätt ich ja auch gleich #setAlwaysOnTop(true) nehmen können...

(praktisch gesprochen gehts hier um: ein hauptfenster, und ein fenster zum anzeigen der kundenstammdaten - davon sollten aber auch mehrere geöffnet sein können, und auf das hauptfenster sollte trotzdem zugegriffen werden können)


----------



## SuperSeppel13 (17. Mrz 2010)

Gut, dann fällt JDialog wohl flach, aber funktioniert es nicht, wenn du einen WindowFocusListener implementierst, der mit requestFocus() oder toFront() den Fokus zurückholt, wannimmer er verloren geht? 
Hierbei musst du natürlich bestimmte Bedingungen berücksichtigen, denn wenn mehrere der Subfenster gleichzeitig geöffnet sein sollen, dürfen diese sich nicht um den Focus streiten (denn den kann natürlich immer nur eines haben).


----------



## Mr.Radar (17. Mrz 2010)

hm, mir würde hier eine collection o.ä. in meinem main-frame vorschweben, in die alle KundenFrame-objekte reingestopft werden (bzw. wieder entfernt wenn sie geschlossen werden) - das bräucht ich sowieso, weil ich beim schließen des mainframes (=beenden der applikation) von allen offenen KundeFrames die Action aus meinem windowCloseListener ausführen will (prüfen auf ungespeicherte daten in den frames). meinst du, es würde so gehen? : im mainframe eine #setFokustoNewestFrame() schreiben, die aus der collection den frame mit dem höchsten key nimmt, und ihn "#toFront()"ed - und diese funktion dann in den focusListenern der KundeFrame-objekte aufrufen?


----------

