Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Programarea in Java

java


Programarea in Java

Evenimente



Un eveniment este o actiune impusa de catre utilizator.

Exemple:

utilizatorul apasa o tasta sau face click pe mouse

utilizatorul apasa un buton, o bara Scroll (de derulare), o optiune dintr-un meniu

Asadar in loc sa ne imaginam un program ca un sir de intructiuni, putem sa ne imaginam sectiunile programului ca fiind activate de un eveniment (se mai spune ca programul 252f55c este 'condus de evenimente'). Un program 'condus de evenimente' (event-driven) trebuie sa rezolve problema evenimentelor ('event-handling'). Detectarea evenimentelor si rezolvarea task-ului cerut se numeste rezolvarea evenimentului. Programele care utilizeaza aceste stil de interfata cu utilizatorul se numesc 'conduse de evenimente'.

Bucla evenimentelor

Nu trebuie sa codificam bucla evenimentelor si nu trebuie sa facem recunoasterea evenimentelor la nivel jos. In Java, cream o sectiune de program (metode) pe care sistemul Java le apeleaza automat cand un eveniment are loc, in plus dandu-ne detalii despre eveniment. Apoi putem utiliza aceste detalii (apasare buton stanga mouse) pentru a ne asigura ca procesul cerut are loc.

In Java, evenimentele sunt clasificate. De exemplu, barele de derulare (scrollbars) sunt de obicei folosite pentru modificarea valorii sau vizualizarea unei alte parti a ecranului. Butoanele, in schimb, prin apasarea lor, sunt folosite pentru initierea sau terminarea unui task, o actiune definita. In Java, aceste clase sunt numite actionListener si adjustmentListener.


In Java, trebuie sa codificam o metoda pentru fiecare clasa de evenimente care ne intereseaza (o metoda pentru evenimente scrollbar, o metoda pentru evenimente button-click, etc). In plus, trebuie sa inregistram un ascultator (listener) catre componenta (e.g. scrollbar) ce produce evenimentul, in asa fel incat metoda noastra sa fie automat apelata cand evenimentul are loc.

Exemplu:

Vom scrie un program Java (condus de eveniment) care citeste un numar dintr-o bara de defilare si afiseaza valoarea sa intreaga pe ecran.

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

public class Exemplu3_1 extends Applet implements AdjustmentListener

public void paint(Graphics g)

public void adjustmentValueChanged(AdjustmentEvent e)

}

implements AdjustmentListener - implementeaza un ascultator pentru evenimente specifice barelor de defilare.

Inregistram programul nostru ca un ascultator folosind metoda addAdjustmentListener, care cauzeaza apelarea metodei adjustmentValueChanged cand bara de defilare este folosita.

Metoda adjustmentValueChanged copiaza noua valoare din bara de defilare in variabila SliderValue, apoi redeseneaza ecranul.

In mod formal programul precedent se poate rescrie:

declara o variabila sliderValue care are valoarea 0 initial.

initial: metoda init() - seteaza bara de defilare a.i. sa poata lucra cu numere de la 0 la 99

- inregistreaza bara de defilare cu un ascultator

afisare: paint() - afiseaza valoarea curenta a lui sliderValue ca un numar

repetitia: adjustmentValueChanged (AdjustmentEvent e)

- obtine valoarea curenta din bara de defilare si actualizeaza valoarea lui sliderValue

- apeleaza metoda de afisare, prin apelarea lui repaint()

Acest program permite doar manipularea barei de defilare. De fiecare data cand miscam bara de defilare, metoda adjustmentValueChanged primeste noua valoare si o depoziteaza in variabila sliderValue.

Am ales in acest program:

- numele barei de defilare (slider)

- numele variabilei care tine valoarea barei de defilare (sliderValue)

- domeniul numerelor ce pot fi afisate de bara de defilare ()

Cuvinte predefinite (metode, instructiuni):

import java.awt.event;

implements adjustmentListener;

metoda init;

folosirea lui addAdjustmentListener;

metoda adjustmentValueChanged;

metoda paint;

folosirea lui repaint;

Metoda init() va fi apelata de catre sistem cand se executa applet-ul. Se foloseste pentru crearea ecranului initial. Metoda paint(Graphics g) este folosita pentru afisarea de elemente grafice. Metoda adjustmentValueChanged (AdjustmentEvent e) este folosita pentru procesarea evenimentelor pentru bara de defilare. Cand un astfel de eveniment apare, aceasta metoda este automat apelata.

Mai exista metode de procesare a evenimentelor suplimentare (o sa le prezentam ulterior):

actionPerformed - raspunde la butoane si campuri de text

itemStateChanged - raspunde la verificarea cutiilor ('boxes')

Domenii de vizibilitate

Pana acum, in exemplele noastre am folosit deci variabile care sunt locale unei singure metode, si am folosit parametrii pentru a trimite valori de la o metoda la alta. Cu toate acestea, in programele event-driven (si in programarea orientata obiect in general), se obisnuieste folosirea de variabile care pot fi accesat de orice metoda a clasei. In acest sens, vom declara variabilele in afara metodelor clasei, deci ele vor avea domeniu de vizibilitate in toata clasa. Variabilele pot fi folosite de orice metoda a clasei si sunt cunoscute ca fiind variabile instanta. Le declaram private pentru a preveni folosirea de metode ale altor clase.

Exemplu:

class Demo extends Applet

private void metodaDoi()

}

Abstract Windows Toolkit (setul de ferestre abstracte)

Un alt exemplu in care se foloseste o bara de defilare pentru modificarea valorii unui intreg este Exemplu3_2. De data aceasta, bara de defilare este verticala si este adaugat un dreptunghi care se umple sau se micsoreaza dupa

cum evolueaza variabila sliderValue.

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

public class Exemplu3_2 extends Applet implements AdjustmentListener

public void paint(Graphics g)

public void adjustmentValueChanged(AdjustmentEvent e)

}

Definim o metoda paint, o metoda init si o metoda adjustmentValueChanged. Aceste functii nu le apelam noi ci:

paint, init - apelate de applet viewer

adjustmentValueChanged - sistemul de procesare a evenimentelor Java

Variabila slider este o variabila private (deci are acces la toate functiile membre ale acestei clase) de tip Scrollbar.

Instructiunea (apelul)

slider.addAdjustmentListener(this);

semnifica faptul ca programul nostru (de fapt obiectul curent, referit in Java de this) necesita (implica) apelarea metodei adjustmentValueChanged cand se lucreaza cu variabila slider.

Initializarea noului obiect slider necesita precizarea a cinci parametri:

slider = new Scrollbar(Scrollbar, VERTICAL, 0, 1, 0, 100);

- orientarea: orizontala sau verticala (se folosesc doar majuscule)

- valoarea initiala a contorului (am ales 0 deoarece domeniule este ). Putem 'clica' (apasa) in aria dintre sageti si slider pentru a produce schimbari. De exemplu daca punem 3 si 'clicam' repede pe una din sageti de 2 ori atunci nu conteaza decat un eveniment.

- valorile minime se maxime pentru pozitiile din capat. Noi am ales 0 si 100. De altfel dreptunghiul care indica miscarea slider-ului este un dreptunghi de lungime 100.

Functia showstatus afiseaza un text pe ultima linie de jos a ferestrei. Este similiara cu functia drawString, dar nu avem nevoie de perechea de coordonate ecran.

Programul Java apeleaza init si apoi paint (mai precis appletviewer. Apoi nimic !). Acesta este un program condus -de- evenimente, care asteapta folosirea barei de defilare. Evenimentele sunt procesate de metoda:

public void adjustmentValueChanged( AdjustmentEvent e)

Detaliile despre eveniment sunt disponibile in variabila e, a clasei AdjustementEvent.

In programul nostru exista doar un eveniment (miscare barei de defilare), de aceea vom folosi metoda getValue() pentru a schimba pozitia si a memora aceasta in sliderValue. Apoi invocam repaint(), care de fapt reprezinta apelul lui paint. Aceasta cauzeaza redesenarea ferestrei cu un nou continut.

Adaugarea etichetelor

In continuare, vom vedea cum putem scrie un text langa o bara de defilare (bineinteles fara a preciza coordonatele). Vom folosi functia add pentru a plasa o noua componenta pe ecran. Gestionarul de machete implicit (flowlayout) pozitioneaza componentele centrat, de la stanga la dreapta. Vom introduce componenta Label care contine text si care se adauga la schema (layout) la fel ca barele de defilare.

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

public class Exemplu3_3 extends Applet implements AdjustmentListener

public void paint(Graphics g)

public void adjustmentValueChanged(AdjustmentEvent e)

}

Observatii

O eticheta nu este activa - 'clicarea' nu produce evenimente si nu trebuie sa ne referim la o eticheta mai tarziu. De aceea, domeniul unei etichete poate fi local in init.

Scalarea barei de defilare

Vom considera un exemplu de convertire a inch-lor (din domeniul ), la centimetri unde 1 inch = 2.54 cm.

Putem seta bara de defilare la domeniul 0..10 dar pentru mai multa precizie vom crea bara de defilare in domeniul si vom scala acesti intregi catre reali rezultand pasi de 0.1 inch.

Exemplu:

// exemplu de bara de defilare - convertire din

// inch in centimetri

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

public class Exemplu3_4 extends Applet implements AdjustmentListener

public void paint(Graphics g)

public void adjustmentValueChanged(AdjustmentEvent e)

}

Recomandari generale (pentru programe cu bara de defilare)

declarati toate variabilele private

asigurativa ca applet-ul are:

import java.awt.event;

si

implements AdjustmentListener

inregistrati cate un ascultator pentru fiecare bara cu: nume_bara_de_defilare.addAdjustmentListener(this);

creati o metoda adjustmentValueChanged pentru manipularea barelor de defilare

Grafica

Biblioteca AWT (Abstract Window Toolkit) contine o multime de clase si metode pentru interfetele grafice utilizator si ferestre. Vom prezenta in continuare, cutii de verificare (check boxes), grupuri de cutii de verificare sau butonate radio (group of check boxes), cutii de alegere, liste, arii text, panze sau tablouri (canvases), panouri (panels), manageri de proiecte (layout managers).

Abordarea generala consta in declararea componentelor, initializarea si adaugarea lor la ecranul proiectului. In plus, programul implementeaza o clasa de eveniment (implements), trebuie sa inregistreze componentele si trebuie sa le puna la dispozitie o metoda adecvata pentru ascultarea fiecarui eveniment.

Exemplu:

Evenimentele de tip click pe un buton sau <cr> intr-un camp text folosesc ActionListener. Deci, pentru rezolvarea lor, trebuie sa determinam sursa evenimentului.

Cutii de verificare

-utilizatorul poate specifica una sau mai multe optiuni intr-o cutie.

interfata ce trebuie implementata: ItemListener

declararea cutiei de verificare: private Checkbox cutie1;

creare unei cutii de verficare: cutie1 = new Checkbox('Eticheta1');

adaugarea la proiectul ecran: add(cutie1);

inregistrarea evenimentului la ascultator: cutie1.addItemListener(this);

rezolvarea evenimentului asociat unei cutii de verificare: suprascrierea metodei itemStateChanged.

public void itemStateChanged(ItemEvent e)

}

metoda getState() intoarce true daca cutia de verificare a fost selectata

Grupuri de cutii de verificare

Comparativ cu mai multe cutii de verificare, un grup de cutii de verificare are proprietatea ca exact o cutie de verficare este selectata. Cand se selecteaza alta cutie, atunci cea veche se deselecteaza automat. Singurele lucruri care difera fata de cutiile de verificare sunt definirea (crearea) si rezolvarea evenimentelor:

grupCutii = new CheckboxGroup();

Cutie1 = new Checkbox('Eticheta_1',grupCutii,false);

Cutie2 = new Checkbox('Eticheta_2',grupCutii,true);

public void itemStateChanged(ItemEvent e)

Observatii: Doar o cutie de verificare din grupul de cutii este aprinsa, restul sunt stinse.

Codul complet al unui grup de cutii de verificare este mai jos:

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class ButonRadio extends Applet implements ItemListener

public void itemStateChanged(ItemEvent e)

Cutii de alegere

O cutie de alegere este o lista de optiuni precum un meniu. Un element poate fi ales din lista realizand un click pe el. Elementul selectat apare ca parte vizibila a listei.

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class ChoiceBoxes extends Applet implements ItemListener

public void itemStateChanged(ItemEvent e)

}

Liste

O lista (grafica) este o lista de siruri text, din care unul sau mai multe elemente pot fi selectate.

Crearea unei liste se faec folosind constructorul List:

Exemplu: List lista = new List(3, false); //specifica faptul ca doar trei elemente din lista sunt vizibile o data. Al doilea parametru, false, semnifica faptul ca doar un element poate fi selectat din lista.

Deoarece este o actiune, rezolvarea evenimentului se face astfel:

public void actionPerformed(ActionEvent e)

}

Daca dorim ca mai multe elemente sa fie simultan selectate, atunci al doilea parametru al constructorului trebuie sa fie true:

List lista = new List(4, true);

Atunci in metoda de rezolvare a evenimentului, trebuie sa obtinem sirul de elemente selectate:

String [] selectie = lista.getSelectedItems();

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class Liste extends Applet implements ActionListener

public void actionPerformed(ActionEvent e)

}

Zone de text

Citirea textelor in AWT se face folosind campuri text si zone pentru text. Crearea unei zone pentru text se face apeland un constructor TextArea.

Exemplu:

TextArea t = new TextArea(10, 40); //cei doi parametri semnifica numarul de linii (10), apoi de coloane(40).

Avand un buton pentru rezolvarea evenimentului, citirea textului se poate face cu functia getText().

Exemplu:

public void actionPerformed(ActionEvent e)

Putem considera un buton pentru evenimentul selectare text din aria text.

Prelucrarea zonei selectate a textului se face folosind:

getSelectionStart() - intoarce indexul de start a selectiei

getSelectionEnd() - intoarce indexul de inceput a selectiei

getSelectedText() - intoarce textul selectat

Observatie: 'n' este considerat un singur caracter.

Inserarea unui text intr-o arie text se face cu insertText(sir, index) care insereaza in obiectul de tip arie text, sirul sir, plecand de la indexul precizat.

Exemplu:

String sir = 'Inseram un sir';

int index=5;

text.insertText(sir, index);

Inlocuirea unui text intr-o arie text se face cu replaceRange(sir, start, final) sau replaceText(sir, start, final). Se inlocuieste in obiectul de tip arie text sirul cuprins intre start si final cu textul sir.

Exemple:

text.replaceRange('Text de inlocuit', 5 ,10); -textul existent intre indecsii 5-10 este inlocuit cu sirul 'Text de inlocuit'

text.replaceRange('', 5, 10) -textul cuprins intre indecsii 5-10 este sters

Observatie: replaceText-este o forma invechita (de la o versiune precedenta Java) - deprecated

Adaugarea unei bucati de text se face cu append(sir) sau appendText(sir). Acesta din urma este forma invechita.

Exemplu:

Un exemplu de cod Java care foloseste metodele precedente:

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class Editor extends Applet implements ActionListener

public void actionPerformed(ActionEvent e)

if (e.getSource() == afisareText)

}

Panze (suprafete de desenare)

Pana acum am vazut aplicatii in care desenul si butoanle erau in aceeasi fereastra. Problema este ca butoanele ar putea acoperi desenul. Panzele (canvasses) rezolva aceasta problema definind o arie separata unde se plaseaza desenul. Un canvas este creat ca un obiect al unei clase mostenita din clasa Canvas (predefinita). Programatorul poate suprascrie functia paint().

Exemplu:

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class ExempluCanvas extends Applet

class CanvasulMeu extends Canvas

Panouri (panels)

Panourile sunt folosite pentru gruparea unui numar de componente, spre deosebire de canvas-uri care sunt folosite pentru afisarea textului sau graficii intr-o arie dreptunghiulara. Daca dorim un grup de butoane plasate in partea de sus a ferestrei si alt grup in partea de jos a ferestrei, atunci putem crea doua panouri pentru fiecare din aceste 2 grupuri.

Crearea unui panou se face apeland constructorul Panel();

Exemplu:

Panel p = new Panel();

Adaugam componentele la panou:

Button b1 = new Button('Apasa 1');

Button b2 = new Button('Apasa 2');

p.add(b1);

p.add(b2);

In final, se adauga panoul la fereastra applet-ului:

add(p);

Manageri de proiecte (Layout Managers)

Proiectul implicit pentru applet-uri se numeste flow-layout (proiect de flux). Acesta plaseaza componentele unul dupa altul pe linii.

Pentru aplicatii, proiectul implicit se numeste border-layout (proiect bordat) si plaseaza componentele in jurul marginilor ferestrei.

Pentru folosirea lui border-layout apelam:

setLayout(new BorderLayout());

Creem butoanele:

Button nord = new Button('Nord');

Button sud = new Button('Sud);

Specificam aria in care vor fi butoanele ('North', 'South', 'West', 'East', 'Center' sunt literali rezervati):

add('North', nord);

add('South', sud);

Putem crea acum un panel, in care putem sa plasam butoanele:

Panel top = new Panel();

top.add(nord);

add('North',top);

Exemplu:

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class Paneluri extends Applet implements ActionListener

public void actionPerformed(ActionEvent ev)

if (ev.getSource() == sud)

if (ev.getSource() == vest)

if (ev.getSource() == est)

if (ev.getSource() == centru)

System.out.println(sir);

repaint();

}

public void paint(Graphics g)

Plasarea componentelor fara utilizarea unui manager de proiecte

Pentru a plasa componentele fara un proiect implicit (flow-layout), border-layout si altele), setam proiectul pe null:

setLayout(null);

Pentru dimensionarea si plasarea componentelor din container, putem utiliza metoda:

void setBounds(int x, int y, int latime, int inaltime);

unde x,y reprezinta coordonatele pozitiei componentei in container, iar parametrii latime, inaltime reprezinta dimensiunile componentei.

Acelasi lucru se putea face si cu metodele: setLocation si setSize:

void setLocation(int x, int y);

void setSize(int latime, int inaltime);

unde parametrii au aceeasi semnificatie.

import java.applet.Applet;

import java.awt.*;

import java.awt.event.*;

public class NouLayout extends Applet implements ActionListener

public void actionPerformed(ActionEvent ev)

if (ev.getSource() == b2)

if (ev.getSource() == b3)

System.out.println(sir);

repaint();

}

public void paint(Graphics g)

Afisarea de imagini grafice si sunete

Programele Java pot avea ca iesire grafica si sunete. Informatiile de grafica si sunete sunt memorate in fisiere. Cele mai cunoscute formate de fisiere grafice sun GIF(Graphics Interchange Format) si JPEG (Joint Photografic Experts Group). Fisierele GIF au extensia .gif si folosesc pentru reprezentarea unui pixel 8 biti. Fisierele JPEG au extensia .jpg si folosesc pentru reprezentarea unui pixel 24 biti. JPEG este mai bun si ca rezolutie ca GIF, ca si ca compresie superioara a informatiei grafice.

Recomandare: Folositi fisiere GIF cand aveti de reprezentat imagini in mai putin de 256 de culori.

Afisarea graficii

Presupunem ca dorim sa vizualizam o imagine grafica continuta in fiserul 'pictura.gif'. Exista doua etape:

1. declararea imaginii se alocarea de spatiu de memorie pentru ea:

Exemplu:

private Image image;

image = getImage(getDocumentBase(),'pictura.gif');

2. incarcarea imaginii din fisier in memoria calculatorului si afisarea lui pe ecran:

Exemplu:

boolean b = g.drawImage(image, 20, 20, 100, 100, this);

In continuare explicam functiile noi aparute. Exista mai multe metode de a preciza unde este fisierul grafic:

1. plasam fisierul grafic in acelasi director cu fisierul HTML (pagina Web) care apeleaza applet-ul. Apelul metodei getDocumentBase returneaza adresa URL a acestei pagini Web. Aceasta adresa este primul parametru al metodei getImage, care foloseste numele directorului pentru gasirea fisierului grafic specificat.

2. Specificam intreaga adresa Internet (URL) ca parametru functiei drawImage;

image = getImage('https://www.adresa.ro/picture.gif');

3. Plasam fisierul grafic in acelasi director cu programul Java:

image = getImage(getCodeBase(),'picture.gif');

Functia drawImage returneaza true daca toti bitii imaginii sunt disponibili. Al doilea si al treilea paramentru reprezinta coordonatele stanga-sus ale dreptunghiului unde se va afisa imaginea. Urmatorii 2 parametri reprezinta latimea si inaltimea dreptunghiului specificat. Ultimul paramentru specifica un obiect asociat in timpul incarcatii imaginii. De obicei acesta este obiectul curent, adica this.

Exemplu:

Codul complet este mai jos:

import java.applet.Applet;

import java.awt.*;

public class Picture extends Applet

public void paint(Graphics g)

Sunete

Ca si imaginile grafice, sunetele sunt memorate in fisiere. Tipul de fisier cel mai utilizat este fisierul audio, cu extensia .au. Mai intai declaram un obiect AudioClip:

AudioClip sunet;

Crearea unui obiect AudioClip implica precizarea metodei de incarcare a fisierului, precum si numele acestuia (pp. 'sound.au').

Exemplu:

AudioClip sunet = getAudioClip(getDocumentBase(),'sound.au');

Exista trei metode importante ale clasei AudioClip: play(), loop() si stop().

sunet.play() - 'canta' sunetul;

sunet.loop() - se repeta sunetul de la inceput;

sunet.stop() - se opreste din cantat;

Metodele play() si loop() doar initializeaza cantatul, dupa aceea revin. Programul Java poate sa se ocupe de altceva in timp ca sunetul este ascultat.

Exemplu:

Un exemplu de cod complet Java ce foloseste metodele discutate este:

import java.applet.*;

import java.awt.*;

import java.awt.event.*;

public class Audio extends Applet

implements ActionListener

public void actionPerformed(ActionEvent event)

Obtinerea parametrilor de intrare ai applet-ului

Java pune la dispozitie si citirea parametrilor pentru un applet din fisierul HTML asociat. In acest fisier, intre <APPLET> si </APPLET> se pot scrie linii de forma:

<PARAM name=numeSir value=valoareSir>

Exemplu:

<APPLET class=Something.class

PARAM name='arg1' value='test'

PARAM name='arg2' value=100>

</APPLET>

Acesti parametri se pot obtine in applet prin apelarea metodei getParameter care are un argument String si intoarce String. Argumentul este sirul dupa care este identificat parametrul (sirul de dupa name), iar valoarea intoarsa este value.

Exemplu:

String s = getParameter('arg1');

Daca in fisierul HTML respectiv nu gasim nici un parametru cu numele respectiv ('arg1'), atunci getParameter intoarce null.

Exemplu:

if ( s == null )

s='Valoare implicita';

sau

if ((s=getParameter('arg1'))==null)

s='Valoare implicita';

In continuare prezentam un cod Java care foloseste functiile de mai sus:

//fisierul html

<title>Un exemplu de obtinere parametri</title>

<applet code='GetParam.class' width=440 height=380>

<PARAM name='arg1' value='test1'>

<param name='arg2' value=100>

</applet>

//fisierul java

import java.applet.*;

import java.awt.*;

public class GetParam extends Applet

public void paint(Graphics g)

Meniurile

Meniurile pot fi deschise in aplicatii Java de sine statatoate, dar nu si in applet-uri. Meniurile se 'agata' de marginea de sus a ferestrei. Dar un applet este o regiune dintr-o pagina Web, nu are margini. Iata pasii creearii unui meniu:

crearea unei noi bare de meniu (instantierea clasei MenuBar);

MenuBar meniuBara = new MenuBar();

crearea unui nou meniu, cu un titlu (instantierea clasei Menu):

Menu Meniu1 = new Menu('Meniu1');

3. crearea unui nou element de meniu (instantierea clasei MenuItem);

element1Meniu1 = new MenuItem('Element1');

Observatie: elementMeniu1 este variabila declarata in afara oricarei functii deoarece ea trebuie sa fie inregistrata (sa actioneze) ca eveniment (private MenuItem element1Meniu1);

4. adauga elementul de meniu la meniu. In cazul nostru, avem:

meniu1.add(element1Meniu1);

5. Inregistrarea acestui obiect ca un ascultator al evenimentelor elementelor meniului.

element1Meniu1.addActionListener(this);

6. adauga meniul Meniu1 la meniul barei (menuBara):

meniuBara.add(Meniu1);

7. se repeta pasii 2-6 pentru oricate submeniuri dorim.

8. Apelam setMenuBar (ca o certitudine ca s-a terminat de creat meniul):

setMenuBar(meniuBara);

Daca se doreste linie separatoare intre doua elemente ale unui meniu, apelam:

meniu1.addSeparator();

Rezolvarea evenimentelor pentru meniuri se face cu actionPerformed (ca la butoane), folosind getSource() pentru a vedea ce meniu a fost selectat. Codul complet al programului Java asociat este:

import java.awt.*;

import java.awt.event.*;

public class MenuWindow extends Frame

implements ActionListener,

ItemListener else

}

});

newline = System.getProperty('line.separator');

//Add regular components to the window.

setLayout(new BorderLayout()); //max space: output

output = new TextArea(5, 30);

output.setEditable(false);

add('Center', output);

Label label = new Label('Try bringing up'

+ ' a popup menu!');

add('North', label);

//Build the menu bar.

mb = new MenuBar();

setMenuBar(mb);

//Build first menu in the menu bar.

//Specifying the second argument as true

//makes this a tear-off menu.

m1 = new Menu('Menu 1', true);

mb.add(m1);

mi1_1 = new MenuItem('Menu item 1_1');

m1.add(mi1_1);

mi1_2 = new MenuItem('Menu item 1_2');

m1.add(mi1_2);

//Build help menu.

m5 = new Menu('Help Menu');

mb.setHelpMenu(m5);

mi5_1 = new MenuItem('Menu item 5_1');

mi5_1.setShortcut(new MenuShortcut(KeyEvent.VK_5));

m5.add(mi5_1);

mi5_2 = new MenuItem('Menu item 5_2');

m5.add(mi5_2);

//Make a popup menu.

popup = new PopupMenu('A Popup Menu');

add(popup);

pmi1 = new MenuItem('A popup menu item');

popup.add(pmi1);

mi5_1_duplicate =

new MenuItem('Duplicate of menu item 5_1',

new MenuShortcut(KeyEvent.VK_5));

popup.add(mi5_1_duplicate);

pmi2 = new MenuItem('An item with a shortcut',

new MenuShortcut(KeyEvent.VK_6));

popup.add(pmi2);

//Build second menu in the menu bar.

m2 = new Menu('Menu 2');

mb.add(m2);

mi2_1 = new CheckboxMenuItem('Menu item 2_1');

m2.add(mi2_1);

//Build third menu in the menu bar.

m3 = new Menu('Menu 3');

mb.add(m3);

mi3_1 = new MenuItem('Menu item 3_1');

m3.add(mi3_1);

mi3_2 = new MenuItem('Menu item 3_2');

m3.add(mi3_2);

m3.addSeparator();

mi3_3 = new MenuItem('Menu item 3_3');

m3.add(mi3_3);

mi3_4 = new MenuItem('Menu item 3_4');

mi3_4.setEnabled(false);

m3.add(mi3_4);

//Build fourth menu in the menu bar.

m4 = new Menu('Menu 4');

mb.add(m4);

m4_1 = new Menu('Submenu 4_1');

m4.add(m4_1);

mi4_1_1 = new MenuItem('Menu item 4_1_1');

m4_1.add(mi4_1_1);

//Register as an ActionListener for all menu items.

m1.addActionListener(this);

m2.addActionListener(this);

m3.addActionListener(this);

m4.addActionListener(this);

mi4_1_1.addActionListener(this); //m4 can't detect

//submenu actions

m5.addActionListener(this);

popup.addActionListener(this);

//Set action commands for a few menu items.

mi1_1.setActionCommand('1_1');

mi1_2.setActionCommand('1_2');

mi5_1.setActionCommand('5_1');

mi5_2.setActionCommand('5_2');

pmi1.setActionCommand('popup item #1');

mi5_1_duplicate.setActionCommand('5_1');

pmi2.setActionCommand('popup item #2');

//Register as ItemListener on checkbox menu item.

mi2_1.addItemListener(this);

//Listen for when the popup menu should be shown.

MouseListener listener = new PopupListener();

addMouseListener(listener);

output.addMouseListener(listener);

label.addMouseListener(listener);

}

class PopupListener extends MouseAdapter

public void mouseReleased(MouseEvent e)

private void maybeShowPopup(MouseEvent e)

}

}

public void actionPerformed(ActionEvent e)

public void itemStateChanged(ItemEvent e)

public static void main(String[] args)

Exercitii propuse spre implementare

1. Folosind TextArea si un buton, scrieti un program Java care calculeaza numarul de caractere si de linii din text.

2. Scrieti un program Java care creeaza o arie text si butoane pentru operatiile de stergere si copiere.

3. Scrieti un program Java care are 2 butoane si un TextField pentru citirea unui fisier grafic sau audio. Butoanele sunt corespunzatoare apelurilor getImage si getAudioClip. Programul trebuie deci sa citeasca numele unui fisier si sa-l afiseze (sa-l interpreteze).


Document Info


Accesari: 879
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )