Hier steht, was Container und Komponenten sind. Wir erinnern uns, dass Komponenten als Elemente in einen Container eingefügt werden, Container hingegen Komponenten - oder andere Container - enthalten.
Um einen Container zu definieren muss das Zeilenpaar
<[Containername]
Attribut1="wert1"
usw. >
und
</[Containername]
>
verwendet bzw. bei XML die Tags entsprechend geschachtelt werden. Zwischen diesen beiden Zeilen können beliebig viele Zeilen mit Komponenten stehen, die in dem betreffenden Container enthalten sein sollen.
Wollen wir Container untereinander anordnen, dann lassen wir solche Begin-End-Zeilenpaare einfach aufeinander folgen. Wollen wir sie aber nebeneinander haben, dann haben wir zwei Möglichkeiten:
1. Wir können die Attribute x und y verwenden, um der linken ober Ecke
des Containers eine ganz bestimmte Zelle im Gitter unseres
Layouts zuzuweisen.
Wenn der erste Container in unserem Layout nur eine Spalte breit ist und
wir dem zweiten x=1
sowie y=0
, also die Koordinaten
(1, 0) zuweisen, dann wird der zweite rechts vom ersten positioniert werden
(der erste erhält per default die Koordinaten (0, 0)).
2. Den gleichen Effekt können wir auch erzielen, wenn wir beim zweiten
x=REL
und y=0
zuweisen. "REL" bedeutet, dass er
die - relativ zum Vorgänger - nächste x-Koordinate erhält.
Die Verwendung von REL hat den Vorteil, dass wir Container nebeneinander
positionieren können, ohne die x-Koordinaten zu kennen.
Die Möglichkeiten der Schachtelung von Containern (siehe unten), sowie die zulässigen Komponenten innerhalb eines Containertyps sind bei der Spezifizierung zu beachten. Die Schachtelung von Containern sollte der besseren Lesbarkeit wegen durch Einrücken (Tab) kenntlich gemacht werden.
Ein Formular ist das Hauptfenster. Mit ihm muß eine Spezifikation beginnen. Je Spezifikationsdatei darf nur einmal ein Formular angegeben werden.
Das Hauptfenster ist bereits mit einer Statuszeile (siehe Attribut "st=") versehen.
Es kann ein Titel für das Fenster angegeben werden, welcher in der Titelzeile angezeigt wird, sowie die Höhe (Attribut h) und Breite (Attribut w) des Fensters (der Wert von h und w ergibt die Ausmaße des Fensters in Pixeln). Mit x und y (ebenfalls in Pixeln) wird die Position des Fensters auf dem Bildschirm vorbelegt; werden diese Attribute nicht angegeben, wird das Fenster auf dem Bildschirm zentriert.
Die Titelzeile des Fensters kann mit einem vom Default abweichenden Icon versehen werden.
Mit dem Schlüsselwort typ=SYSTEM
wird das Formular zum
Hauptfenster der Anwendung erklärt. Dieses bedeutet, dass mit diesem
Fenster auch die Anwendung beendet wird.
<Form label="[WindowTitle]" w=[Width] h=[Height] x= y= img=
>
>
...
</Form
Ein Dialog ist mit einem Formular nahezu identisch; ihm kann jedoch keine Menubar zugewiesen werden.
Standardmäßig werden nicht-modale,
größenveränderbare Dialoge erzeugt. Mit dem Attribut
typ=
kann dieses Verhalten abweichend gesetzt werden.
<Dialog label="[WindowTitle]" w=[Width] h=[Height] x= y=
typ=MODAL|NORESIZE|MODAL_NORESIZE>
>
...
</Dialog
Ein Applet kann naturgemäß nur als Applet eingesetzt werden. Es kann also nur vom Appletviewer bzw. einem Browser ausgeführt werden, und es hat nur einen eingeschränkten Zugriff auf das lokale Dateisystem.
Im HTML-File des Applets muss die Spezifikationsdatei als Parameter für das Startfenster eingetragen werden:
<Applet>
...
<param name="StartWindow" value="tutorial/AppletBeispiel.xml">
</Applet>
Läuft der GuiBuilder als Application, wird ein Applet-Container automatisch als Formular ausgeführt. Ein Applet kann daher genauso wie ein Formular eingesetzt werden.
Es können zwar dieselben Attribute wie bei einem Formular definiert werden. Sie sind jedoch naturgemäß beim Einsatz im Browser z.T. wirkungslos: so kann der Titel und die Größe des Fensters nicht im GDL-Skript, sondern nur im HTML-File des Applets gesetzt werden.
<Applet>
>
...
</Applet
Ein Panel ist ein unsichtbarer Container. Es dient in der Regel zur Gliederung von Komponenten in Dialogmasken.
Jedes Formular (Form), Dialog oder Registerkarte (Tab) ist von Hause aus bereits mit einem Panel versehen.
Der Titel eines Panels dient nur der Information im GDL-Skript. Panels dürfen geschachtelt werden. Beachte, dass jedes Panel sein eigenes Koordinatensystem hat.
Panels können in beiden Dimensionen wachsen. Ist dieses Verhalten
unerwünscht, kann wx und/oder wy auf 0 gesetzt werden. Enthält
ein Panel ausschließlich Komponenten, die nicht vertikal größer
werden können, sollte wy=0
gesetzt werden.
<Panel label="[PanelTitle]" x=[gridx] y=[gridy] w=[gridwidth]
h=[gridheight] wx=[weightX] wy=[weightY] an=[anchor] fill=[fill]>
>
...
</Panel
Eine Group (Kasten) verhält sich genauso wie ein Panel. Im Unterschied zu diesem hat sie aber einen Rahmen und - wenn dies gewünscht wird - eine Beschriftung. Sie ist ein wichtiges Gliederungsmittel für die Anwenderführung in einem Layout.
Mit dem Attribut typ=
lassen sich dreidimensionale Effekte erzielen:
der Kasten erscheint dann erhaben oder versenkt. .
Es kann die Schriftgröße und Schriftart des Titels gesetzt werden.
<Group label="[GroupTitle]" typ=LOW|RAISE point= style= >
>
...
</Group
Bezeichnet einen Satz von Registerkarten (Tab = Registerkarte).
Registerkarten werden der Reihe nach erstellt. Die erste Registerkarte hat
den Fokus, die anderen erscheinen hinter dieser eingeordnet. Jede einzelne
Karte hat bereits ein Panel; es können ihr aber auch weitere Panels
hinzugefügt werden.
Beachten Sie, daß TabTitles - die Beschriftung der Lasche einer
Registerkarte - innerhalb eines Tabsets nicht doppelt vergeben werden
können.
Mit dem Attribut typ="TOP|BOTTOM|LEFT|RIGHT"
kann für einen
Tabset die Anordnung der Registerkartentitel gewählt werden. Default
ist TOP
.
Mit dem Attribut layout="SCROLL|WRAP
" wird die TabLayoutPolicy
definiert; default ist WRAP
.
Zusätzlich kann den einzelnen Registerkarten ein Icon zugeordnet werden.
Eine Registerkarte darf auch einen weiteren Tabset enthalten.
<Tabset layout="SCROLL">
>
<Tab label="[TabTitle]" img="[ImageFileName]">
...
</Tab>
...
</Tabset
Ein Split Panel umfaßt zwei horizontal nebeneinander angeordnete Fenster. Die relative Größe dieser Fenster kann durch den "Divider" mit der Maus variiert werden.
Es müssen genau zwei Child Container dem Split Panel zugewiesen
werden.
Split Panels können auch geschachtelt werden, etwa um eine Dreiteilung
der Maske zu erzielen.
Mit dem Attribut typ="VERTICAL"
wird eine vertikale Teilung
des Panels erzielt.
<Split typ="HORIZONTAL|VERTICAL">
>
<Tree>
...
</Tree>
<Panel>
...
</Panel>
</Split
Dieser Container ist ein verschiebbares Fenster innerhalb seines Mutter-Containers. Er wird wie Panel, Group oder Tab behandelt.
<Frame label="[WindowTitle]" w= h= >
>
...
</Frame