GUI-Programmierung mit JControl/Vole

II. Grundstruktur

In diesem Kapitel werden die Basiskonzepte von JControl/Vole beschrieben und anhand von Beispielprogrammen dargestellt. Außerdem wird ein Grundgerüst für Anwendungen entwickelt, die auf JControl/Vole basieren.

Bild 1 zeigt den prizipiellen Aufbau von JControl/Vole. Jedes Anwendungsprogramm, das darauf aufsetzt, muss zunächst eine Instanz der Klasse jcontrol.ui.vole.Frame erstellen. Dieser Frame stellt den "Hauptcontainer" der Benutzeroberfläche dar. Ihm können Container oder Components hinzugefügt werden. Components sind sämtliche GUI-Komponenten wie z.B. Button, CheckBox oder TextArea. Container können verwendet werden, um Components zu Gruppen zusammenzufassen.

Bild 1: Das GUI-Framework JControl/Vole

Bildlich kann man sich eine Anwendung, die auf JControl/Vole basiert, als Baumstruktur vorstellen (Bild 2): Die Wurzel wird durch die Instanz der Klasse Frame dargestellt, die Äste werden durch Container repräsentiert. Die einzelnen Blätter sind die Components, also die tatsächlich für den Benutzer sichtbaren GUI-Komponenten wie Schaltflächen, Labels, Textfelder, Menüs usw.

Bild 2: Baum-Struktur einer JControl/Vole-Anwendung



Frame

Die Klasse jcontrol.ui.vole.Frame zeichnet für die Tastaturabfrage, das Event-Handling und das Focus-Management verantwortlich. Sie erweitert außerdem die Klasse jcontrol.ui.vole.Container und besitzt alle ihre Fähigkeiten. Einem Frame können Components und Container hinzugefügt werden. Der folgende Quelltext zeigt eine einfache Anwendung, die ein Label-Component und zwei Button-Components darstellt.

Bild 2: Screenshot des VoleExampleBase-Programms

1    import jcontrol.ui.vole.Button;
2    import jcontrol.ui.vole.Frame;
3    import jcontrol.ui.vole.Label;
4    
5    /**
6     * <p>This example demonstrates how to implement JControl
7     * applications with a graphical user interface
8     * using the GUI framework JControl/Vole.</p>
9     *
10     * <p>(C) DOMOLOGIC Home Automation GmbH 2003-2005</p>
11     */
12    public class VoleExampleBase extends Frame {
13    
14      Button b1, b2;
15      Label l;
16    
17      /**
18       * Create and show a label and two buttons.
19       */
20      public VoleExampleBase() {
21        // create some components
22        l = new Label("Welcome to Vole!", 0, 5, 128, 10,
23                      Label.ALIGN_CENTER);
24        b1 = new Button("Button 1", 8,20,50,12);
25        b2 = new Button("Button 2", 62,20,50,12);
26    
27        // add the components to the frame
28        this.add(l);
29        this.add(b1);
30        this.add(b2);
31    
32        // make the frame visible
33        show();
34      }
35    
36      public static void main(String[] args) {
37        new VoleExampleBase();
38      }
39    }
Listing 1: VoleExampleBase.java

Bild 2 zeigt einen Screenshot von obigem Beispielprogramm. Wenn Sie den Quelltext dieses Beispiels herunterladen, in ein neues JControl/IDE-Projekt einfügen und dann den Simulator starten, sehen Sie das GUI-Framework JControl/Vole in Aktion. Die Klasse Frame sorgt automatisch für eine kontinuierliche Abfrage der Tastatur, durch Bewegen des Tasters am JControl-Gerät können Sie den Eingabefokus zwischen den beiden Buttons hin- und herschalten. Da wir in dem Beispielprogramm jedoch keinen ActionListener für die Buttons installiert haben, empfängt das Programm keine ActionEvents und kann somit auch nicht auf das Betätigen eines Buttons reagieren. Wie Events verarbeitet werden, können Sie in Kapitel 4 dieses Tutorials nachlesen (Event-Handling).


Container

Ein Container (jcontrol.ui.vole.Container) kann beliebig viele weitere Container oder Components enthalten. Der Eingabefokus wird innerhalb eines Containers von Component zu Component weitergegeben, bis das letzte Component bzw. der letzte Sub-Container erreicht wurde. Dann springt der Fokus zum nächsten Container, in welchem er wieder von Component zu Component weitergegeben wird. Es macht also Sinn, zusammengehörige Components in einem Container zu organisieren. Die Reihenfolge, in der die Components den Fokus erhalten, richtet sich nach der Reihenfolge, in der sie dem Container, bzw. Frame hinzugefügt werden.

Ferner wirken sich sämtliche Operationen, die auf einen Container ausgeführt werden, auch auf alle enthaltenen Kind- Komponenten aus: Löscht man beispielsweise den Container mit Hilfe der Methode remove(), werden auch alle Kind-Komponenten aus der Benutzeroberfläche entfernt.

Die wichtigsten Methoden der Klasse Container sind in der folgenden Tabelle 1 aufgeführt und kurz erläutert:

MethodeBeschreibung
Container(int x, int y, int width, int height)Erzeugt einen neuen Container mit den angegebenen Ausmaßen.
add(Component c)Fügt dem Container ein neues Component hinzu. Die enthaltenen Komponenten werden in der Reihenfolge ihres Hinzufügens gezeichnet.
remove(Component c)Entfernt eine Komponente aus dem Container.
removeAll()Entfernt alle Komponenten aus dem Container.
remove()Entfernt alle Komponenten aus dem Container und den Container selbst.
transferFocus()Erzwingt einen Wechsel des Eingabefokus zum nächsten Component.
Tabelle 1: Methoden der Klasse jcontrol.ui.vole.Container

Eine vollständige Zusammenstellung aller Klassenmethoden mit ausführlichen Erläuterungen findet man in der JControl API-Dokumentation http://www.jcontrol.org/current/docs/api/jcontrol/ui/vole/Container.html.


Component

Die Klasse jcontrol.ui.vole.Component dient als Basisklasse für sämtliche GUI-Komponenten und enthält die folgenden Standardmethoden, die von jeder GUI-Komponente und auch von jedem Container implementiert werden:

MethodeBeschreibung
getParent()Gibt den Container zurück, der dieses Component enthält.
boolean isVisible()Prüft, ob die GUI-Komponente sichtbar ist.
remove()Entfernt die GUI-Komponente aus seinem Container.
requestFocus()Versucht, den Eingabefokus an diese GUI-Komponente zu übergeben. In manchen Situationen ist dies nicht möglich.
removeFocus()Entzieht diesem Component-Objekt den Fokus.
setBounds(int x, int y, int width, int height)Ändert die Position und Größe dieser GUI-Komponente. Das Component wird daraufhin neu gezeichnet.
setFont(Font f)Stellt die als Parameter übergebene Schriftart für dieses Component ein. Das Component wird daraufhin neu gezeichnet.
setVisible(boolean b)Schaltet die Darstellung dieser GUI-Komponente ein oder aus.
validate()Berechnet die Ausmaße (die sog. PreferredSize) dieser GUI-Komponente neu und bewirkt das Neuzeichnen der grafischen Darstellung.
Tabelle 2: Standardmethoden der Klasse jcontrol.ui.vole.Component

Für eine vollständige Auflistung und genaue Beschreibung aller Methoden der Klasse Component steht die JControl API-Dokumentation http://www.jcontrol.org/current/docs/api/jcontrol/ui/vole/Component.html zur Verfügung.


Komponenten von JControl/Vole

Die folgende Tabelle zeigt eine Liste mit allen Komponenten, die in JControl/Vole enthalten sind. Eine detailiertere Beschreibung dieser Komponenten, sowie einige Beispielprogramme finden Sie im Kapitel Standard-Komponenten. Ein Klick auf den Namen einer Komponente verweist auf ein entsprechendes Unterkapitel, in dem diese näher beschrieben wird. Zur API-Dokumentation der Komponente gelangen Sie durch einen Klick auf die Klasse.

IconNameKurzbeschreibungKlasse
AnimationContainerContainer mit speziellen Funktionenen für Komponenten, die das Interface "Animateable" implementieren.jcontrol.ui.vole.AnimationContainer
BorderZeichnet einen Rahmenjcontrol.ui.vole.Border
ButtonBeschriftete Schaltfläche die solange aktiviert ist, wie sie gedrückt wirdjcontrol.ui.vole.Button
CheckBoxSchaltfläche mit dauerhaften Zuständen on und offjcontrol.ui.vole.CheckBox
ComboBoxAus einer Liste von Einträgen kann einer ausgewählt (aktiviert) werden.jcontrol.ui.vole.ComboBox
ComponentBasisklasse aller Komponenten von JControl/Volejcontrol.ui.vole.Component
ContainerKomponente, die andere Komponenten enthalten (gruppieren) kann.jcontrol.ui.vole.Container
FrameAusgangskomponente für grafische Benutzeroberflächen, die auf JControl/Vole basierenjcontrol.ui.vole.Frame
LabelZeigt ein Bild oder nicht editierbaren Text anjcontrol.ui.vole.Label
ListZeigt Texte mit vertikalem Scrollbalken auf der rechten Seite anjcontrol.ui.vole.List
NumberChooserKomponente, die eine Nummer zeigt und mittels Schaltflächen verändern kannjcontrol.ui.vole.NumberChooser
RadioButtonSchaltfläche mit dauerhaften Zuständen on und offjcontrol.ui.vole.RadioButton
RockerSwitchSchaltfläche mit dauerhaften Zuständen on und offjcontrol.ui.vole.RockerSwitch
ScrollBarErzeugt einen Scrollbalkenjcontrol.ui.vole.ScrollBar
SliderErzeugt einen verschiebbaren Reglerjcontrol.ui.vole.Slider
TextAreaEine Textfläche mit aktivierbarem Scrollbalken an der rechten Seitejcontrol.ui.vole.TextArea
TextScrollerInnerhalb dieser Komponente wird ein Text automatisch nach oben oder unten bewegtjcontrol.ui.vole.TextScroller
DiagramZeichnet ein (animiertes) Diagrammjcontrol.ui.vole.graph.Diagram
HistogramZeichnet ein (animiertes) Histogrammjcontrol.ui.vole.graph.Histogram
BigImageMenuEin Menü, das mehrere Menüpunkte besitzt aber nur einen gleichzeitig darstelltjcontrol.ui.vole.menu.BigImageMenu
MenuAbstrakte Basisklasse für Menüs unter JControl/Volejcontrol.ui.vole.menu.Menu
MenuBarEine einfache Menüleistejcontrol.ui.vole.menu.MenuBar
MultiImageMenuMenüpunkte werden durch Bilder dargestelltjcontrol.ui.vole.menu.MultiImageMenu
TextMenuTextbasiertes, scrollbares Menüjcontrol.ui.vole.menu.TextMenu
AnalogClockStellt eine analoge Uhr darjcontrol.ui.vole.meter.AnalogClock
AnalogMeterEin analoges Messinstrumentjcontrol.ui.vole.meter.AnalogMeter
BarMeter(Animierter) Balken zur Darstellung von Wertenjcontrol.ui.vole.meter.BarMeter
DigitalMeterWerte werden in digitaler Form dargestelltjcontrol.ui.vole.meter.DigitalMeter
FanMeterAnzeige eines (animierten) Lüfters mit Anzeige eines (Drehzahl-)Wertsjcontrol.ui.vole.meter.FanMeter
SevenSegmentMeterAnzeige von Werten mittels 7-Segment-Darstellungjcontrol.ui.vole.meter.SevenSegmentMeter
Thermometer(Animiertes) Thermometer zur anschaulichen Darstellung von Messwertenjcontrol.ui.vole.meter.Thermometer
Tabelle 3: Die Komponenten von JControl/Vole



© 2000-2006 DOMOLOGIC Home Automation GmbH. All Rights Reserved.