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.