3.11.11. Menu Model Key Binding

Die Key Accelerators in einem Popup Menüs werden, im Vergleich zu denen in einer Menu Bar, nicht automatisch gebunden. Die Klasse org.jowidgets.tools.model.item.MenuModelKeyBinding bietet verschiedenen Möglichkeiten, die Key Accelerator der Action Item Models eines Menu Models an ein IComponent zu binden.

Die folgende statische Methode führt ein Binding eines Menu Model mit einem Component durch:

    public static MenuModelKeyBinding bind(final IMenuModel menu, final IComponent component) {...}

Tritt auf dem component (oder auf einem seiner Kinder, falls es ein IContainer ist) ein Key Event auf, wird geprüft, ob dafür eine Aktion existiert, und wenn ja, wird diese ausgeführt. Wird das übergebene component disposed, wird automatisch auch das Binding disposed. Es werden auch die Aktionen gebunden, welche erst nach dem Aufruf von bind() hinzugefügt wurden.

Das folgende Snipped zeigt die Verwendung (das vollständige Snipped findet sich hier).

  1      //create a root frame
  2      final IFrameBluePrint frameBp = BPF.frame();
  3      frameBp.setSize(new Dimension(400, 300)).setTitle("Menu model key binding");
  4      final IFrame frame = Toolkit.createRootFrame(frameBp, lifecycle);
  5      frame.setLayout(FillLayout.get());
  6  
  7      //create a popup menu with some actions
  8      final MenuModel popup = new MenuModel();
  9  
 10      final IActionItemModel action1 = popup.addActionItem("Action1");
 11      action1.setAccelerator(VirtualKey.DIGIT_1, Modifier.CTRL);
 12  
 13      final IActionItemModel action2 = popup.addActionItem("Action2");
 14      action2.setAccelerator(VirtualKey.DIGIT_2, Modifier.CTRL);
 15  
 16      final IActionItemModel action3 = popup.addActionItem("Action3");
 17      action3.setAccelerator(VirtualKey.DIGIT_3, Modifier.CTRL);
 18  
 19      //set the popup menu for the frame
 20      frame.setPopupMenu(popup);
 21  
 22      //do the key binding to the frame (recursive)
 23      MenuModelKeyBinding.bind(popup, frame);
 24  
 25      //set the root frame visible
 26      frame.setVisible(true);
 27  
 28      //add some actions after binding to show that they are bound too
 29      final IMenuModel submenu = popup.addMenu("Submenu");
 30  
 31      final IActionItemModel action4 = submenu.addActionItem("Action4");
 32      action4.setAccelerator(VirtualKey.DIGIT_4, Modifier.CTRL);
 33  
 34      final IActionItemModel action5 = submenu.addActionItem("Action5");
 35      action5.setAccelerator(VirtualKey.DIGIT_5, Modifier.CTRL);
 36  
 37      //add listeners to the items
 38      action1.addActionListener(new SysoutActionListener(action1));
 39      action2.addActionListener(new SysoutActionListener(action2));
 40      action3.addActionListener(new SysoutActionListener(action3));
 41      action4.addActionListener(new SysoutActionListener(action4));
 42      action5.addActionListener(new SysoutActionListener(action5));

In Zeile 23 wird das Binding durchgeführt.


Siehe auch PDF Version dieses Dokuments, Jowidgets API Spezifikation