Allgemeines


Das MenuInterface

Obwohl das Package jcontrol.ui.vole.menu grafisch sehr unterschiedliche Menüs anbietet, unterscheiden diese sich kaum in ihrer Verwendung durch ein Anwendungsprogramm. Dies wird durch die gemeinsame Schnittstelle MenuInterface ermöglicht, die von allen Menü-Typen implementiert wird und einen Satz an "Standardmethoden" zur Menüprogrammierung bereitstellt. Tabelle 1 fasst diese zusammen und beschreibt ihre Funktionalität.

MethodeBeschreibung
addMenuItem(String item)Fügt dem Menü einen neuen Eintrag hinzu. Der String item beschreibt dabei Menü-abhängig entweder einen Textmenü-Eintrag oder verweist auf eine Bildressource.
addMenuItem(String item, int pos)Fügt einen neuen Menü-Eintrag an der angegebenen Position hinzu.
removeMenuItem(String item)Entfernt einen Eintrag aus dem Menü.
enableMenuItem(String item, boolean onoff)Bestimmt für einen Menü-Eintrag, ob dieser aktiviert oder deaktiviert (ausgegraut) ist.
boolean isMenuItemEnabled(String item)Gibt zurück, ob der angegebene Menüeintrag momentan aktiviert oder deaktiviert ist.
int getSelectedIndex()Gibt den Index des momentan durch den Benutzer ausgewählten Menü-Eintrags zurück.
boolean select(int index)Selektiert den durch index übergebenen Menü-Eintrag. Der Rückgabewert weist auf Erfolg oder Misserfolg der Operation hin.
boolean select(String item)Wie select(int index) mit dem Unterschied, dass der zu selektierende Eintrag über einen String identifiziert wird.
Tabelle 1: Methoden der Schnittstelle jcontrol.ui.vole.menu.MenuInterface

Um die obigen Methoden verwenden zu können, müssen Sie zunächst ein Menü instantiieren. Dazu stehen -- je nach Anwendungszweck -- verschiedene Menü-Typen zur Verfügung. Diese werden in den folgenden Abschnitten mit Beispielprogrammen vorgestellt.


Umgang mit Menüs

Die Klasse Frame von JControl/Vole ist so ausgelegt, dass immer nur ein Menü gleichzeitig aktiv sein kann. Um ein Menü zu aktivieren und damit für den Benutzer sichtbar zu machen, muss die Methode Frame.setMenu(Menu m) aufgerufen werden. Das Menü wird daraufhin auf den Bildschirm gezeichnet (evtl. darunterliegende Komponenten werden überdeckt) und erhält den Eingabefokus. Der Benutzer kann nun einen Menüeintrag auswählen (hoch, runter, rechts, links) und die Auswahl durch einen Druck auf einen Taster bestätigen. Das UI-Framework entfernt das Menü dann automatisch wieder und löst ein ActionEvent aus.


ActionEvents empfangen

Um die von den Menüs ausgelösten ActionEvents empfangen zu können, gibt es zwei Möglichkeiten. Entweder können Sie die Methode onActionEvent aus der Klasse Frame überschreiben, oder Sie fügen dem Menü mit Hilfe der Methode setListener(ActionListener listener) einen eigenen ActionListener hinzu. In den nachfolgenden Quelltextbeispielen wird die erste Variante gezeigt.

In der überschriebenen Methode onActionListener der Klasse Frame sollte zunächst überprüft werden, ob ein empfangenes ActionEvent auch von einem Menü abgeschickt wurde (und nicht etwa von einem Button oder einer anderen GUI-Komponente). Dazu eignet sich der Java-Operator instanceof:

                if (event.getSource() instanceof Menu) {
             ...
              /* Aktionen ausfuehren */
             ...
         }

Anschließend kann mit der Methode Menu.getSelectedIndex() festgestellt werden, welcher Menüeintrag ausgewählt wurde.