JFrame "on top"

starbuck86

Mitglied
Hallo.

Ich möchte für mein Programm, welches mehrere Fenster zu unbestimmter Zeit öffnet, das eben geöffnete Fenster "on top" setzen. Dazu verwende ich im Moment noch
Java:
jframe.toFront();

Leider ist mir aufgefallen, dass in manchen Fällen (z.B. während dem Arbeiten mit putty -> telnet-session) das Fenster nicht on top gesetzt wird, sondern nur anfängt in der Taskleiste zu blinken, nachdem es geöffnet wurde.
Hat da jemand ein Workaround, um das Problem zu lösen, bzw. ein Alternativ-Befehl?

Weiterführend möchte ich gerne, dass das geöffnete Fenster für einen Zeitraum von maximal 3 Sekunden den Fokus erhält (also on top ist) und danach wieder auf das Fenster, mit dem man eigentlich gearbeitet hat, geswitcht wird. Ist das möglich?

Danke && Gruß
Thomas
 
Leider ist mir aufgefallen, dass in manchen Fällen (z.B. während dem Arbeiten mit putty -> telnet-session) das Fenster nicht on top gesetzt wird, sondern nur anfängt in der Taskleiste zu blinken, nachdem es geöffnet wurde.

http://java.sun.com/j2se/1.5.0/docs/api/java/awt/Window.html#toFront()

Das ist das Sollverhalten, wenn der WindowManager des Betriebssystems das nicht unterstuetzt kannst du dein Vorhaben knicken.

Aus Sicht des Benutzers wuerde ich dir fuer das von dir gewuenschte Verhalten wahrscheinlich die Pest an den Hals wünschen, da in diesem Fall mein Workflow gestoert wird. Ich werde mich frueh genug um das Fenster kuemmern. Diesen Aspekt solltest du bei deiner Implementierung beruecksichtigen, wenn das kein expliziter Kundenwunsch ist.

Hat da jemand ein Workaround, um das Problem zu lösen, bzw. ein Alternativ-Befehl?

Ist mir nicht bekannt.
 
Das macht schon seinen Sinn, wenn man die Hintergründe kennt!
Aber mal abgesehen davon möchte ich mich hier nach technischen Hintergründen erkundigen...

Es muss doch einen Alternativ-Befehl geben oder einen Workaround, denn
Java:
jframe.setAlwaysOnTop(true);
tut ja fast genau das, was ich möchte.
 
Hallo,

das geht auch nicht mit einem Workaround, da Java das nicht beinflussen kann. Es ist wie Adrian sagt eine Sache des WindowManagers.

Was du vielleicht machen könntest, wäre ein Ballon-Tip einem SystemTray-Icon.

MFG

Sascha
 
Hallo,

das geht auch nicht mit einem Workaround, da Java das nicht beinflussen kann. Es ist wie Adrian sagt eine Sache des WindowManagers.

Was du vielleicht machen könntest, wäre ein Ballon-Tip einem SystemTray-Icon.

MFG

Sascha
 
Habe eine Lösung gefunden:
Java:
jframe.setAlwaysOnTop(true);
try { Thread.sleep(3000); } catch (InterruptedException e) {		}
jframe.setAlwaysOnTop(false);
jframe.toBack();

Gruß
 
Zuletzt bearbeitet:
Ja, das Problem hat sich damit komplett erledigt.

Bei dieser Vorgehensweise passiert folgendes:
  1. putty-telnet-Session ist focused Window
  2. jframe setzt sich in den Vordergrund <> putty-telnet-Session immer noch focused
  3. nach 3 Sekunden: jframe geht in den Hintergrund <> putty-telnet-Session immer noch focused und auch wieder im Vordergrund
Also genau das, was ich wollte. Der Workflow wird sogar nicht einmal direkt unterbrochen - man kann weiter mit dem aktuellen Fenster arbeiten.

Gruß
Thomas
 

Neue Beiträge

Zurück