Menu v Javě
Z MiS
Více informací viz Tutoriály Oracle > Menu.
Obsah |
Třída javax.swing.JMenuBar
- Vytváří v okně pruh (panel), na kterém bude zobrazeno hlavní menu.
- Menu přiřazujeme oknu metodou
setJMenuBar(...)
. - Oknu můžeme přiřadit jen jedno hlavní menu.
- Do tohoto pruhu přidáváme jednotlivé položky hlavního menu (viz dále).
menuBar = new JMenuBar(); okno.setJMenuBar(menuBar);
Vytváření menu a jeho přiřazení k oknu se obvykle provádí v metodě
initComponets()
Třída JMenu
- Reprezentuje jednu rozbalovací položku.
- Přiřazujeme ji instanci třídy JMenuBar.
- Metodou setMnemonic(...) můžeme přiřadit akční klávesu.
menu = new JMenu("A Menu"); menu.setMnemonic(KeyEvent.VK_A); menu.getAccessibleContext().setAccessibleDescription("Textová popiska menu");
menuBar.add(menu);
- Vnořená menu
- Dílčí vnořená menu se vytvářejí stejně:
submenu = new JMenu("A submenu"); menu.add(submenu);
Třída javax.swing.JMenuItem
- Reprezentuje jednu zvolitelnou položku v menu.
- Lze vkládat i položky s obrázky atd.
menuItem = new JMenuItem("A menu item");
- Položky vkládáme postupně metodou add(...). Pořadí odpovídá pořadí položek v menu.
menu.add(menuItem);
- Mezi položky můžeme vložit oddělovací čáru:
menu.addSeparator();
Speciální položky
-
JRadioButtonMenuItem
-
JCheckBoxMenuItem
-
JPopupMenu
- Jejich události se zpracovávají stejně jako u odpovídajících prvků GUI.
Ošetření událostí
- Položky menu se chovají jako stejně jako tlačítka.
- Lze jim tedy přiřadit ActionListener a generují události ActionEvent.
ActionEvent menuItem.addActionListener(this);
Rozšíření
- Mnemonics — navigace v menu pomocí kláves
- Nastavujeme samostatnou metodou:
menuItem.setMnemonic(KeyEvent.VK_T);
- Nebo kratší zápis pomocí parametrů konstruktoru:
menuItem = new JMenuItem("A menu item", KeyEvent.VK_T);
- Accelerators — klávesové zkratky
- někdy také označovány jako „shortcuts“
- obejdou nutnost navigace skrz menu
- často využívají třídu
KeyStroke
— kombinuje klávesu a modifikátor (Alt, Ctrl,...)
menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T, ActionEvent.ALT_MASK));