Hallo alle zusammen,
gut kryptischer Titel, ich weiß. Habe aber keine Ahnung, wie ich das anders formulieren soll.
Unsere Java Anwendung im Geschäft arbeitet mit JDesktopPane und JInternalFrame. Wenn das Programm bspw. auf der Datenbank werkelt, wird ein JDialog mit einem Fortschrittsdialog angezeigt. Das ist jedoch wenig sinnvoll, da damit die gesamte Oberfläche gesperrt ist und auch in anderen Fenstern des JDesktopPane nicht gearbeitet werden kann.
Nun kam mir vor kurzem die Idee, diese Fortschrittsanzeige direkt in das JInternalFrame zu stecken. Und zwar auf dem GlassPane. Ich habe mal einen Prototypen geschrieben und das funktioniert soweit auch: Ich setze die Eigenschaft opaque auf true und gebe als Hintergrundfarbe eine Farbe mit einem Alpha Wert an. In die Mitte des GlassPane klopfe ich einen JProgressBar mit der Eigenschaft indeterminate auf true. So weit, so gut. Sieht auch recht nett aus.
Nun kommt das Problem: Benutzereingaben. Solange der Fortschritt angezeigt wird solange mit den Komponenten hinter dem GlassPane keine Interaktion möglich sein. Die Maus ist schnell erschlagen, in dem man alle Ereignisse schon auf dem GlassPane abfängt und mit consume() im entsprechenden Event Objekt "unschädlich" macht. Das Problem sind die Menüs: Auch nachdem man alle Tastatur Ereignisse im GlassPane mit der selben Methodik erschlagen hat, reagiert das Menü noch immer. Die Eigenschaft enabled wird von JMenuBar nicht überschrieben und scheint auch sonst nicht berücksichtigt zu werden.
Hat jemand von Euch eine Idee, wie man das hinbekommen kann oder hat etwas ähnliches schon einmal probiert?
Eine Möglichkeit wäre u.U. JMenuBar zu überschreiben. Ich hätte aber lieber eine Lösung die ich innerhalb einer Unterklasse von JInternalFrame lösen kann. Da wäre die Hardcore Methode einfach das Menü zu entfernen und nach getaner Arbeit wieder zu setzen. Aber das gefällt mir nicht wirklich.
gut kryptischer Titel, ich weiß. Habe aber keine Ahnung, wie ich das anders formulieren soll.
Unsere Java Anwendung im Geschäft arbeitet mit JDesktopPane und JInternalFrame. Wenn das Programm bspw. auf der Datenbank werkelt, wird ein JDialog mit einem Fortschrittsdialog angezeigt. Das ist jedoch wenig sinnvoll, da damit die gesamte Oberfläche gesperrt ist und auch in anderen Fenstern des JDesktopPane nicht gearbeitet werden kann.
Nun kam mir vor kurzem die Idee, diese Fortschrittsanzeige direkt in das JInternalFrame zu stecken. Und zwar auf dem GlassPane. Ich habe mal einen Prototypen geschrieben und das funktioniert soweit auch: Ich setze die Eigenschaft opaque auf true und gebe als Hintergrundfarbe eine Farbe mit einem Alpha Wert an. In die Mitte des GlassPane klopfe ich einen JProgressBar mit der Eigenschaft indeterminate auf true. So weit, so gut. Sieht auch recht nett aus.
Nun kommt das Problem: Benutzereingaben. Solange der Fortschritt angezeigt wird solange mit den Komponenten hinter dem GlassPane keine Interaktion möglich sein. Die Maus ist schnell erschlagen, in dem man alle Ereignisse schon auf dem GlassPane abfängt und mit consume() im entsprechenden Event Objekt "unschädlich" macht. Das Problem sind die Menüs: Auch nachdem man alle Tastatur Ereignisse im GlassPane mit der selben Methodik erschlagen hat, reagiert das Menü noch immer. Die Eigenschaft enabled wird von JMenuBar nicht überschrieben und scheint auch sonst nicht berücksichtigt zu werden.
Hat jemand von Euch eine Idee, wie man das hinbekommen kann oder hat etwas ähnliches schon einmal probiert?
Eine Möglichkeit wäre u.U. JMenuBar zu überschreiben. Ich hätte aber lieber eine Lösung die ich innerhalb einer Unterklasse von JInternalFrame lösen kann. Da wäre die Hardcore Methode einfach das Menü zu entfernen und nach getaner Arbeit wieder zu setzen. Aber das gefällt mir nicht wirklich.