Menus

Menu erstellen

SalesPoint unterstützt das einfache Erstellen von Menus. Es gibt MenuSheets (Menus), MenuSheetItems (Menuelemente) und MenuSheetSeparators (Trennlinien).

Um ein MenuSheet zu erzeugen ist einfach der Konstruktor aufzurufen, der übergebene String wird die Beschriftung des MenuSheets. Einen Separator zu erstellen sollte auch keine Probleme bereiten (siehe Quellcode). Einzig für MenuSheetItems ist neben der Beschriftung auch die Aktion zu übergeben, die bei Auswahl dieses Menuelements ausgeführt werden soll. Da wohl nur in den seltensten Fällen zwei MenuSheetItems die gleiche Aufgabe haben, ist es üblich, die Aktionen gleich im Konstruktor zu definieren.

Ein nettes Gimmick sind die Shortcuts. Mittels setMnemonic(char) werden sie zugewiesen. Kommt das gewählte Zeichen in der Beschriftung des Menufeldes vor, so wird das erste Auftauchen dieses Zeichens unterstrichen. Man kann auch die selben Shortcuts für mehrere Menufelder benutzen. Allerdings sollte man vermeiden dies innerhalb einer Hierarchieebene zu tun, da man sonst nur das erste Menufeld erreicht.

Nachdem alle Elemente des Menus definiert sind, müssen sie noch zusammengesetzt werden. Dafür gibt es die Methode add(MenuSheetObject), die ein neues Element an das entspechende MenuSheet anfügt.

Der Name der Funktion, die das Menu zurückliefern soll, hängt davon ab, ob das Menu für einen Shop, einen SalesPoint (ohne laufenden Prozess) oder einen Prozess bestimmt ist. Der Rückgabewert ist die Menuleiste, die oberste Hierarchieebene des Menus. Der Name, den man ihr gibt - im Beispiel ("Menuleiste") - wird im Menu nicht zu sehen sein.

import sale.Shop;

public class MainClass {

  public static void main(String[] args) {
    SalesPointApplication spa = new SalesPointApplication();
    Shop.setTheShop(spa);
    spa.start();
  }
}
import sale.*; //Shop, MenuSheet, MenuSheetItem, MenuSheetSeparator

public class SalesPointApplication extends Shop {

  public SalesPointApplication() {
    super();
  }

  public void quit() {
    if (shutdown (false)) {
      System.exit(0);
    }
  }

  protected MenuSheet createShopMenuSheet() {
    //Erstellen der Untermenus, Menueinträge und Separatoren
    MenuSheet msMenuBar = new MenuSheet("Menuleiste");
    MenuSheet msMenu1 = new MenuSheet("Menu 1");
    MenuSheet msSubMenu1_2 = new MenuSheet("1.2 Untermenu");
    MenuSheet msMenu2 = new MenuSheet("Menu 2");
    MenuSheetSeparator mss1 = new MenuSheetSeparator();
    MenuSheetItem msiMenuItem1_1 = new MenuSheetItem("1.1 Menueintrag", new sale.Action() {
      public void doAction(SaleProcess p, SalesPoint sp) {
        System.out.println("Menueintrag 1.1 gewählt");
      }
    });
    MenuSheetItem msiMenuItem1_2_1 = new MenuSheetItem("1.2.1 Menueintrag", new sale.Action() {
      public void doAction(SaleProcess p, SalesPoint sp) {
        System.out.println("Menueintrag 1.2.1 gewählt");
      }
    });
    MenuSheetItem msiMenuItem1_2_2 = new MenuSheetItem("1.2.2 Menueintrag", new sale.Action() {
      public void doAction(SaleProcess p, SalesPoint sp) {
        System.out.println("Menueintrag 1.2.2 gewählt");
      }
    });
    MenuSheetItem msiMenuItem2_1 = new MenuSheetItem("2.1 Menueintrag", new sale.Action() {
      public void doAction(SaleProcess p, SalesPoint sp) {
        System.out.println("Menueintrag 2.1 gewählt");
      }
    });
    //Shortcuts definieren
    msMenu1.setMnemonic('1');
    msiMenuItem1_1.setMnemonic('1');
    msSubMenu1_2.setMnemonic('2');
    msiMenuItem1_2_1.setMnemonic('1');
    msiMenuItem1_2_2.setMnemonic('2');
    msMenu2.setMnemonic('2');
    msiMenuItem2_1.setMnemonic('M');
    //Zusammensetzen des Menus
    msMenuBar.add(msMenu1);
        msMenu1.add(msiMenuItem1_1);
        msMenu1.add(mss1);
        msMenu1.add(msSubMenu1_2);
            msSubMenu1_2.add(msiMenuItem1_2_1);
            msSubMenu1_2.add(msiMenuItem1_2_2);
    msMenuBar.add(msMenu2);
        msMenu2.add(msiMenuItem2_1);
    return msMenuBar;
  }
}