Bevezetés
Menüket sokféle panelre rakhatunk, leggyakrabban azonban java.awt.Frame , javax.swing.JFrame ,
javax.swing.JInternalFrame és javax.swing.JApplet objektumok esetében szoktuk alkalmazni. Általában akkor érdemes
menüket használni, ha sok gombot, vagy más kezelőelemet kellene elhelyezni az ablak felületén. A menük kapcsán meg kell
említeni, hogy a menükhöz háromféle osztály használata szükséges:
- Menubar (
java.awt.MenuBar , javax.swing.JMenuBar ):
Ez egy speciális konténer osztály, amely általában része a frame- vagy JApplet jellegű osztályoknak. Ide kerülnek
a menük.
- Menu (
java.awt.Menu , javax.swing.JMenu ):
Ez tulajdonképpen maga a menü, amelyből almenük nyílhatnak és menüelemeket is tartalmazhat.
- MenuItem (
java.awt.MenuItem , javax.swing.JMenuItem , javax.swing.JCheckBoxMenuItem , javax.swing.JRadioButtonMenuItem ):
Ez a menüelem, lehet egyszerű menüelem, de a javax.swing csomag már jelölőnégyzetet,
rádiógombot is tartalmaz, amelyet menükbe helyezhetünk el, és ezáltal nem kell külön panelt készíteni néhány darab kezelőelem miatt.
Az alábbi példában a menük segítségével egy cimke feliratát és színét változtathatjuk.
Menü létrehozása
Fontos, hogy minden egyes menüt és menüelemet hozzunk létre külön változónévvel, mert később
szükség lesz rá. Hozzuk létre az objektumokat, majd készítsük el a menü struktúráját. A menüket
adjuk hozzá egy Menubar objektumhoz. Végül állítsuk be a frame (vagy applet) Menubar-ját a
setMenuBar(MenuBar) vagy pedig a setJMenuBar(JMenuBar) függvényével. Tulajdonképpen
mindegy milyen sorrendben hozzuk létre az objektumokat, arra kell figyelni, hogy milyen a menü szerkezete.
A Menubar objektumot akkor is hozzá lehet adni, mikor létrejöt, de bosszúságot okozhat, ha a végén lefelejtjük.
private JMenu menu;
private JMenu colorMenu;
private JMenuItem redItem;
private JMenuItem greenItem;
private JMenuItem blueItem;
private JMenu submenu;
private JRadioButtonMenuItem radioItem1;
private JRadioButtonMenuItem radioItem2;
private JCheckBoxMenuItem checkboxItem1;
private JCheckBoxMenuItem checkboxItem2;
private ButtonGroup buttonGroup;
private JMenuBar menubar;
...
menu = new JMenu("Menu");
colorMenu = new JMenu("Color");
submenu = new JMenu("Submenu");
redItem = new JMenuItem("Red");
greenItem = new JMenuItem("Green");
blueItem = new JMenuItem("Blue");
radioItem1 = new JRadioButtonMenuItem("Radio1");
radioItem2 = new JRadioButtonMenuItem("Radio2");
checkboxItem1 = new JCheckBoxMenuItem("Checkbox1");
checkboxItem2 = new JCheckBoxMenuItem("Checkbox2");
buttonGroup = new ButtonGroup();
menubar = new JMenuBar();
this.setJMenuBar(menubar);
menubar.add(menu);
menubar.add(colorMenu);
menu.add(submenu);
submenu.add(radioItem1);
submenu.add(radioItem2);
// radio buttons in one group, checkboxes
buttonGroup.add(radioItem1);
buttonGroup.add(radioItem2);
submenu.add(checkboxItem1);
submenu.add(checkboxItem2);
colorMenu.add( redItem );
colorMenu.add( greenItem );
colorMenu.add( blueItem );
Az összetartozó rádiógombokat csoportba kell foglalni, hiszen a nem Igen/Nem választ akarunk beállítani, hanem
több lehetőség közül szeretnénk választani.
Eseménykezelés
Következő lépésként az egyes menüelemekhez hozzá kell adni az eseményfigyelőket. Ez hagyományos
menü és rádiógombok esetén az java.awt.event.ActionListener , jelölőnégyzetek esetén pedig a
java.awt.ItemListener lesz.
radioItem1.addActionListener(this);
radioItem2.addActionListener(this);
checkboxItem1.addItemListener(this);
checkboxItem2.addItemListener(this);
redItem.addActionListener( this );
greenItem.addActionListener( this );
blueItem.addActionListener( this );
Mint korábbi a korábbi példaprogramok esetén, most is a főosztályban
kezeljük le az eseményeket. Az osztályban ezért implementálni kell az java.awt.event.ActionListener és a
java.awt.ItemListener metódusait. Az void actionPerformed(ActionEvent) függvényben csak azokat az
eseményeket kell lekezelni, amelyeket a menüelemekhez és a rádiógombokhoz kötünk, a void itemStateChanged(ItemEvent)
függvény csak jelölőnégyzetek eseményeiért lesz felelős.
A rádiógombokkal és a jelölőnégyzetekkel a feliratot a Color menü elemeivel pedig a felirat színét változtatjuk.
public void actionPerformed(ActionEvent e) {
if(e.getSource().equals(radioItem1)) {
label.setText("Radio1 is selected");
}
if(e.getSource().equals(radioItem2)) {
label.setText("Radio2 is selected");
}
if(e.getSource().equals(redItem)) {
label.setForeground( Color.RED );
}
if(e.getSource().equals(greenItem)) {
label.setForeground( Color.GREEN );
}
if(e.getSource().equals(blueItem)) {
label.setForeground( Color.BLUE );
}
}
public void itemStateChanged(ItemEvent e) {
if(e.getSource().equals(checkboxItem1)) {
label.setText("Checkbox1 is selected");
}
if(e.getSource().equals(checkboxItem2)) {
label.setText("Checkbox2 is selected");
}
}
Ezzel el is készült ez a kis példaprogram.
|