Java felhasználói felület Menük Action Elek Tibor
Menük Menü komponensek Menü konténerek: - JMenuBar - JPopupMenu Almenü: - JMenu Menü elemek: - JSeparator - JMenuItem - JCheckBoxMenuItem - JRadioButtonMenuItem
JMenuBar Menü konténer Box layout-al Komponensek, amelyeknek lehet: JFrame, JDialog, JApplet, JInternalFrame, JRootPane Használat: - Létrehozás: JMenuBar mb = new JMenuBar(); - Menük belepakolása mb.add(menufile); mb.add(menusugo); - Hozzárendelés a konténerhez: frmvalami.setjmenubar(mb);
JPopupMenu Felbukkanó menü Menü konténer Box layout-al Használat: - Létrehozás: konstruktorral, pl. JPopupMenu pm = new JPopupMenu(); - Menük, menüelemek belepakolása, levétele JMenuItem add(jmenuitem) void remove(int pos) void addseparator() pl. pm.add(menufile); pm.add(menuitemvalami);
JPopupMenu - Hozzárendelés komponenshez komp.setcomponentpopupmenu(pm); vagy megjelenítés valamelyik komponenshez pm.show(komp, x, y); Ez utóbbit a komponens egér eseményeiből szokás hívni. Eclipse egy ehhez hasonló kódot generál a mousepressed és mousereleased eseményekre: public void mousepressed(mouseevent e) { if (e.ispopuptrigger()) { pm.show(e.getcomponent(), e.getx(), e.gety()); } }
Mnemonic és Accelerator A JAbstractButton-ban definiálva van egy setmnemonic metódus amellyel gyorsbillentyűt állíthatunk be bármilyen gombnak vagy menüelemnek menuelso.setmnemonic('e'); mielsoa.setmnemonic(keyevent.vk_a); - A gyorsbillentyűt ALT-al kell leütni ha valamilyen gombról vagy menüről van szó. Menü elemek esetén a mnemonic csak akkor használható, ha a menü (amiben van a menü elem) már le van gördítve és nem kell ALT
Mnemonic és Accelerator A JMenuItem-ben definiálva van egy setaccelerator metódus amellyel szintén gyorsbillentyűt állíthatunk be egy menüelemnek, de ez aktiválja a funkciót akár a menüben vagyunk akár nem. - A metódus paramétere egy javax.swing.keystroke, amelyet a túlterhelt getkeystroke metódusával lehet létrehozni. Pl. ALT-B mielsob.setaccelerator( KeyStroke.getKeyStroke('B', InputEvent.ALT_DOWN_MASK));
JMenu Menüelem, amelyben vannak menüelemek Belső menü konténer Box layout-al Használat: - Létrehozás: JMenu menufile = new JMenu( File ); - Menük, menüelemek belepakolása m.add(menuvalami); m.add(menuitemvalami); - Belerakás menüsorba, popup menübe vagy menübe mb.add(menufile);
JMenu Fontosabb metódusok JMenuItem add(jmenuitem) void remove(jmenuitem) void addseparator() void settext(string) void seticon(imageicon)
JMenuItem Menüelem, akció végrehajtás Használat: - Létrehozás: JMenuItem miopen = new JMenuItem( Open ); - eseménykezelő megadás miopen.addactionlistener(this); vagy Akció megadás lásd később - Belerakás popup menübe vagy menübe menufile.add(miopen);
JMenuItem Fontosabb metódusok void settext(string) void seticon(imageicon) void setmnemonic(int) void setaccelerator(keystroke) void addactionlistener(actionlistener) void setaction(action) void setactioncommand(string)
JCheckBoxMenuItem Menüelem, igen-nem választás Használat: - Létrehozás: JCheckBoxMenuItem cmibold = new JCheckBoxMenuItem( Bold, true); - eseménykezelő megadás cmibold.additemlistener(this); - Belerakás popup menübe vagy menübe menuedit.add(cmibold);
JCheckBoxMenuItem Fontosabb metódusok void settext(string) void setselected(boolean) void setmnemonic(int) void setaccelerator(keystroke) void additemlistener(itemlistener)
JRadioButtonMenuItem Menüelem, választás néhányból Használat: - Létrehozás: JRadioButtonMenuItem rmivalami = new JRadioButtonMenuItem( Valami ); - Eseménykezelő megadás rmivalami.addactionlistener(this); - Hozzáadás a ButtonGrouphoz bg.add(rmivalami); - Belerakás popup menübe vagy menübe menuedit.add(rmivalami);
JRadioButtonMenuItem Fontosabb metódusok void settext(string) void setselected(boolean) void setmnemonic(int) void setaccelerator(keystroke) void addactionlistener(actionlistener) void additemlistener(actionlistener)
Példa FrmMenuPelda Menük használata, Mnemonic az Első menün és a A menüpont -on, Accelerator a B menüpont -on. Közös példányszintű tagosztály eseménykezelő a menükhöz. Két popup menü a két felirathoz, két féle megjelenítési móddal
Action Szerep: Elkülöníteni a funkcionalitást és állapotot a komponenstől. Akkor célszerű használni, ha több komponens is ugyanazt a funkciót hivatott kiváltani. Pl. menüből és eszköztár gombjáról is meglehet valamit csinálni. Az Action változásai az összes hozzárendelt komponensen változtatnak. Pl. letiltása letiltja az összes hozzárendelt komponenst. Használható AbstractButton-oknál, JComboBox, JTextField
Action Az Action-ban megadható: eseménykezelő metódus (actionperformed) akció parancs komponens felirata komponens icon-ja tooltip szövege help szövege mnemonic-ja gyorsbillentyűje selected állapota (pl checkbox) engedélyezettsége
Action Osztályok, interface-k: Action, AbstractAction Használata: - Definiálás: célszerűen leszármaztatni AbstractAction-ból, felüldefiniálva az actionperformed metódust. Célszerű beágyazott osztályt használni. private class SajatAction extends AbstractAction { public SajatAction() { super( Átír ); } public void actionperformed(actionevent e){ atiras(); } }
Action Használata: - Létrehozás: SajatAction sa = new SajatAction(); - Tulajdonságok állítása: sa.putvalue(sajataction.name, alma ); sa.putvalue(sajataction.mnemonic_key, KeyEvent.VK_L); - Hozzárendelés a komponensekhez: btnvalami.setaction(sa); - Tulajdonságok utólagos állítása minden komponensre végrehajtódik!!!
Példa FrmActionPelda Egy akció, amely kiírja a System.out-ra, hogy körte. Az akciónak van neve, tooltip-je, acceleratora. Hozzárendelve egy menü elemhez és egy gombhoz. - Egy menü elem amellyel letilthatjuk az akciót - Egy menü elem amellyel megváltoztathatjuk a feliratát. Bemutatni a settext és setaction sorrend hatását.
Gyakorlat Hozzon létre egy űrlapot név és szül.hely megadására (JTextField-ek). Legyen egy File menü Kilépés menüponttal. Legyen egy Szerkesztés menü Összes törlése, Név törlése, Szül.hely törlése, Név alapértelmezettre, Szül.hely alapértelmezettre menüpontokkal. Legyen mindkét szövegmezőhöz egy felbukkanó menü, az adott mező törléséhez és alapértelmezettre állításához. A törlő funkciók esetén oldja meg ActionCommand-okkal, az alapértelmezettre esetén oldja meg Action objektummal.
Gyakorlat Legyen egy Kinézet menü is, amelyben levő menüpontok egy JLabel kinézetét változtatják. Legyen Inverz checkbox menüpont, amely a színeket cseréli meg selected állapotban. Legyenek Csupa kis betűs, Csupa nagy betűs, Eredeti rádiógomb menüelemek.