2012-06-20 15 views
9

Meine Java-Anwendung hat mehrere Frames. Einige von ihnen werden immer an der Spitze sein. Wenn der Benutzer jedoch ein anderes Programm (beispielsweise einen Webbrowser) öffnet, möchte ich, dass die immer auf dem Kopf stehenden Frames in den Hintergrund verschoben werden, damit die andere Anwendung vollständig auf dem Bildschirm angezeigt wird.Wie behalte ich einen Rahmen in der Anwendung immer oben, sondern stelle ihn in den Hintergrund, wenn ich andere Anwendungen in Java verwende?

+2

im Kommentar ist, ich würde gerne sehen, wenn jemand dies beantwortet .... – Thihara

+0

* "Meine Java-Anwendung hat mehrere Frames." * Siehe [Die Verwendung mehrerer JFrames, gute/schlechte Praxis?] (Http://stackoverflow.com/a/9554657/418556) * "Einige von ihnen sind so eingestellt, dass sie immer an sind oben. "* Verwenden Sie einen Dialog. Nicht ganz der Effekt, den du beschreibst, aber der Weg der geringsten Überraschung für den Benutzer. –

+0

@AndrewThompson Dies ist nicht unbedingt richtig - es hängt von der Anwendung ab. Ich stimme zu, dass es nicht die beste Wahl für einen Programmierer ist, der ohne Spezifikationen für solche Dinge in eine neue Anwendung springt.Aber es gibt keinen Zweifel, wo diese Art von Verhalten das bevorzugte Design wäre. –

Antwort

4

Erstellen Sie Ihren eigenen Window Manager.

einen benutzerdefinierten Window Manager erstellen, die WindowListener, WindowStateListener und WindowFocusListener implementiert. Registrieren Sie alle neuen Bilder mit diesem Manager und verwenden Sie sie, um Ihre immer-auf-oberen Bilder wieder nach vorne zu bringen, wenn der Benutzer mit den Bildern interagiert.

Es klingt wie Ihre Anwendung verwendet einige ziemlich benutzerdefinierte Rahmenmanagement-Code. Ich gehe davon aus, dass dieser Window Manager bei der Entwicklung der Anwendung mehr Funktionen zur Verwaltung der Benutzeroberfläche übernimmt. Dies gibt Ihnen nicht nur das Design, um Ihr Problem zu lösen, sondern auch eine Grundlage für Änderungen oder Verbesserungen dieses Verhaltens.

Bitte beachten Sie jedoch, dass Java nicht kontrollieren kann, was das Betriebssystem mit anderen Anwendungen macht. Es kann nicht einmal einen Frame zuverlässig über andere Anwendungen in allen Betriebssystemen in den Vordergrund bringen. Sie müssen mit den Betriebssystemen arbeiten, die Sie unterstützen, um diesen Window Manager zu schreiben, damit Sie das gewünschte Verhalten erhalten.

+0

Wie verwaltet dies Windows nicht instanziiert aus der aktuellen JVM? – Dave

+0

Es kann nicht. Dieses Design bietet die Grundlage für die Steuerung dieses Verhaltens. Es könnte sehr gut eine bessere Lösung sein, nur einen MDI-ähnlichen Rahmen zu haben und alle Anwendungsrahmen offen zu haben. Dies würde absolute Kontrolle über solche Dinge geben, aber ich kenne die Anforderungen nicht und kann nur das tun, was das OP in der Frage gefragt hat. –

1

Meine Java-Anwendung hat mehrere Frames. Einige von ihnen werden immer an der Spitze sein.

tun das nicht, verwenden CardLayout stattdessen in dem Fall, dass Sie wirklich end_user Aktion benötigt dann

  • JOptionPane

  • Modal JDialog (oder ModalityType mit AplicationModal) verwenden

  • re_use JDialog (getContentPane.Remo veAll()) für den nächsten Einsatz von

Wenn jedoch der Benutzer ein anderes Programm öffnet (lassen Sie uns einen Web-Browser sagen), ich will die always-on-top-Rahmen in den Hintergrund bewegen, Art und Weise zu machen Damit die andere Anwendung vollständig auf dem Bildschirm angezeigt wird.

könnte dies sehr ärgerlich für end_user sein, verwendet FullScreen statt

Mitteilung wichtigste Rest von @Andrew Thompson