Alrik Fassbauer Geschrieben 30. August 2001 Geschrieben 30. August 2001 Hier war eben noch ein ziemlich ausführlicher Text von mir drin, der während des Abschickens mittels einer "Server nicht gefunden"-Meldung erfolgreich abgeblockt und ins Nirvana versendet / gelöscht worden ist. Deshalb nur kurz: GlassPane habe ich nach 1 1/2 Tagen grübelns einigermaßen verstanden (Achtung: Falle ! beim Hinzufügen kann ein "setVisible(true)" hilfreich sein ! Steht aber nirgendwo !), LayeredPane aber nicht. Auch mit nimationen habe ich so einige Probleme. Kann mir jemand grundsätzlich erklären, was es damit auf sich hat / bzw. wie Animationen am Besten gehen ? (Die Beispiele kenne ich schon alle, ohne, daß sie mir zu 100% Wissen verholfen hätten; es steht im Moment bei 60-70 %.) Zitieren
Alrik Fassbauer Geschrieben 9. September 2001 Autor Geschrieben 9. September 2001 So, ich schreibe mal hier einen Text rein, der von mir geschrieben worden ist, um all das zu beschreiben, was ich zum Thema "GlassPane" selber herausgefunden habe. Erstellen einer GlassPane für Java (Swing) Vorwort: Es ist möglich, unter Java - im Swing-Bereich – eine GlassPane zu erstellen, die über der eigentlichen Programm-Oberfläche liegt. Auf eine GlassPane kann nun gezeichnet werden; diese gezeichneten Objekte liegen dann über allen anderen Programmobjekten, die angezeigt werden. Ressourcen Im JDK ist das Konzepz der GlassPane nurmehr spärlich bis gar nicht beschrieben. Nähere Informationen gibt es hauptsächlich in Zusammenhang mit der RootPane, der „Mutter aller Panes“. Das Tutorial von Sun ist da schon wesentlich informativer: Es gibt einen extra Artikel zusammen mit einem Beispielprogramm zum Thema „GlassPane“. Im Buch „Goto Java 2“ ist die GlassPane nurmehr kurz erwähnt, wiederum in Zusammenhang mit der RootPane. Das Konzept Auf einem mit der Klassenbibliothek „Swing“ erstelltem Frame – „das Grundfenster“ – liegen mehrere „Panes“, die man sich in etwa wie Zeichenflächen denken kann. Auf dem Frame liegt zuesrt die RootPane, die „Mutter aller Panes“. Alles weitere liegt auf ihr. Darüber befindet sich die LayeredPane, eine Art Zeichenfläche, die wiederum selbst aus mehreren Schichten besteht. Es gibt darin einige fest definierte Schichten, und andere wiederum sind frei belegbar. Diese „Tiefenschichten“ werden im JDK bzw. dem Tutorial von Sun als „Tiefe“ („depth“ bzw. als „Z order“ bezeichnet. Diese Schichten sind die folgenden: FrameContentLayer, DefaultLayer, PaletteLayer, ModalLayer, PopupLayer, DragLayer. Einer „add“-Methode werden dabei verschiedene Zahlenwerte übergeben, die die jeweilige Tiefenschicht charakterisieren. FrameContentLayer = 30000 DefaultLayer = 0 PaletteLayer = 100 ModalLayer = 200 PopupLayer = 300 DragLayer = 400 Eine DesktopPane ist eine Zeichenfläche, die von LayeredPane angeleitet ist. Darüber befindet sich die ContentPane, auf der der eigentliche, sichtbare Programminhalt (Menüs, Buttons, Layouts) abgebildet wird. Zusätzlich kann noch explizit eine MenuBar eingefügt werden. Über allem schwebt die GlassPane, eine Art Zeichenfläche, die wie eine Glasscheibe über einem Buch mit vielen Seiten liegt. Alle diese Panes sind von JComponent abgeleitet ! Dieses wiederum ist von Component abgeleitet, welches von Container abgeleitet ist. Die GlassPane Die GlassPane (deutsch wäre es wahrscheinlich eine GlasPane, oder gar eine GlasLeinwand) ist normalerweise unsichtbar; d.h. sie wird nicht „angezeigt“. Das bedeutet allerdings auch, daß Objekte, die auf ihr gezeichnet worden sind, nicht sichtbar sind. In meinem Projekt habe ich eine eigene Klasse MeineGlassPane erstellt. Diese ist von JComponent abgeleitet. In der selbstgeschriebenen GlassPane-Klasse muß die Paint-Methode überschrieben werden. In dem Programm, in dem diese Klasse verwendet wird, sind besonders zwei Befehle wichtig: setGlassPane und setVisible(true) . Ohne diese beiden Befehle wird weder die GlassPane, noch die auf ihr gezeichneten Objekte angezeigt ! Damit müßte es eigentlich klappen. Zitieren
Alrik Fassbauer Geschrieben 9. September 2001 Autor Geschrieben 9. September 2001 Ach ja, nochwas (aus einem anderen Text dazu von mir): Eine GlassPane fängt alle Benutzereingaben ab. Das zwingt den Programmierer, diese Benutzereingaben manuell abzufangen. Die einzige Möglichkeit, die Benutzereingaben von Programmiererseite her abzufangen, besteht offenbar darin, Beispielsweise die Mauskoordinaten auf der GlasPane auszulesen, und die darunter (unter den gemessenen Koordinaten auf der GlassPane) liegende Komponente damit herauszufinden und dann zu aktivieren. Dazu verwendet man die Funktion getDeepestComponentAt(). Eine GlassPane fängt scheinbar ALLE Benutzereingaben ab; sodaß sich der Programmierer gezwungen sieht, alle Benutzereingaben via Listener in der GlassPane-Klasse "nachzuprogrammieren", d.h. die Mauszeigerkoordinaten abzurufen, und mit diesen Koordinaten die unter der GlassPane liegenden Komponenten zu aktivieren; dies geschieht wahrscheinlich am Besten mit getDeepestComponentAt() , was bei mir leider nicht funktionierte. Ich fürchtete eine Zeitlang sogar, gezwungen zu sein, alle Menüs explizit nachzuprogrammieren zu müssen ! Als Aushilfslösung habe ich daher die Sichtbarkeit der GlassPane zeitlich begrenzt. Zitieren
Hardcoder Geschrieben 11. September 2001 Geschrieben 11. September 2001 Layered Pane ist eine Pane, auf die du Componenten auf verschiedenen Ebenen (Layern) hinzufügenkannst. Diese Layer kannst du in den Vordergrund oder in den Hinterrund schieben. Dadurch hast du halt die Kontrolle, welche Komponente über welcher liegt. Normalerweise bestimmt das sonst Genosse Zufall ;-) Du musst beim Hinzufügen von Komponenten auf eine JLayeredPane achten, dass du einen Index mitgibst, sonst läuft irgendwann der Stack über. (frag mich nicht wieso). Hardcoder Zitieren
Alrik Fassbauer Geschrieben 11. September 2001 Autor Geschrieben 11. September 2001 Danke für dieses Informationsmosaiksteinchen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.