Cursuri Java
Cursuri Java
-pachete Java folosite pentru crearea unei interfete grafice utilizator: AWT, Swing -folosirea mediului de dezvoltare IDE NetBeans pentru proiectarea interfetei utilizator: instrumente NetBeans, crearea ferestrei aplicatiei; moduri de pozitionare a componentelor grafice in fereastra aplicatiei; componente grafice AWT si Swing; - tratarea evenimentelor: tipuri de evenimente; clase Java specifice tipurilor de evenimente; tipuri de interceptori de evenimente (listener); inregistrarea unui obiect a clasei interceptoare ca administrator al unui eveniment; folosirea claselor abstracte <tip_eveniment>Adapter si a claselor anonime pentru tratarea evenimentelor; utilizarea IDE - NetBeans pentru tratarea evenimentelor.
16/11/2013
- AWT (Abstract Windowing Toolkit) - este API-ul initial pus la dispozitie incepand cu primele versiuni de Java; toate componentele AWT fac parte din pachetul [Link];
- Swing este parte a proiectului JFC (Java Foundation Classes) (creat in urma colaborarii dintre Sun Netscape si IBM); Swing foloseste aceeasi infrastructura de clase ca si AWT extinzand functionalitatea acestuia; pachetul swing a fost integrat incepand cu versiunea 2 a Java; toate componentele Swing fac parte din pachetul [Link].
16/11/2013 2
Nota: Este de preferat ca interfetele-utilizator Java sa fie create folosind tehnologia Swing, deoarece include mai multe facilitati; insa nu se poate renunta complet la tehnologia AWT deoarece aici exista clase esentiale, folosite si in tehnologia Swing.
Realizarea design-ului interfetei utilizator. Folosirea mediului de dezvoltare IDE NetBeans pentru proiectarea interfetei utilizator
IDE-NetBeans este un mediu de dezvoltare pentru aplicatii informatice Java. IDE-NetBeans este format dintr-o suita de instrumente care sprijina programatorul in realizarea unei aplicatii informatice Java. Instrumentele principale ale mediului de dezvoltare NetBeans, folosite pentru proiectarea interfetei utilizator sunt urmatoarele: - Proiectorul interfetei grafice (fereastra Design) reprezinta zona principala de lucru, in care se proiecteaza ferestrele de interfata-utilizator si obiectele grafice (componente AWT si Swing, meniuri) care sunt plasate in aceste ferestre. - Fereastra de instrumente grafice (fereastra Palette) contine reprezantari grafice ale componentelor AWT si Swing. - Fereastra de proprietati (fereastra Properties) contine trei categorii de informatii despre o componenta grafica, selectata la un moment dat, categorii evidentiate prin trei etichete pozitionate in antetul ferestrei: a) eticheta Properties descrie caracteristici referitoare la aspectul componentei (culoare, dimensiune, texte afisate pe componenta respectiva, culoare etc); b) eticheta Events descrie metodele pentru tratarea evenimentelor a caror sursa este componenta selectata;
16/11/2013 4
c) eticheta Code se foloseste pentru a insera cod propriu in metoda initComponent() generata automat de NetBeans sau in orice alta parte a programului unde NetBeans genereaza automat cod; de asemenea se foloseste si pentru a modifica secvente de cod generate automat cu NetBeans pentru componenta selectata; - Fereastra de cod (fereastra Source) contine codul Java al aplicatiei informatice; in aceasta fereastra sunt zone de cod care sunt generate automat de NetBeans (si ele nu pot fi modificate decat cu ajutorul ferestrei Properties) si sunt zone de cod in care programatorul poate insera, modifica sau sterge instructiunii proprii; - Fereastra de navigare printre componentele grafice ale interfetei (fereastra Inspector) permite vizualizarea tuturor componentelor grafice ale interfetei utilizator; de asemenea permite si selectia componentei respective in fereastra Design; - Fereastra de navigare in structura proiectului permite vizualizarea tuturor pachetelor, fisierelor, bibliotecilor etc ce formeaza aplicatia, intr-o structura arborescenta. Navigarea prin aceasta structura se realizeaza la fel ca in Windows Explorer, iar deschiderea fisierelor are loc prin dublu-clic pe numele lor. Aceasta fereastra permite gestionarea rapida a componentelor aplicatiei (modificare, adaugare sau stergere).
16/11/2013
In aceasta fereastra se extinde (cu clic pe semnul +) elementul Java GUI Forms din caseta Categories, si se alege elementul AWT Forms daca se doreste proiectarea unei interfete utilizator folosind tehnologia AWT (crearea unei ferestre de tip Frame).
Daca se doreste proiectarea unei interfete utilizator folosind tehnologia Swing (crarea unei ferestre de tip JFrame) nu este necesar sa se extinda elementul AWT Forms. Apoi, in caseta File Types se alege elementul Frame Form pentru fereastra AWT sau JFrame Form pentru fereastra Swing. 3. Stabilirea numelui ferestre de tip Frame in varianta AWT sau JFrame in varianta Swing si a locului acesteia in cadrul proiectului. De fapt, NetBeans creaza un nou fisier cu extensia .java care contine codul initial pentru o clasa, cu numele precizat in caseta Class Name, care extinde clasa Frame (ATW) sau JFrame (Swing).
16/11/2013 6
Pasul 3 stabilirea numelui ferestre de tip Frame sau JFrame si a locului acesteia in cadrul proiectului
16/11/2013 8
Dupa terminarea procedurii de creare a ferestrei aplicatiei ecranul de lucru arata ca in figura de mai jos:
16/11/2013
Dupa crearea ferestrei aplicatiei informatice mediul NetBeans ne permite sa lucram in doua moduri: - modul de lucru Source folosit pentru a edita (inserare de, modificare de, stergere de) cod; - modul de lucru Design folosit pentru a insera, modifica sau sterge componente grafice elementare, in fereastra aplicatiei, precum si pentru a modifica proprietati sau a trata evenimente specifice fiecarei componente a ferestrei. Vom detalia cateva aspecte legate de modul de lucru Design Stabilirea modului de pozitionare a componentelor grafice pe suprafata de afisare (fereastra aplicatiei) folosind modul de lucru Design Mediul NetBeans permite mai multe moduri de pozitionare si adaugare a componentelor grafice in fereastra aplicatiei. Dupa crearea ferestrei aplicatiei mediul NetBeans stabileste schita de asezare si adaugare la tipul BorderLayout, care este putin utilizat. Descrierea acestei schite se va face in cursul urmator.
16/11/2013
10
Pentru modificarea schitei de asezare a componentelor grafice in fereastra aplicatiei se procedeaza astfel: - se intra in fereastra Inspector si se alege componenta Frame sau JFrame - se executa clic cu butonul drept al mouse-ului si din meniul contextual, care apare, se alege optiunea Set Layout apoi, se alege tipul de schita dorit, cum ar fi: Free Design, AbsoluteLayout, BoxLayout, CardLayout, FlowLayout, GridLayout, GridBagLayout, NullLayout. Este de preferat sa se aleaga Free Design care este cel mai usor de folosit si permite programatorului sa aseze componentele in mod liber cum doreste el. Folosirea componentelor grafice din fereastra Palette a mediului NetBeans In folosirea componentelor grafice din fereastra Palette trebuie sa se aiba in vedere tehnologia folosita pentru crearea ferestrei aplicatiei. Daca fereastra aplicatiei a fost creata cu AWT, atunci se vor adauga in aceasta numai componente AWT iar daca fereastra aplicatiei a fost creata cu Swing, atunci se vor adauga numai componente Swing.
Swing foloseste aceeasi infrastructura de clase ca si AWT, ceea ce permite folosirea combinata a componentelor Swing si AWT in aceeasi interfata utilizator. Totusi, in unele cazuri este posibil ca aceste doua tipuri de componente sa nu fie reprezentate corect in cadrul containerului. Pentru evitarea problemelor, cel mai bine este sa folosim exclusiv un singur sistem de componente grafice.
16/11/2013
11
Componentele AWT din fereastra Palette sunt reprezentate in figura de mai jos:
Componentele Swing din fereastra Palette sunt reprezentate in figura de mai jos:
16/11/2013
12
In Java, interceptarea unui eveniment generat de o componenta a interfetei grafice se realizeaza prin intermediul unui obiect (interceptor sau care trateaza evenimentul) al unei clase interceptoare (listener) care implementeaza o interfata cu un nume de forma <tip_eveniment>Listener sau extinde o clasa abstracta cu un nume de forma <tip_eveniment>Adapter.
Utilizator (actiune) Componenta (genereaza un eveniment) Interceptor de tip Listener (intercepteaza si trateaza un eveniment)
13
16/11/2013
Tipuri de evenimente
Un eveniment este un obiect al unei clase <tip>Event din urmatoarea ierarhie de clase Java:
Object
EventObject (din pachetul [Link]) AWTEvent (din pachetul [Link]) <tip>Event (din pachetul [Link]) <tip>Event (din pachetul [Link])
Principalele tipuri de evenimente definite cu ajutorul claselor <tip>Event sunt descrise in urmatorul tabel:
16/11/2013 14
Adaugare, stergere de componente pe container Obtinerea/pierderea controlului asupra tastaturii Selectia sau deselectia de componente (liste, casute de optiuni etc)
Apasarea sau eliberarea unei taste Actiuni de mouse: clic, apasare, eliberare, iesire/intrare in componenta Miscare mouse, tarare (drag) mouse
TextEvent
WindowEvent
16/11/2013
Tipuri de interceptori de evenimente (listener) O clasa interceptoare de evenimente (listener) poate fi orice clasa care specifica in declaratia sa ca doreste sa intercepteze (sa trateze) evenimente de un anumit tip. Pentru a deveni o clasa interceptoare a unui eveniment de un anumit tip, clasa respectiva trebuie sa implementeze (cuvantul-cheie implements) o interfata specifica pentru tratarea tipului de eveniment (interfata care este un tip de interceptor) si care are un nume de forma <tip_eveniment>Listener. De exemplu, pentru interceptarea evenimentelor de tip MouseEvent, clasa respectiva trebuie sa implementeze interfata MouseListener etc. Interfetele <tip_eveniment>Listener se gasesc in pachetul [Link] si sunt derivate din clasa EventListener care face parte din pachetul [Link]. Fiecare interfata <tip_eveniment>Listener declara una sau mai multe metode care vor trebui sa fie implementate in clasa interceptoare si care vor fi apelate automat la aparitia unui eveniment.
16/11/2013
16
De exemplu: class TrateazaButoane implements MouseListener { public void mouseClincked(MouseEvent me) { // Metoda interfetei MouseListener ... }} class TrateazaCaseteText implements TextListener { public void textValueChanged(TextEvent te) { // Metoda interfetei TextListener ... } }
De exemplu, un eveniment de tipul MouseEvent, care corespunde generic actionarii cu butoanele mouse-ului asupra unei componente, are ca subevenimente : clicul (apasarea si eliberarea), apasarea si eliberarea unui buton al mouse-ului, precum si intrarea si iesirea din componenta. Pentru fiecare subeveniment este prevazuta o metoda in interfata MouseListener, de forma: void mouseClincked(MouseEvent e) void mousePressed(MouseEvent e) void mouseReleased(MouseEvent e) void mouseEntered(MouseEvent e) void mouseExited(MouseEvent e) Intrucat o clasa poate implementa oricate interfete, ea va putea sa intercepteze (sa trateze) evenimente de mai multe tipuri: class Interceptor implements MouseListener, TextListener { public void mouseClincked(MouseEvent me) { //Metoda interfetei MouseListener ... } public void textValueChanged(TextEvent te) { //Metoda interfetei TextListener ... }}
16/11/2013
18
Urmatorul tabel prezinta principalele tipuri de interceptori (interfetele specifice tratarii tipului de eveniment) si sursele evenimentelor (clasele din pachetul [Link] care definesc componente AWT Java adica obiecte vizuale):
Tip de interceptor asociat unui tip de eveniment ActionListener AdjustmentListener Sursa evenimentelor (clase care definesc componente AWT) List (caseta cu lista), Button (buton de comanda), TextField (camp de text), MenuItem (optiuni de meniu) Scrollbar (bara de defilare)
ComponentListener
ContainerListener FocusListener ItemListener
TextListener
WindowListener
16/11/2013
Orice instanta a unei clase care intercepteaza (trateaza) un eveniment de un anumit tip trebuie sa implementeze obligatoriu metodele interfetei corespunzatoare <tip_eveniment>Listener. Tabelul de mai jos prezinta, pentru fiecare interfata <tip_eveniment>Listener, metodele puse la dispozitie si care trebuie implementate de clasa interceptoare de evenimente.
Interfata implementata de clasa interceptoare (care trateaza tipul de eveniment) Metodele interfetei
ActionListener
AdjustmentListener ComponentListener
actionPerformed(ActionEvent e)
adjustmentValueChanged(AdjustmentEve nt e) componentHidden(ComponentEvent e) componentMoved(ComponentEvent e) componentResized(ComponentEvent e) componentShown(ComponentEvent e) componentAdded(ContainerEvent e) componentRemoved(ContainerEvent e)
ContainerListener
FocusListener
ItemListener
16/11/2013
focusGained(FocusEvent e) focusLost(FocusEvent e)
itemStateChanged(ItemEvent e)
20
Interfata implementata de clasa interceptoare (care trateaza tipul de eveniment) KeyListener MouseListener
Metodele interfetei keyPressed(KeyEvent e) keyReleased(KeyEvent e) keyTyped(KeyEvent e) mouseClicked(MouseEvent e) mouseEntered(MouseEvent e) mouseExited(MouseEvent e) mousePressed(MouseEvent e) mouseReleased(MouseEvent e) mouseDragged(MouseEvent e) mouseMoved(MouseEvent e) textValueChanged(TextEvent e) windowActivated(WindowEvent e) windowClosed(WindowEvent e) windowClosing(WindowEvent e) windowDeactivated(WindowEvent e) windowDeiconified(WindowEvent e) windowIconified(WindowEvent e) windowOpened(WindowEvent e)
21
16/11/2013
- <a> - specifica o instanta a unei clase interceptoare care implementeaza interfata <tip_eveniment>Listener; aceasta instanta este considerata administratorul tratarii evenimentelor unei componente.
16/11/2013 22
De exemplu: [Link](new TrateazaButoane()); Stabileste ca obiectul creat newTrateazaButoane() este inregistrat ca administrator al tratarii evenimentelor de clic de mouse ale butonului de comanda cmdBtn. Cu alte cuvinte, metodele de tipul add<tip_eveniment>Listener() asociaza sursa evenimenului (componenta Java) cu administratorul evenimentului (instanta care trateaza evenimentul) Un administrator de evenimente poate fi asociat mai multor tipuri de evenimente, deoarece clasa interceptoare din care provine administratorul poate implementa mai multe interfete <tip_eveniment>Listener. Putem da exemplul obiectului de tip Frame care poate implementa oricate interfete <tip_eveniment>Listener are nevoie pentru a trata diverse tipuri de evenimente care se pot produce asupra componentelor elementare (butoane, casete de text etc) asezate in fereastra de tip Frame. De asemenea, unei componente Java ii putem asocia mai multi gestionari de evenimente. Mai mentionam ca pentru fiecare metoda add<tip_eveniment>Listener() exista si o metoda de tip remove<tip_eveniment>Listener(), prin care un administrator de evenimente inceteaza de a mai fi asociat unei componente.
16/11/2013 23
In concluzie, tratarea evenimentelor in Java se desfasoara astfel: 1. Componentele Java genereaza evenimente cand ceva interesant se intampla; 2. Sursele evenimentelor (componentele Java) permit oricarei clase sa intercepteze evenimentele sale prin metode de tip add<tip_eveniment>Listener(); 3. O clasa care intercepteaza evenimente trebuie sa implementeze interfete specifice fiecarui tip de eveniment - acestea descriu metode ce vor fi apelate automat la aparitia evenimentelor.
Asadar, pentru a scrie cod care sa se execute in momentul in care utilizatorul interactioneaza cu o componenta grafica trebuie sa parcurgem urmatorii pasi:
1. sa definim o clasa care sa implementeze interfete specifice <tip_eveniment>Listener si care sa intercepteze evenimentele produse de acea componenta; in cadrul acestei clase trebuie sa implementam (sa scriem) metodele specifice pentru tratarea evenimentelor; 2. sa cream o instanta a clasei definite la pasul 1 si sa comunicam componentei-sursa ca respectiva instanta ii intercepteaza (trateaza) evenimentele pe care le genereaza, cu alte cuvinte, sa inregistram acea instanta drept administrator al evenimentelor produse de componenta respectiva (folosind metode de tip add<tip_eveniment>Listener()).
16/11/2013 24
Stim deja ca, o clasa care trateaza evenimente de un anumit tip trebuie sa implementeze interfata corespunzatoare acelui tip. Aceasta inseamna ca trebuie sa implementeze obligatoriu toate metodele definite de acea interfata, chiar daca nu specifica nici un cod pentru unele dintre ele. Sunt insa situatii cand acest lucru poate deveni neplacut, mai ales atunci cand nu ne intereseaza decat o singura metoda a interfetei pentru ca dorim sa tratam un singur subeveniment.
Un exemplu, in acest sens, este urmatorul: o fereastra (de tip Frame) care nu are specificat cod pentru tratarea subevenimentului sau de inchidere nu poate fi inchisa cu butonul marcat cu x din coltul dreapta sus si nici cu combinatia de taste Alt+F4. Pentru a realiza acest lucru trebuie interceptat evenimentul de inchidere a ferestrei in metoda windowClosing() si apelata metoda de inchidere [Link]() pentru terminarea programului, in cazul cand ne referim la fereastra principala a aplicatiei. Aceasta inseamna ca trebuie sa implementam interfata WindowListener care are nu mai putin de sapte metode. Pentru a evita scrierea inutila a acestor metode, exista o serie de clase care implementeaza interfetele <tip_eveniment>Listener fara a specifica nici un cod pentru metodele lor. Aceste clase au un nume de forma: <tip_eveniment>Adapter.
16/11/2013 25
Clasele <tip_eveniment>Adapter sunt clase abstracte care implementeaza fiecare o anumita interfata <tip_eveniment>Listener fara a specifica cod la nici o metoda a interfetei.
Scopul unei astfel de clase este ca la crearea unui interceptor de evenimente, in loc sa implementam o anumita interfata, si implicit toate metodele sale, sa extindem clasa <tip_eveniment>Adapter corespunzatoare interfetei respective (daca aceasta clasa exista) si sa suprascriem doar metodele care ne intereseaza (cele in care vrem sa scriem o anumita secventa de cod). De exemplu, adaptorul interfetei WindowListener este clasa abstracta WindowAdapter. Definim o clasa interceptoare care extinde clasa WindowAdapter si suprascriem in ea metoda windowClosing(). Avantajul acestei modalitati de tratare a evenimentelor este reducerea codului programului, acesta devenind mult mai lizibil. Dezavantajul major al acestei modalitati este ca, daca se doreste interceptarea mai multor tipuri de evenimente, atunci trebuie definite clase interceptoare care sa extinda clase <tip_eveniment>Adapter pentru fiecare tip de eveniment. Acest fapt se datoreaza restrictiei de mostenire a claselor, care spune ca o clasa nu poate extinde decat o singura clasa. Vom vedea insa ca acest dezavantaj poate fi eliminat prin folosirea unei clase anonime.
16/11/2013 26
In tabelul de mai jos sunt date toate clasele <tip_eveniment>Adapter (adaptori) asociate interfetelor <tip_eveniment>Listener. Se oberva ca o interfata <tip_eveniment>Listener are un adaptor de tipul <tip_eveniment>Adapter. Interfetele care nu au un adaptor sunt cele care definesc o singura metoda si prin urmare crearea unei clase adaptor nu isi are rostul.
Interfata <tip_eveniment>Listener ActionListener AdjustmentListener ComponentListener ContainerListener FocusListener Adaptorul <tip_eveniment>Adapter Nu are Nu are ComponentAdapter ContainerAdapter FocusAdapter
ItemListener
KeyListener MouseListener si MouseMotionListener TextListener
Nu are
KeyAdapter MouseAdapter si MouseMotionAdapter Nu are
WindowListener
16/11/2013
WindowAdapter
27
Un exemplu tipic de folosire a claselor anonime este instantierea adaptorilor direct in corpul unei clase (de tip Frame) care contine componente ale caror evenimente trebuie tratate. Utilizarea IDE NetBeans pentru tratarea evenimentelor Java Mediul de dezvoltare NetBeans faciliteaza lucu cu evenimente permitand generarea automata de cod pentru definirea claselor interceptoare de evenimente si pentru definirea metodelor de tratare a acestora. De asemenea, se genereaza cod si pentru a asocia o componenta-sursa la administratorul de evenimente dorit. Pentru a trata evenimentele unei componente (obiect vizual) in mod automat se procedeaza astfel: 1. se intra in modul de lucru Design (proiectare interfata grafica); 2. se alege din fereastra de proprietati (Properties) tab-ul Event al componentei dorite care este sursa evenimentului; astfel, sunt vizualizate toate metodele-eveniment atasate componentei respective; 3. se selecteaza apoi metoda-eveniment dorita; pe ecran apare fereastra Handlers a metodei-eveniment in care se alege butonul Add pentru a da un nume unei metode definita de programator care sa trateze evenimentul respectiv; dupa terminarea acestei operatiuni IDE NetBeans face comutarea in modul de lucru Source (editare cod sursa);
16/11/2013 29
4. In modul de lucru Source IDE NetBeans creaza automat antetul metodei a carui nume a fost stabilit la pasul 2; imediat dupa antetul metodei, programatorul poate introduce cod care sa trateze un eveniment. Daca se doreste stergerea unei metode-eveniment asociata cu o componenta din interfata, se procedeaza la fel, numai ca la pasul 2 se foloseste butonul Remove din fereastra Handlers. Automat, se va sterge si codul metodei-eveniment respective.
Figura de mai jos ilustreaza cum se poate declara o metoda pentru tratarea unui tip de eveniment al unei componente din interfata utilizator (a unui buton de comanda).
16/11/2013
30
Urmatorul program ([Link]) creaza o interfata grafica folosind componenta Frame in care sunt plasate componente elementare de tip Label, Button si TextField. Programul citeste de la tastatura un sir de 10 numere si calculeaza media numerelor citite. Media este apoi afisata in caseta de text din interfata grafica. Mediul de programare folosit pentru crearea acestei interfete utilizator a fost IDE NetBeans. Variabila de tip Label are numele label1 (dat implicit de NetBeans) variabila de tip Button are numele cmdMedie iar variabila de tip TextField are numele txtMedie. Interfata utilizator a aplicatiei in faza de proiectare este ilustrata in figura de mai jos
16/11/2013
31
16/11/2013
32
setLocationRelativeTo(null); setTitle("Calcul medie"); addWindowListener(new [Link]() { public void windowClosing([Link] evt) { exitForm(evt); } }); [Link]("calcul medie aritmetica"); [Link](new [Link]() { public void mouseClicked([Link] evt) { clicDeMouseMedie(evt); } }); [Link]("media este"); [Link] layout = new [Link](this); [Link](layout); [Link]( [Link]([Link]) .add([Link]() .add(76, 76, 76) .add(label1, [Link].PREFERRED_SIZE, [Link].DEFAULT_SIZE, [Link].PREFERRED_SIZE) .add(41, 41, 41)
16/11/2013 33
.add(txtMedie, [Link].PREFERRED_SIZE, 96, [Link].PREFERRED_SIZE) .addContainerGap(133, Short.MAX_VALUE)) .add([Link], [Link]() .addContainerGap(147, Short.MAX_VALUE) .add(cmdMedie, [Link].PREFERRED_SIZE, [Link].DEFAULT_SIZE, [Link].PREFERRED_SIZE) .add(122, 122, 122)) ); [Link]( [Link]([Link]) .add([Link]() .add(35, 35, 35) .add([Link]([Link]) .add(label1, [Link].PREFERRED_SIZE, [Link].DEFAULT_SIZE, [Link].PREFERRED_SIZE) .add(txtMedie, [Link].PREFERRED_SIZE, [Link].DEFAULT_SIZE, [Link].PREFERRED_SIZE)) .addPreferredGap([Link], 185, Short.MAX_VALUE)
16/11/2013 34
.add(cmdMedie, [Link].PREFERRED_SIZE, [Link].DEFAULT_SIZE, [Link].PREFERRED_SIZE) .add(36, 36, 36)) ); pack(); }// </editor-fold> private void clicDeMouseMedie([Link] evt) { int[] a = new int[10]; int suma; float medie; suma = 0; medie = 0; for(int i = 0; i < 10; i++) { String raspuns = [Link](this, "Introduceti un numar", "Introducere de date", [Link].INFORMATION_MESSAGE); a[i] = [Link](raspuns); suma += a[i]; } medie = suma/10; [Link](new Float(medie).toString()); }
16/11/2013 35
/** Exit the Application */ private void exitForm([Link] evt) { [Link](0); } public static void main(String args[]) { [Link](new Runnable() { public void run() { new TestEvenimente().setVisible(true); } }); } // Variables declaration - do not modify private [Link] cmdMedie; private [Link] label1; private [Link] txtMedie; // End of variables declaration }
16/11/2013
36
Vom face cateva comentarii asupra programului prezentat mai sus: 1. IDE NetBeans genereaza automat metoda cu numele initComponents() folosita de constructorul clasei TestEvenimente pentru initializarea componentelor interfetei utilizator; codul din aceasta metoda nu se poate modifica in modul de lucru Source ci numai in modul de lucru Design prin folosirea fereastrei de proprietati (Properties). 2. Sunt incluse in metoda initComponent() urmatoarele metode de tratare a evenimentelor: - metoda-eveniment mouseClicked() a clasei interceptoare MouseAdapter, folosita pentru butonul de comanda cmdMedie; metoda este redefinita in interiorul unei clase anonime; - metoda-eveniment windowClosing() a clasei WindowAdapter, folosita pentru inchiderea ferestrei aplicatiei; metoda este redefinita in interiorul unei clase anonime. 3. Metoda clicDeMouseMedie() este apelata din metoda mouseClicked() si descrie codul care trebuie executat atunci cand se face clic de mouse pe butonul cmdMedie. Antetul acestei metode nu se poate modifica decat in modul de lucru Design folosind procedura descrisa la tratarea evenimentelor cu ajutorul IDE NetBeans. Corpul metodei poate fi modificat de programator in modul de lucru Source.
16/11/2013 37
4. Metoda exitForm()este apelata din metoda windowClosing() si descrie codul care trebuie executat atunci cand se apasa pe butonul x din coltul din dreapta sus al ferestrei aplicatiei. Acest cod a fost generat automat la crearea fisierului [Link], dar el poate fi modificat de programator in modul de lucru Source. 5. Metoda main() a aplicatiei a fost generata automat la crearea fisierului [Link]. Codul din aceasta metoda poate fi modificat sau completat cu alte instructiuni. Metoda [Link]() apelata in metoda main() pune in executie firulul care face vizibila fereastra aplicatiei, dupa ce s-au procesat toate celelalte evenimente trimise in coada de evenimente. Se observa ca si aceasta metoda are ca parametru o instanta a unei clase anonime de tip Runnable. Metoda care face vizibila fereastra aplicatiei este setVisible(). 6. In cod mai sunt folosite metode ca: - setText() pentru componenta txtMedie, care stabileste textul afisat in caseta de text; - setLabel() pentru componenta cmdMedie, care stabileste textul afisat pe butonul cmdMedie; - SetTitle() pentru componenta de tip Frame, reprezentand fereastra aplicatiei, care specifica titlul ferestrei. Despre aceste metode, vom discuta mai pe larg in lectia urmatoare.
16/11/2013 38
7. In metoda clicDeMouseMedie() este folosita clasa JOptionPane (din pachetul [Link]) pentru a crea o caseta de dialog standard (sub forma unei mici ferestre) prin care se face citirea de la tastatura a datelor de intrare. Pentru afisarea pe ecran a ferestrei de introducere a datelor s-a folosit metoda showInputDialog() a clasei JOptionPane. Despre crearea unor casete de dialog care sa realizeze introducerea datelor de la tastatura sau afisarea unor mesaje scurte pe baza clasei JOptionPane, vom discuta mai pe larg in lectia urmatoare. 8. In metoda initComponents() s-a generat automat cod pentru pozitionarea componentelor vizuale pe suprafata de afisare a ferestrei. Deoarece in faza de proiectare a ferestrei aplicatiei, s-a ales, ca mod de asezare a componentelor, schita (layout) Free Design (optiunea Set Layout -> Free Design din mediul NetBeans) s-a generat automat cod Java pentru: -crearea administratorului de pozitionare (folosind operatorul new si clasa corespunzatoare [Link]); -stabilirea administratorului de pozitionare pentru fereastra aplicatiei (folosind metoda setLayout()); - adaugarea componentelor in fereastra aplicatiei (folosind metoda add()). Despre toate acestea mai pe larg in lectia viitoare.
16/11/2013 39