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.
Methode | Beschreibung |
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.