3.11.2. Menu Bar Model

Ein Menu Bar Model ist ein Model für eine Menu Bar. Es folgt eine Beschreibung der wichtigsten Methoden der Schnittstelle IMenuBarModel:

Hinzufügen von existierenden Menu Models

Mit Hilfe der folgenden Methoden können bereits existierende Menu Models hinzugefügt werden:

    void addMenu(IMenuModel menu);

    void addMenu(int index, IMenuModel menu);
Hinzufügen von Menu Models mit Hilfe von Menu Model Buildern

Mit den folgenden Methoden lassen sich Menus mit Hilfe von Menu Model Buildern hinzufügen:

    IMenuModel addMenu(IMenuModelBuilder menuBuilder);

    IMenuModel addMenu(int index, IMenuModelBuilder menuBuilder);

Dabei wird beim Hinzufügen die build() Methode aufgerufen, das gebaute Menu Model hinzugefügt und zurückgegeben. Damit können zum Beispiel Konstrukte der folgenden Art realisiert werden:

  1      final IMenuModel menu1 = menuBar.addMenu(
  2              MenuModel
  3                  .builder()
  4                  .setId(MENU_1_ID)
  5                  .setText("Menu1")
  6                  .setMnemonic('1'));
  7          
  8      final IMenuModel menu2 = menuBar.addMenu(
  9              MenuModel
 10                  .builder()
 11                  .setId(MENU_2_ID)
 12                  .setText("Menu2")
 13                  .setMnemonic('2'));
Erstellen und Hinzufügen von Menüs mit einem Aufruf

Die folgenden Methoden erlauben das erstellen und Hinzufügen von Menüs mit einem Aufruf:

    IMenuModel addMenu();

    IMenuModel addMenu(String text);

Dabei wird ein neues Menu Model erzeugt, hinzugefügt und zurückgegeben. Das folgende Beispiel demonstriert die Verwendung:

  1      final IMenuModel menu1 = menuBar.addMenu("Menu1");
  2      final IMenuModel menu2 = menuBar.addMenu("Menu2");
  3      final IMenuModel menu3 = menuBar.addMenu("Menu3");
Hinzufügen von Menüs relativ zu anderen Menüs

Die folgenden Methoden können verwendet werden, um ein Item an eine bestimmte Stelle in einer Menu Bar hinzuzufügen:

    void addBefore(IMenuModel newMenu, String id);
    
    void addAfter(IMenuModel newMenu, String id);

Der id gibt dabei das Menu an, bezüglich welcher das neue Menü hinzugefügt werden soll. Ist dieses nicht vorhanden, wird eine IllegalArgumentException geworfen. Mittels der Methode findMenuById(String id) kann vorab überprüft werden, ob ein solches Menü vorhanden ist.

Die Verwendung soll anhand eines Beispiels demonstriert werden. Der folgende Code erzeugt eine Menu Bar mit drei Menüs wobei das letzte ein Hilfe Menu mit fester id ist:

  1      final IMenuModel menu1 = menuBar.addMenu("Menu1");
  2      final IMenuModel menu2 = menuBar.addMenu("Menu2");
  3          
  4      IMenuModel helpMenu = menuBar.addMenu(
  5              MenuModel
  6                  .builder()
  7                  .setId(HELP_MENU_ID)
  8                  .setText("Help"));

An einer anderen Stelle könnte man eine Contribution zur Menu Bar wie folgt machen:

  1      final IMenuModel customMenu = new MenuModel("Custom menu");
  2      menuBar.addBefore(customMenu, HELP_MENU_ID);

Die folgende Abbildung zeigt das Ergebnis:

Abbildung 29. Menu Bar Contribution Beispiel

Menu Bar Contribution Beispiel

Hinzufügen der Menüs einer anderen Menu Bar

Mit Hilfe der folgenden Methode werden alle Menüs der übergebenen Menu Bar hinzugefügt:

    void addMenusOfModel(IMenuBarModel model);

Dabei wird eine Referenz der Items hinzugefügt und keine Kopie!

Entfernen von Menüs

Mit Hilfe der folgenden Methoden können Menüs aus einer Menu Bar entfernt werden:

    void removeMenu(final IMenuModel item);

    void removeMenu(int index);

    void removeAllMenus();
ListModelListener

Um sich über das Hinzufügen oder Entfernen von Menüs informieren zu lassen, kann ein IListModelListener verwendet werden:

    void addListModelListener(IListModelListener listener);

    void removeListModelListener(IListModelListener listener);

Dieser hat die folgenden Methoden:

    void afterChildAdded(int index);

    void beforeChildRemove(int index);

    void afterChildRemoved(int index);
Zugriff auf die Menüs einer Menu Bar

Die folgende Methode liefert eine nicht modifizierbare Kopie der aktuell vorhandenen Menüs der Menu Bar.

    List<IMenuModel> getMenus();

Um ein Menu Anhand einer id zu finden, kann die folgende Methode verwendet werden:

    IMenuModel findMenuById(String id);

Existiert kein solches Menü in der Menu Bar, wird null zurückgegeben.

Kopieren einer Menu Bar

Mit Hilfe der folgenden Methode kann eine Kopie (Deep Copy) einer Menu Bar erzeugt werden. Die Kopie hat dabei die gleichen Menüs wie das Original (jedoch nicht die Selben). Registrierte Listener werden nicht mitkopiert. Dadurch sind bereits gebundene Items nicht an die Kopie gebunden.

    IMenuBarModel createCopy();
Menu Bar Model Instanzen

Die Klasse org.jowidgets.tools.model.item.MenuBarModel liefert eine Implementierung der IMenuBarModel Schnittstelle. Eine neu Instanz kann entweder mittels new wie folgt erzeugt werden:

    IMenuBarModel menuBar = new MenuBarModel();

oder man verwendet die statische create() Methode:

    IMenuBarModel menuBar = MenuBarModel.create()

Man kann eine Instanz aber auch direkt von einem Frame mittels

    IMenuBarModel getMenuBarModel();

oder von einer Menu Bar mittels

    IMenuBarModel getModel();

erhalten.

Um ein existierendes Menu Bar Model auf einem Frame zu setzen, kann die folgende Methode verwendet werden:

    void setMenuBar(IMenuBarModel model);

Siehe auch PDF Version dieses Dokuments, Jowidgets API Spezifikation