Zum Inhalt springen

Kennt sich jemand mit LayeredPane und GlassPane aus ? Auch Animationen ?


Empfohlene Beiträge

Geschrieben

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 %.)

  • 2 Wochen später...
Geschrieben

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.

Geschrieben

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.

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...