Selektoren


ComboBox

Die ComboBox ist eine interaktive GUI-Komponente, die dem Benutzer mehrere Texteinträge zur Auswahl anbietet. Im deaktivierten Zustand ist sie zugeklappt und zeigt den derzeitig ausgewählten Eintrag an. Hat sie den Eingabefokus, kann die ComboBox vom Benutzer durch Betätigen der Select-Taste oder durch Drücken auf dem Touch-Screen geöffnet werden. Nun kann ein anderer Eintrag ausgewählt werden, wobei die Liste der Einträge herauf- oder herunterscrollt, wenn sie länger als der darstellbare Bereich ist.

Die wichtigsten Methoden der Klasse jcontrol.ui.wombat.ComboBox sind in der folgenden Tabelle 1 aufgeführt:

MethodeBeschreibung
ComboBox(int x, int y, int width)Erzeugt eine neue ComboBox an der angegebenen Position mit der angegebenen Breite.
add(String item)Fügt der ComboBox einen neuen Eintrag hinzu.
String getSelectedItem()Gibt den momentan selektierten Eintrag der ComboBox als String zurück.
int getSelectedIndex()Gibt den Index des momentan selektierten Eintrags der ComboBox zurück.
remove(String item)Entfernt einen Eintrag aus der ComboBox.
setSelection(int index)Selektiert den als Index übergebenen Eintrag in der ComboBox.
Tabelle 1: Methoden der Klasse jcontrol.ui.wombat.Container

Installiert man mit Hilfe der Methode setActionListener(ActionListener listener) einen ActionListener auf die ComboBox, feuert sie ITEM_SELECTED-ActionEvents, wenn der Benutzer eine Auswahl tätigt.


NumberChooser

Der NumberChooser ist eine GUI-Komponente bestehend aus einem Textfeld und zwei Schaltflächen. Das Textfeld zeigt eine Dezimalzahl an, deren Wert durch Betätigen der beiden Pfeiltasten eingestellt werden kann. Dabei wird der Wert jeweils um 1 erhöht, bzw. reduziert (der Benutzer kann diese Schrittweite nicht direkt verändern). Minimaler und maximaler Wert müssen dem Konstruktor übergeben werden. Vom Programmierer beeinflussbar sind ferner die verwendete Schriftart sowie Größe und Position der GUI-Komponente. Folgende Methoden stehen zur Verfügung:

MethodeBeschreibung
NumberChooser(int x, int y, int min, int max)Erzeugt einen neuen NumberChooser an der angegebenen Position mit dem durch die Parameter min und max abgegrenzten Wertebereich.
int getValue()Gibt den aktuellen Wert der GUI-Komponente NumberChooser zurück.
setValue(int value)Ändert den Wert des der GUI-Komponente NumberChooser. Der neue Wert muss innerhalb des dem Konstruktor übergebenen Wertebereichs liegen.
Tabelle 2: Methoden der Klasse jcontrol.ui.wombat.NumberChooser


MultiImageMenu

Das MultiImageMenu ist eine Kompontente, die dem Benutzer eine Auswahlmöglichkeit in Form von Bildsymbolen, alternativ Texteinträgen, anbietet. Diese werden in Tabellenform ausgerichtet, die Zeilen- und Spaltenanzahl ist frei wählbar. Der Abstand der Symbole zueinander richtet sich nach dem verfügbaren Platz. Das MultiImageMenu besitzt keinen Scrollbar. Es muß also darauf geachtet werden, daß die Größe und Anzahl der anzuzeigenden Symbole den verfügbaren Platz nicht überschreitet. Folgende Methoden stehen zur Verfügung:

MethodeBeschreibung
MultiImageMenu(int x, int y, int width, int height, int horizontalCount, int verticalCount, int style)Erzeugt ein neues MultiImageMenu mit angegebener Position und Größe. Die Parameter horizontalCount und verticalCount geben die gewünschte Anzahl von Spalten bzw. Zeilen an. Für den style-Parameter stehen die beiden Konstanten STYLE_SHOW_BORDER und STYLE_NONE zur Verfügung.
setImageItems(Resource[] imageItems)Füllt das MultiImageMenu mit der angegebenen Liste aus Image-Ressourcen. Es dürfen null-Werte vorkommen, die als leere Felder im MultiImageMenu erscheinen.
setTextItems(String[] textItems)Füllt das MultiImageMenu mit der angegebenen Liste aus Strings. Es dürfen null-Werte vorkommen, die als leere Felder im MultiImageMenu erscheinen.
int addMenuItem(String item)Fügt einen Eintrag in das MultiImageMenu hinzu. Ist zu dem angegebenen String eine Resource dieses Namens verfügbar, so wird diese als Symbol angezeigt. Ansonsten wird der String selbst angezeigt. Der Rückgabewert entspricht dem Index im Menü.
int insertMenuItem(String item, int index)Fügt einen Eintrag in das MultiImageMenu an der angegebenen Position hinzu. Ein eventuell bereits vorhandener Eintrag wird überschrieben. Ist zu dem angegebenen String eine Resource dieses Namens verfügbar, so wird diese als Symbol angezeigt. Ansonsten wird der String selbst angezeigt. Der Rückgabewert entspricht dem Index im Menü.
int getFirstFreeIndex()Gibt den ersten Index im MultiImageMenu zurück, an dem noch kein Symbol vorhanden ist.
setTouchMargin(int margin)Gibt die Größe des nicht-touchsensitiven Bereichs um die Menüeinträge herum an. Standardwert ist 5.
Tabelle 3: Methoden der Klasse jcontrol.ui.wombat.menu.MultiImageMenu

Zum Abschluss dieses Kapitels soll ein kurzer Quelltext gezeigt werden, der den Umgang mit den GUI-Komponenten ComboBox, NumberChooser und MultiImageMenu demonstriert. Er ist ebenfalls im Projekt WombatSelectorExample im Verzeichnis "demos/cobra5329/WombatTutorial/WombatSelectorExample" Ihrer JControl/IDE-Installation befindet (unter Windows "C:\Programme\JControl\demos\cobra5329\WombatTutorial\WombatSelectorExample"). Bild 2 zeigt einen Screenshot des Beispielprogramms.

Bild 2: Das WombatSelectorExample

1    /**
2     * <p>This example demonstrates how to use the
3     * components ComboBox, NumberChooser and MultiImageMenu within
4     * the GUI framework JControl/Wombat.</p>
5     *
6     * <p>(C) DOMOLOGIC Home Automation GmbH 2007</p>
7     */
8    import jcontrol.ui.wombat.Frame;
9    import jcontrol.ui.wombat.Container;
10    import jcontrol.ui.wombat.event.ActionListener;
11    import jcontrol.ui.wombat.Border;
12    import jcontrol.ui.wombat.ComboBox;
13    import jcontrol.ui.wombat.NumberChooser;
14    import jcontrol.ui.wombat.menu.MultiImageMenu;
15    import jcontrol.io.Resource;
16    import java.io.IOException;
17    import jcontrol.graphics.Color;
18    import jcontrol.ui.wombat.event.ActionEvent;
19    
20    public class WombatSelectorExample extends Frame implements ActionListener {
21       
22        /**
23         * Constructor WombatComboNumberExample
24         */
25        public WombatSelectorExample() {
26            // create a container for the content of this frame
27            Container content = new Container();
28           
29            // create borders and add them to the content
30            Border border1 = new Border("ComboBox", 60, 40, 180, 40,
31                Border.STYLE_ETCHED_BORDER);
32            content.add(border1);
33            Border border2 = new Border("NumberChooser", 60, 80, 180, 40,
34                Border.STYLE_ETCHED_BORDER);
35            content.add(border2);
36            Border border3 = new Border("MultiImageMenu", 60, 120, 180, 70,
37                Border.STYLE_ETCHED_BORDER);
38            content.add(border3);
39           
40            /* create all components
41               add them to the content
42               and define an actionlistener for each component */
43           
44            // ComboBox
45            ComboBox comboBox = new ComboBox(new String[]{
46                "Entry 1", "Entry 2", "Entry 3"}, 110, 56, 80);
47            content.add(comboBox);
48            comboBox.setActionListener(this);
49           
50            // NumberChooser
51            NumberChooser numberChooserDay = new NumberChooser(112, 96, 1, 31);
52            numberChooserDay.setValue(1);
53            content.add(numberChooserDay);
54            numberChooserDay.setActionListener(this);
55            NumberChooser numberChooserMonth = new NumberChooser(136, 96, 1, 12);
56            numberChooserMonth.setValue(1);
57            content.add(numberChooserMonth);
58            numberChooserMonth.setActionListener(this);
59            NumberChooser numberChooserYear = new NumberChooser(160, 96, 2000, 2100);
60            numberChooserYear.setValue(1);
61            content.add(numberChooserYear);
62            numberChooserYear.setActionListener(this);
63           
64            // MultiImageMenu
65            MultiImageMenu multiImageMenu = new MultiImageMenu(70, 136, 160, 44,
66                3, 1, MultiImageMenu.STYLE_SHOW_BORDER);
67            try {
68                multiImageMenu.setImageItems(new Resource[]{
69                    new Resource("item1.jcif"),
70                    new Resource("item2.jcif"),
71                    new Resource("item3.jcif")});
72            } catch(IOException ioe) {}
73            multiImageMenu.setBackgroundColor(Color.WHITE);
74            content.add(multiImageMenu);
75            multiImageMenu.setActionListener(this);
76           
77            // set the content to this frame
78            setContent(content);
79            // finally, make the frame visible     
80            setVisible(true);
81        }
82    
83        /**
84         * This method is called every time any component declared above
85         * fires an action event.
86         *
87         * @param e the ActionEvent
88         */
89        public void onActionEvent(ActionEvent e) {
90            // add some code if you want to
91        }
92    
93        /**
94         * The main method.
95         *
96         * @param args
97         *        The main arguments
98         */
99        public static void main(String[] args) {
100            new WombatSelectorExample();
101        }
102    }
Listing 2: WombatSelectorExample.java