3.11.1. Einführendes Beispiel

Die Verwendung von Item Models soll vorab anhand eines Beispiels verdeutlicht werden (das komplette ItemModelSnipped findet sich hier).

Das Rahmenprogramm sieht wie folgt aus:

  1  public final class ItemModelSnipped implements IApplication {
  2  
  3      @Override
  4      public void start(final IApplicationLifecycle lifecycle) {
  5  
  6          //create a root frame
  7          final IFrameBluePrint frameBp = BPF.frame();
  8          frameBp.setSize(new Dimension(400, 300)).setTitle("Menu and Item Models");
  9          final IFrame frame = Toolkit.createRootFrame(frameBp, lifecycle);
 10  
 11          //Create the menu bar
 12          final IMenuBarModel menuBar = frame.getMenuBarModel();
 13          
 14          //Use a border layout, add toolbar and composite
 15          frame.setLayout(BorderLayout.builder().gap(0).build());
 16          final IToolBarModel toolBar = frame.add(BPF.toolBar(), BorderLayout.TOP).getModel();
 17          final IComposite composite = frame.add(BPF.composite().setBorder(), BorderLayout.CENTER);
 18  
 19          //set the root frame visible
 20          frame.setVisible(true);
 21      }
 22  }

Es wird ein Frame verwendet, welches mittels eines Border Layout eine Toolbar und ein Composite darstellt. Zudem wird eine Menu Bar erzeugt.

Der folgende Code beinhaltet die Erzeugung der Items und Menüs:

  1      //create a checked item for filter
  2      final CheckedItemModel filter = new CheckedItemModel("Filter", IconsSmall.FILTER);
  3      filter.setSelected(true);
  4  
  5      //create save action (with constructor)
  6      final ActionItemModel save = new ActionItemModel("Save", IconsSmall.DISK);
  7      save.setAccelerator(VirtualKey.S, Modifier.CTRL);
  8  
  9      //create copy action (with constructor)
 10      final ActionItemModel copy = new ActionItemModel("Copy", IconsSmall.COPY);
 11      copy.setAccelerator(VirtualKey.C, Modifier.CTRL);
 12  
 13      //create paste action (with builder)
 14      final IActionItemModel paste 
 15          = ActionItemModel
 16              .builder()
 17              .setText("Paste")
 18              .setIcon(IconsSmall.PASTE)
 19              .setAccelerator(VirtualKey.V,Modifier.CTRL)
 20              .build();
 21  
 22      //create a menu and add items
 23      final MenuModel menu = new MenuModel("Menu");
 24      menu.addItem(save);
 25      menu.addItem(copy);
 26      menu.addItem(paste);
 27      menu.addSeparator();
 28      menu.addItem(filter);
 29      menu.addSeparator();
 30  
 31      //create a sub menu and add some items
 32      final IMenuModel subMenu = menu.addMenu("Sub Menu");
 33      final IActionItemModel action1 = subMenu.addActionItem("Action 1");
 34      final IActionItemModel action2 = subMenu.addActionItem("Action 2");
 35      final IActionItemModel action3 = subMenu.addActionItem("Action 3");
 36  
 37      //add the menu to the menu bar
 38      menuBar.addMenu(menu);
 39  
 40      //sets the menu as popup menu on the composite
 41      composite.setPopupMenu(menu);
 42  
 43      //add some actions and items to the toolbar
 44      toolBar.addItem(save);
 45      toolBar.addItem(copy);
 46      toolBar.addItem(paste);
 47      toolBar.addSeparator();
 48      toolBar.addItem(filter);
 49      toolBar.addSeparator();
 50  
 51      //add menu to the toolbar
 52      toolBar.addItem(menu);

Anschließend werden zu einigen Items Listener hinzugefügt, welche deren Funktion mit Hilfe einer Konsolenausgabe belegen:

  1      //add listeners to the items
  2      filter.addItemListener(new SysoutSelectionListener(filter));
  3      save.addActionListener(new SysoutActionListener(save));
  4      copy.addActionListener(new SysoutActionListener(copy));
  5      paste.addActionListener(new SysoutActionListener(paste));
  6      action1.addActionListener(new SysoutActionListener(action1));
  7      action2.addActionListener(new SysoutActionListener(action2));
  8      action3.addActionListener(new SysoutActionListener(action3));

Die folgenden Abbildungen zeigen das Ergebnis, jeweils mit geöffnetem Main Menu, ToolBar Menu und Popup Menu:

Deaktiviert man in der Toolbar nun zum Beispiel den Filter Toggle Button, wird auch das entsprechende Checked Menu Item in den drei vorhandenen Menüs deaktiviert und auf dem filter Item ein Selection Event gefeuert.

Abbildung 27. ItemModelSnipped - Checked Item Binding

ItemModelSnipped - Checked Item Binding

Im folgenden wird nun Action2 ausgeblendet:

    action2.setVisible(false);

Die Abbildung zeigt das Ergebnis:

Abbildung 28. ItemModelSnipped - Sichtbarkeit

ItemModelSnipped - Sichtbarkeit

Action2 wird in den anderen Menüs selbstverständlich auch nicht mehr angezeigt. Mit Hilfe von setVisible(false) wird der gleiche visuelle Effekt erzielt, als hätte man:

    subMenu.removeItem(action2);

ausgeführt. Allerdings müsste man hier zum wieder sichtbar machen das Folgende ausführen:

    subMenu.addItem(1, action2);

was bedeutet, dass man den Index kennen muss, wo das Item eingefügt werden soll, während man im ersten Fall mit

    action2.setVisible(true);

auskommt.

Anmerkung: An welchem Index man eine Action wieder sichtbar machen müsste, ist bei mehr als einem ausgeblendeten Item nicht mehr trivial, und ohne genaue Kenntnis aller Menüeinträge und deren Sichtbarkeit nicht lösbar.


Siehe auch PDF Version dieses Dokuments, Jowidgets API Spezifikation