mueslirocker
Mitglied
Hallo,
ich stehe vor einem Problem, das schon 1000 mal da war, aber ich finde für meinen Fall keine passende Antwort. Vermutlich bin ich zu blind, aber ich komm um einen Thread wohl nicht drum herum. Es geht um die Entscheidung, was man für Sub-GUIs benutzen sollte.
Ich habe einige Fenster (JFrames), die im Prinzip alle eigene Applikationen darstellen. Man kann sie einzeln starten. Nun sollen einige dieser GUIs aber andere aufrufen können. Das soll modal geschehen. Dafür benutzt man ja aber eigentlich den JDialog. Alle GUIs als JFrame (für den alleinigen Aufruf) und JDialog (für die Sub-Aufrufe) zu implementieren, ist kein Problem, da der eigentliche Inhalt in einem JPanel-Objekt steht, von denen ich beiden eine Instanz zuweisen kann.
Mein Problem sind die Eigenschaften des Sub-Frames:
Ein JDialog ist als etwas Vorübergehendes gedacht, das kurz mit dem User spricht, damit das eigentliche Programm dann gleich weiter machen kann. Entspreched ist das Verhalten des Programms bei offenem Dialog. Der Programmfluss ist "unterbrochen". Man kann das Programm z.B. nicht mehr minimieren. Ich möchte auch, dass das Super-Fenster deaktiviert ist (sonst könnte ich es ja nicht-modal machen), aber ich möchte, dass die Steuerung des gesamten Programms von dem Sub-Fenster übernommen wird. Wenn man dieses minimiert, soll es sich mit allen Super-Fenstern minimieren. Also so, als ob man es nicht-modal macht und dann im Super-Fenster minimiert... nur eben vom Sub-Fenster aus. Es ist klar, dass das mit dem JDialog nicht (ohne erheblichen Aufwand) geht, denn so ist die Nutzung gar nicht gedacht. Mein Sub-Fenster ist kein Dialog, kein kurzes Gespräch mit dem User. Dieser könnte 90% der Zeit auf Sub-Fenstern arbeiten und am Ende nur kurz das oberste Fenster nutzen/beenden. Und während dieser 90% möchte er mit einem JFrame und nicht mit einem JDialog arbeiten... und das Programm z.B. minimieren können.
Als nächstes habe ich überlegt, nur JFrames zu benutzen und mittels setEnabled(...) das Super-Fenster zu deaktivieren. Aber auch das ist nicht das Verhalten, das ich suche. Es erscheinen zwei Taskbar-Einträge, es sind zwei eigenständige Applikationen. Ich kann zwar das Super-Fenster nicht mehr minimieren und könnte wohl einrichten, dass beim Minimieren des Sub-Fensters das Super-Fenster mit minimiert wird und ebenso das Wiederherstellen irgendwie führen... aber das Taskbar-Problem (damit hängt ja noch mehr zusammen) bleibt bestehen und zeigt eigentlich, dass es so auch nicht gedacht ist.
JInternalFrames sind - wenn ich das richtig verstanden habe - auch keine Lösung, da sie als Teil des Super-Fensters agieren. Ich möchte sie aber wie einen JDialog quer über den Bildschirm schieben können.
Ich kann mir nicht vorstellen, dass dieses Verhalten so selten erwünscht ist, dass es da keinen Standardfall für gibt und man ein Workaround basteln muss. Das Sub-Fenster soll ein vollwertiges Hauptfenster sein, das die Steuerung aller Super-Fenster (also der gesamten Applikation) in der Oberfläche des Betriebsystems übernimmt.
Hat jemand eine Idee, wie ich da vorgehen kann?
ich stehe vor einem Problem, das schon 1000 mal da war, aber ich finde für meinen Fall keine passende Antwort. Vermutlich bin ich zu blind, aber ich komm um einen Thread wohl nicht drum herum. Es geht um die Entscheidung, was man für Sub-GUIs benutzen sollte.
Ich habe einige Fenster (JFrames), die im Prinzip alle eigene Applikationen darstellen. Man kann sie einzeln starten. Nun sollen einige dieser GUIs aber andere aufrufen können. Das soll modal geschehen. Dafür benutzt man ja aber eigentlich den JDialog. Alle GUIs als JFrame (für den alleinigen Aufruf) und JDialog (für die Sub-Aufrufe) zu implementieren, ist kein Problem, da der eigentliche Inhalt in einem JPanel-Objekt steht, von denen ich beiden eine Instanz zuweisen kann.
Mein Problem sind die Eigenschaften des Sub-Frames:
Ein JDialog ist als etwas Vorübergehendes gedacht, das kurz mit dem User spricht, damit das eigentliche Programm dann gleich weiter machen kann. Entspreched ist das Verhalten des Programms bei offenem Dialog. Der Programmfluss ist "unterbrochen". Man kann das Programm z.B. nicht mehr minimieren. Ich möchte auch, dass das Super-Fenster deaktiviert ist (sonst könnte ich es ja nicht-modal machen), aber ich möchte, dass die Steuerung des gesamten Programms von dem Sub-Fenster übernommen wird. Wenn man dieses minimiert, soll es sich mit allen Super-Fenstern minimieren. Also so, als ob man es nicht-modal macht und dann im Super-Fenster minimiert... nur eben vom Sub-Fenster aus. Es ist klar, dass das mit dem JDialog nicht (ohne erheblichen Aufwand) geht, denn so ist die Nutzung gar nicht gedacht. Mein Sub-Fenster ist kein Dialog, kein kurzes Gespräch mit dem User. Dieser könnte 90% der Zeit auf Sub-Fenstern arbeiten und am Ende nur kurz das oberste Fenster nutzen/beenden. Und während dieser 90% möchte er mit einem JFrame und nicht mit einem JDialog arbeiten... und das Programm z.B. minimieren können.
Als nächstes habe ich überlegt, nur JFrames zu benutzen und mittels setEnabled(...) das Super-Fenster zu deaktivieren. Aber auch das ist nicht das Verhalten, das ich suche. Es erscheinen zwei Taskbar-Einträge, es sind zwei eigenständige Applikationen. Ich kann zwar das Super-Fenster nicht mehr minimieren und könnte wohl einrichten, dass beim Minimieren des Sub-Fensters das Super-Fenster mit minimiert wird und ebenso das Wiederherstellen irgendwie führen... aber das Taskbar-Problem (damit hängt ja noch mehr zusammen) bleibt bestehen und zeigt eigentlich, dass es so auch nicht gedacht ist.
JInternalFrames sind - wenn ich das richtig verstanden habe - auch keine Lösung, da sie als Teil des Super-Fensters agieren. Ich möchte sie aber wie einen JDialog quer über den Bildschirm schieben können.
Ich kann mir nicht vorstellen, dass dieses Verhalten so selten erwünscht ist, dass es da keinen Standardfall für gibt und man ein Workaround basteln muss. Das Sub-Fenster soll ein vollwertiges Hauptfenster sein, das die Steuerung aller Super-Fenster (also der gesamten Applikation) in der Oberfläche des Betriebsystems übernimmt.
Hat jemand eine Idee, wie ich da vorgehen kann?