Java Trayicon + Frame + Sichtbarkeit

ownagi

Commander Pro
🎄Rätsel-Elite ’24
Registriert
Jan. 2005
Beiträge
2.199
Hey,

folgendes Problem:
Habe nen Mouselistener auf nem TrayIcon und nen Frame
Folgendes soll nun geschehen wenn auf das TrayIcon geklickt wurde:
- frame hidden -> setVisible(true) + toFront() DONE
- frame minimized -> setExtendedState(oldState) DONE
- frame visible + on top -> setVisible(false)
- frame visible + not on top -> toFront()

Problematisch hierbei ist die Unterscheidung ob "on top" oder nicht, da das Frame automatisch beim Klick auf das TrayIcon ja nichtmehr "on top" ist, bzw. keinen Fokus mehr hat.
Realisierung der Feststellung ob das Frame den Fokus hat per windowFocusListener

hat jemand eine Idee wie ich unterscheiden kann, ob ein Frame den Fokus hatte, bevor auf das TrayIcon geklickt wurde?

Bisher habe ich 2 Variablen:
focused => momentaner Status
focusedBefore => alter Status

neuer Status ist nach dem Klick logischer Weise immer false; alter Status immer true, da ein Fenster ja nicht zweimal den Fokus verlieren kann, ohne ihn vorher gehabt zu haben.
Eine Unterscheidung fällt daher sehr schwer, bzw. ist unmöglich.

Danke im Voraus
 
Ich kann es jetzt nicht ausprobieren. Es gibt in der Window-Klasse, von der JFrame abgeleitet ist, die Methode isShowing().

Die soll true zurückgeben, wenn der Benutzer das Window sehen kann. Es kann allerdings sein, das sie auch true gibt, wenn der JFrame nur teilweise von einem anderen Fenster überdeckt ist.

Vielleicht klappt es ja.
 
hm habs getestet, funktioniert irgendwie nicht anständig, gibt immer true zurueck
 
Du könntest speichern ob vor 1 secunde das fenster on top war um das prob zu lösen.

Gebe allerdings zu bedenken, dass normale Benutzer dein gewünschtes Verhalten wahrscheinlich nicht nachvollziehen können und werden. Es lässt in ihren Augen deine Anwendung inkonsistenz wirken. "Da klick ich drauf einmal verschwindet das Fenster ein anderes mal bekommt es focus"
 
mächtig dirty die methode mit der zeitmessung :p
 
Zurück
Oben