Meniuri



Meniuri

Spre deosebire de celelate obiecte grafice, care deriv\ din clasa Component, meniurile deriv\ din clasa MenuComponent. Aceast\ excep]ie este f\cut\ deoarece multe platforme grafice limiteaz\ capabilit\]ile unui meniu.

In Java AWT meniurile sunt reprezentate ca un instan]e al clasei MenuBar. Toate meniurile sunt grupate intr-un singur obiect MenuBar, care este unic pentru o fereastr\ (Frame). Meniurile vizibile permanent nu pot fi ad\ugate decat la ferestre derivate din clasa Frame.

Pentru a putea con]ine un meniu, o component\ trebuie s\ implementeze interfa]a MenuContainer. Clasa Frame implementeaz\ aceast\ interfa]\.



Cel mai simplu element al unui meniu este un MenuItem, care este de fapt o op]iune care, odat\ selectat\, nu mai afi[eaz\ un submeniu.

A[adar un MenuBar con]ine obiecte de tip Menu, care la randul lor pot con]ine obiecte de tip MenuItem, CheckBoxMenuItem, dar [i alte obiecet de tip Menu. 22471mnf84kpq3d

Clasa MenuComponent

Este o clas\ abstract\, din care sunt extinse toate celelalte clase folosite pentru lucrul cu meniuri.

Metode:

getFont () Gets the font used for this MenuItem. np471m2284kppq

getParent() Returns the parent container.

setFont(Font) Sets the font to be used for this MenuItem to the specified font.

toString() Returns the String representation of this MenuComponent's values.

Clasa MenuBar

Permite crearea barelor de meniuri asociate unei ferestre cadru (Frame). Aceast\ clas\ adapteaz\ conceptul de bar\ de meniuri la platforma pe care lucra]i. Pentru a lega bara de meniuri la o anumit\ fereastr\ trebuie apelat\ metoda setMenuBar() din clasa Frame.

Constructor

MenuBar ()

Metode

add (Menu)

Adaug\ un meniu la o bar\ de meniuri

countMenus()

Returneaz\ num\rul de meniuri pe care le con]ine bara respectiv\

getHelpMenu()

Permite accesul la meniul help al unei bare de meniuri

getMenu(int)

Gets the specified menu.

remove(int)

{terge meniul localizat la indicele specificat

remove(MenuComponent)

{terge un anumit meniu din bara de meniuri.

setHelpMenu(Menu)

Sets the help menu to the specified menu on the menu bar.

Clasa Menu

Permite crearea unui meniu derulant intr-o bar\ de meniuri.

Constructor

Menu (String)

Constructs a new Menu with the specified label.

Menu(String, boolean)

Construie[te un meniu cu afi[are permanent\, avand eticheta specificat\.

Metode

add (MenuItem)

Adds the specified item to this menu.

add(String)

Adds an item with with the specified label to this menu.

addSeparator()

Adds a separator line, or a hypen, to the menu at the current position.

countItems()

Returns the number of elements in this menu.

getItem(int)

Returns the item located at the specified index of this menu.

isTearOff()

Returneaz\ true dac\ meniul este cu afi[are permanent\.

remove(int)

Deletes the item from this menu at the specified index.

remove(MenuComponent)

Deletes the specified item from this menu.

Clasa MenuItem

Ofer\ op]iunile individuale ale meniurilor derulante, cum sunt “Open”, “CLose”, “Exit”, etc. Este inrudit\ cu clasa CheckboxMenuItem, care permite comut\ri on/off pentru articolele de meniu.

Constructor

MenuItem (String nume)

Construie[te un meniu avand ca etichet\ [irul nume

Metode

disable()

Makes this menu item unselectable by the user.

enable()

Makes this menu item selectable by the user.

enable(boolean)

Conditionally enables a component.

getLabel()

Gets the label for this menu item.

isEnabled()

Checks whether the menu item is enabled.

setLabel(String)

Sets the label to be the specified label.

Clasa CheckboxMenuItem

Are aceea[i func]ionalitate cu cea a casetelor de validare, dar se utilizeaz\ in cazul meniurilor. Extinde clasa MenuItem, ad\ugand metodele getState [i setState.

Constructor

CheckboxMenuItem (String)

Creates the checkbox item with the specified label.

Metode

getState()

Returneaz\ starea articolului de meini (validat / invalidat)

setState(boolean)

Valideaz\ / Invalideaz\ articolul de meniu.

Exemplu - constuirea unui meniu

import java.awt.*;

import java.awt.event.*;

public class TestMenu1 {

public static void main(String args[]) {

Frame f = new Frame("Test Meniu");

MenuBar mb = new MenuBar();

Menu fisier = new Menu("File");

fisier.add(new MenuItem("Open"));

fisier.add(new MenuItem("Close"));

fisier.addSeparator();

fisier.add(new MenuItem("Exit"));

Menu optiuni = new Menu("Options");

optiuni.add(new MenuItem("Copy"));

optiuni.add(new MenuItem("Cut"));

optiuni.add(new MenuItem("Paste"));

Menu editare = new Menu("Edit");

editare.add(new MenuItem("Undo"));

editare.add(optiuni);

Menu stil = new Menu("Style");

stil.add(new CheckboxMenuItem("Bold"));

stil.add(new CheckboxMenuItem("Italic"));

mb.add(fisier);

mb.add(editare);

mb.add(stil);

f.setMenuBar(mb);

f.show();

}

}

Utilizarea meniurilor

La alegerea unei op]iuni dintr-un meniu se genereaz\ un eveniment. Acesta este de tip ActionEvent [i comanda este reprezentat\ de numele op]iunii alese. A[adar pentru a activa op]iunile unui meniu trebuie implementat un obiect receptor care s\ implementeze interfa]a ActionListener [i care in metoda actionPerformed s\ specifice codul ce trebuie executat la alegerea unei op]iuni.

Fiec\rui meniu in putem asocia un obiect receptor diferit, ceea ce u[ureaz\ munca in cazul in care ierarhia de meniuri este complex\. Pentru a realiza leg\tura intre obiectul meniu [i obiectul receptor trebuie s\ ad\ug\m receptorul in lista de ascult\tori a meniului respectiv prin commanda:

nume_meniu.addActionListener(nume_receptor)

A[adar tratarea op]iunilor dintr-un meniu este asem\n\toare cu tratarea butoanelor, ceea ce face posibil ca unui buton de pe suprafa]a de afi[are s\ ii corespund\ o op]iune intr-un meniu, ambele cu acela[i nume, tratarea evenimentului corespunz\tor ap\s\rii butonului, sau alegerii op]iunii f\candu-se o singur\ dat\.

Exemplu - utilizarea meniurilor

import java.awt.*;

import java.awt.event.*;

public class TestMenu2 {

public static void main(String args[]) {

MenuBar mb = new MenuBar();

/*

.......

Construirea meniului ca in exemplul anterior

..........

/*

Fereastra f = new Fereastra("Test Meniu");

Button btnExit = new Button("Exit");

f.setMenuBar(mb);

f.add(btnExit);

f.pack();

f.show();

fisier.addActionListener(f);

optiuni.addActionListener(f);

editare.addActionListener(f);

stil.addActionListener(f);

btnExit.addActionListener(f);

}

}

class Fereastra extends Frame implements WindowListener, ActionListener {

public Fereastra(String titlu) {

super(titlu);

this.addWindowListener(this);

}

//metodele interfetei WindowListener

public void windowOpened(WindowEvent e) {}

public void windowClosing(WindowEvent e) {System.exit(0);}

public void windowClosed(WindowEvent e) {}

public void windowDeiconified(WindowEvent e) {}

public void windowIconified(WindowEvent e) {}

public void windowActivated(WindowEvent e) {}

public void windowDeactivated(WindowEvent e) {}

//metoda interfetei ActionListener

public void actionPerformed(ActionEvent e) {

String command = e.getActionCommand();

if (command.equals("Exit"))

System.exit(0);

//valabila si pt. meniu si pt. buton

}

}

Un caz special il constituie op]iunile de tip CheckboxMenuItem. Obiectele de acest tip se g\sesc intr-o categorie comun\ cu List, Choice, CheckBox, implementeaz\ o interfa]\ comun\ ItemSelectable [i toate genereaz\ evenimente de tip ItemEvent.

Din aceast\ cauz\ ac]ionarea unei op]iuni de tip CheckboxMenuItem nu va determina generarea unui eveniment de tip ActionEvent de c\tre meniul din care face parte, ci va genera un eveniment ItemEvent chiar de c\tre op]iune. Pentru a intercepta un asemenea eveniment avem nevoie de un obiect receptor care s\ implementeze interfa]a ItemListener [i s\ specifice in metoda acesteia itemStateChanged codul ce trebuie executat la validarea/invalidarea op]iunii din meniu. De asemenea receptorul trebuie inregistrat cu addItemListener.

Exemplu :

Menu stil = new Menu("Style");

CheckboxMenuItem stil_bold = new CheckboxMenuItem("Bold"));

stil.add(stil_bold);

stil_bold.addItemListener(f);

//......

class Fereastra extends Frame

implements WindowListener, ActionListener, ItemListener {

//......

//metoda interfetei ItemListener

public void itemStateChanged(ItemEvent e) {

String option = (String) e.getItem();

boolean newState = (e.getStateChange()==ItemEvent.SELECTED);

if (option.equals("Bold") )

System.out.println(newState);

}

Tipul de opera]ie selectare / deselectare este codificat de campurile statice ItemEvent.SELECTED [i ItemEvent.DESELECTED

Meniuri de context (popup)

Au fost introduse incepand cu AWT 1.1 [i sunt implementate prin intermediul clasei PopupMenu.

Crearea:

pm = new PopupMenu(“Popup”);

Ad\ugarea de noi op]iuni :

pm.add(new MenuItem(“Cut”));

pm.add(new MenuItem(“Copy”));

pm.addSeparator();

Afi[area se face prin :

pm.show(Component c, int x, int y)

[i este de obicei rezultatul ap\s\rii unui buton al mouse-ului, pentru a avea acces rapid la meniu.

Meniurile de context nu se adaug\ la un alt meniu (bar\ sau sub-meniu) ci se ata[eaz\ la o component\ prin metoda add()

fereastra.add(pm);

Utilizarea este ins\ similar\ meniurilor orizontale

Acceleratori

Incepand cu Java AWT 1.1 este posibil\ specificarea unor combina]ii de taste (acceleratori - shortcuts) pentru accesarea direct\, prin intermediul tastaturii, a op]iunilor dintr-un meniu. Astfel, oric\rui obiect de tip MenuItem ii poate fi asociat un obiect de tip accelerator, definit prin intermediul clasei MenuShortcut. Singurele combina]ii de taste care pot juca rolul acceleratoriloe sunt :

  • <Ctrl> + <Tasta> sau

  • <Ctrl> + <Shift> + <Tasta>

Clasa MenuShortcut

Constructori

public MenuShortcut( int Tasta )

Construieste un accelerator de tipul <Ctrl>+<Tasta>

public MenuShortcut( int Tasta, boolean foloseste_shift )

Parametrul foloseste_shift permite construirea unui accelerator de tipul <Ctrl>+<Shift>+<Tasta> (daca are valoarea true)

Metode

int getKey( )

Returneaza codul tastei folosite la construirea acceleratorului 

Atribuirea unui accelerator la o op]iune a unui meniu poate fi realizat\ prin:

  • constructorul MenuItem in forma

MenuItem(String eticheta, MenuShortcut accelerator)

Ex: MenuItem m_optiune;

m_optiune = new MenuItem(“Open”, new MenuShortcut(VK_O))

  • metoda setShortcut(MenuShortcut accelerator) a clasei MenuItem

Ex: ctrl_o = new MenuShortcut(VK_O);

MenuItem m_optiune = new MenuItem(“Open”, ctrl_o)