Ich versuche eine Art Werkzeugleiste in einem undekorierten alwaysOnTop Rahmen zu erstellen. Daher möchte ich, dass mein Frame über meinem Hauptrahmen liegt, aber nicht über Frames von anderen Programmen. Ich habe diesen Code ausprobiert:
%Vor%Aber trotz der Verwendung von JDialog und der Präzisierung des Besitzers, bleibt der Frame über anderen Anwendungen (zumindest mit Ubuntu). Vielleicht ist das Ergebnis bei anderen OS anders?)
BEARBEITEN : Ok, ich habe diesen Code für meinen Dialog ausprobiert:
%Vor%Das Problem ist jetzt, dass wenn der Hauptbildschirm den Fokus verliert, der Dialog den Fokus zurücknimmt und ich verstehe nicht warum. Ich starte zum Beispiel meine App, ich versuche, zu Firefox zu wechseln, Firefox erscheint und deckt den mainFrame ab, aber der A-Dialog erhält den Fokus und bleibt auf dem Bildschirm. Wenn ich jetzt wieder Firefox auswähle, wird der Dialog endlich korrekt verschwinden. Können Sie mir erklären, warum der Dialog den Fokus hat?
Danke
Ok, ich habe eine Lösung gefunden (weiß nicht, ob es DIE Lösung ist, aber es funktioniert, also ...)
Ich habe setFocusableWindowState () entdeckt, das ist perfekt für Symbolleisten. Übrigens, ich weiß nicht, ob meine vorherige setFocusable (false) irgendeine Wirkung hatte.
Das nächste Problem war, dass der Fokus mit diesem Code sehr merkwürdig wird: Wenn ich von MyApp zu Firefox wechsel, passiert Folgendes:
%Vor%Ergebnis: Nichts hat sich geändert!
Also habe ich endlich die Tricks: kurz nach MyDialog.toFront () geben Sie dem vorherigen Besitzer den Fokus zurück. Und die einzige Möglichkeit, dies ohne Fehler zu tun, war: mainFrame.toBack ()
Endgültiger Code:
%Vor%Sie sollten Ihr Fenster immer nur dann auf die oberste Ebene stellen, wenn das übergeordnete Fenster aktiviert wird. Etwas wie das:
%Vor%Tags und Links java swing always-on-top