Sunteți pe pagina 1din 16

Proiectarea unei interfete utilizator cu ajutorul Swing

Swing, care face parte din biblioteca JFC (Java Foundation Classes), reprezint o extensie a pachetului AWT (Abstract Windowing Toolkit), care a fost integrat ncepnd cu versiunea 2 a Java. Swing ofer o funcionare mbuntit fa de predecesorul sau - noi componente, funcii avansate ale acestora, o mai bun tratare a evenimentelor, precum i un aspect adaptabil. Toate elementele Swing fac parte din pachetul javax.swing. Pentru a folosi o clas Swing, trebuie s folosii fie o instruciune import explicit, fie una general, cum ar fi urmtoarea: import javax.swing.* ; Procesul de folosire a unei componente Swing nu este diferit de cel al folosiri componentelor AWT. Vei crea componenta apelnd constructorul su, apelnd, dac este nevoie, metodele componentei i apoi adugnd componenta ntr-un container. Toate componentele Swing sunt subclase ale clasei JComponent.

Cadrul unei aplicatii


Primul pas n crearea unei aplicaii Swing const n crearea unei subclase a clasei JFrame. Clasa JFrame este o extensie a clasei Frame (cadru) i poate fi folosit ntr-un mod asemntor

Adugarea de componente ntr-un cadru Swing


Lucrul cu un obiect JFrame este mai complicat dect lucrul cu echivalentul su AWT, n loc s adugai containerele i componentele direct n cadru, trebuie s le adugai ntr-un container intermediar, denumit panou de coninut (content pane). Un cadru JFrame este mprit n mai multe panouri diferite. Panoul principal cu care lucrai este panoul de coninut, care reprezint aria complet a cadrului n care pot fi plasate componente. Pentru a aduga o component n panoul de coninut se procedeaz astfel: Creai un obiect JPanel (versiunea Swing a panoului - Panel). Adugai componentele (care pot fi i containere) n obiectul JPanel folosind metoda add (Component) a acestuia. Definii acest obiect JPanel drept panou de coninut folosind metoda setContentPane(Container). Obiectul JPanel este singurul argument al metodei.

Lucrul cu Swing
Exist componente Swing echivalente pentru toate componentele AWT pe care le-ai nvat pn acum. n majoritatea cazurilor, constructorii componentelor Swing sunt similari constructorilor AWT, aa c nu va fi nevoie s nvai lucruri noi pentru a putea folosi componentele Swing. Pentru multe componente exist i ali constructori, care primesc ca argument un obiect Icon. O pictogram (icon) este o imagine de dimensiuni mici, de obicei n format GIF, care poate fi folosit pentru butoane, etichete sau alte elemente ale interfeei pentru identificarea componentei.

Aceste pictograme sunt ntlnite aproape peste tot n sistemele de operare grafice cum sunt Windows sau MacOS. Un obiect Icon se creeaz n acelai fel ca un obiect Image. Constructorul primete ca unic argument numele unui fiier sau o adres URL. Urmtorul exemplu ncarc o pictogram din fiierul desen.gif i creeaz un obiect JButton avnd ca etichet pictograma respectiv. ImageIcon fig = new ImageIcon(desen.gif); JButton buton = new JButton(fig); JPanel panou = new JPanel(); panou.add(buton); setContentPane (panou) ;

Etichete
Etichetele sunt implementate n Swing folosind clasa JLabel. Caracteristicile sunt asemntoare cu ale etichetelor AWT, ns acum putei include i pictograme. n plus, alinierea unei etichete poate fi specificat folosind una din cele trei variabile ale clasei SwingConstants: LEFT, CENTER sau RIGHT. Iat cteva metode constructor ce pot fi folosite: JLabel(String,int) Creeaz o etichet cu irul i alinierea specificate. JLabel(String,Icon,int) Creeaz o etichet cu textul, pictograma i alinierea specificate.

Butoane
Butoanele Swing sunt descrise n clasa JButton. Ele pot folosi o etichet de text (la fel ca butoanele AWT), o etichet pictogram sau o combinaie a acestora. lat cteva dintre metodele constructor ce pot fi folosite: JButton (String) Creeaz un buton cu textul specificat. JButton (Icon) Creeaz un buton cu pictograma specificat. JButton (String, Icon) Creeaz un buton cu textul i pictograma specificate.

Cmpuri de text
Cmpurile de text sunt implementate n Swing folosind clasa JTextField. Diferena dintre aceste cmpuri text i echivalentul lor AWT este c metoda setEchoChar(char) nu mai este suportat de JTextField pentru mascarea textului introdus. lat ce metode constructor putei folosi: JTextField(int) Creeaz un cmp de text cu limea specificat. JTextField(String, int) Creeaz un cmp de text cu textul i limea specificate. Pentru crearea unui cmp de text care folosete caractere de mascare se folosete clasa JPasswordField. Aceast clas posed aceleai metode constructor ca i JTextField: JPasswordField(int) i JPasswordField(String, int). O dat creat cmpul de text pentru parole, putei folosi metoda setEchoChar(char) pentru a masca

datele de intrare cu caracterul specificat.

Zone de text
Zonele de text sunt implementate n Swing folosind clasa JTextArea. Aceasta folosete urmtoarele metode constructor; JTextArea (int, int) Creeaz o zona de text cu numrul de rnduri i de coloane specificat. JTextArea (String, int, int) Creeaz o zon de text cu textul, numrul de rnduri i de coloane specificate.

Casete de validare i butoane radio


Clasa JCheckBox implementeaz n Swing casetele de validare. Comportamentul su este acelai cu cel din AWT, avnd n plus posibilitatea de a folosi pictograme pentru etichetare. Metodele constructor sunt urmtoarele: JCheckBox(String) Creeaz o caset de validare cu eticheta text specificat. JCheckBox(String, boolean) Creeaz o caset de validare cu eticheta text specificat, care este selectat daca al doilea argument are valoarea true. JCheckBox(Icon) Creeaz o caset de validare cu eticheta pictogram specificat. JCheckBox (Icon, boolean) Creeaz o caset de validare cu eticheta pictogram specificat,. JCheckBox (String, Icon) Creeaz o caset de validare cu eticheta de text i eticheta pictogram specificate, care este selectat dac al doilea argument are valoarea true JCheckBox (String, Icon, boolean) Creeaz o caset de validare cu eticheta de text i eticheta pictogram specificate Grupurile de casete de validare sunt implementate n Swing prin clasa ButtonGroup. Aa cum ai vzut, la un moment dat nu poate fi selectat dect o singur component a unui grup de casete de validare. Pentru aceasta, vei crea un obiect ButtonGroup i vei folosi metoda add (Component) pentru a aduga o component n grup. Butoanele radio sunt implementate n Swing prin intermediul clasei JRadioButton. Metodele constructor sunt aceleai ca pentru clasa JCheckBox. Schimbarea numelui din CheckboxGroup n ButtonGroup reflect extensia n funcionalitate - pot fi grupate att butoanele radio, ct i butoanele.

Liste de opiuni
Listele de opiuni, care n AWT erau create folosind clasa Choice, sunt disponibile acum prin intermediul clasei JComboBox. O list de opiuni este creat parcurgnd urmtoarele etape: 1. Se folosete constructorul JComboBox() fr nici un argument. 2. Se folosete metoda addItem(Obiect) a casetei combo pentru a aduga elemente n list. 3. Se folosete metoda setEditable(boolean) a casetei combo, cu argumentul avnd valoarea false. Aceast ultim metod transform caseta combo ntr-o list de opiuni - singurele opiuni

disponibile pentru utilizator sunt elementele coninute de list. Cnd caseta combo este editabil permite introducerea de text din partea utilizatorului, n locul alegerii unei opiuni din list. De la aceast combinaie provine i numele casetei (combo).

Bare de derulare
Barele de derulare sunt implementate n Swing folosind clasa JScrollBar. Funcionarea acestora este identic cu cea a barelor de derulare AWT; putei folosi urmtoarele metode constructor: JScrollBar(int) Creeaz o bar de derulare cu orientarea specificat. JScrollBar(int, int, int, int, int) Creeaz o bar de derulare cu orientarea, valoarea iniial, dimensiunea casetei de derulare, valoarea minim i valoarea maxim specificate. Orientarea este specificat prin variabilele clasei SwingConstants, HORIZONTAL sau VERTICAL.

Noile caracteristici ale Swing


n afar de faptul c extinde modul de funcionare a componentelor i a containerelor fa de Abstract Windowing Toolkit, Swing ofer i alte caracteristici complet noi, cum ar fi: aspect (look and feel) configurabil, secvene de taste de accelerare, sfaturi dependente de context (ToolTips) i casete de dialog standard.

Stabilirea aspectului
Swing posed un administrator de interfa care controleaz aspectul componentelor - modul n care butoanele, etichetele i celelalte elemente sunt reprezentate pe ecran. Administrarea aspectului este sarcina clasei UIManager, care face parte din pachetul javax.swing.*. Opiunile pentru aspect difer n funcie de mediul de dezvoltare folosit. In Java 2 sunt disponibile urmtoarele opiuni: Un aspect caracteristic Windows 95 sau Windows NT Un aspect caracteristic sistemului Motif X-Window Metal, un nou aspect Swing, independent de platform Clasa UIManager posed metoda setLookAndFeel(LookAndFeel), care este folosit pentru alegerea aspectului unui program. Pentru a obine un obiect LookAndFeel care poate fi transmis ca argument metodei setLookAndFeel() putei folosi una dintre metodele UIManager: getCrossPlatformLookAndFeelClassName() Aceast metod returneaz un obiect LookAndFeel care reprezint aspectul Metal, independent de platform. getSystemLookAndFeelClassName() Aceast metod returneaz un obiect LookAndFeel care reprezint un obiect caracteristic sistemului. Daca nu poate stabili aspectul interfeei, metoda setLookAndFeel() semnaleaz o excepie UnsupportedLookAndFeel. Urmtoarele instruciuni pot fi folosite pentru a stabili un aspect Metal n orice program: try {

UIManager.setLookAndFeel( UIManager.getCrossPlatformLookAndFeelClassName ()) ; } catch (Exception e) { System.err.println(Nu pot stabili aspectul: + e) ; } Pentru a stabili aspectul sistemului, n cadrul metodei setLookAndFeel se foloseste metoda getSystemLookAndFeelClassName(). Aceasta are rezultate diferite pe sisteme de operare diferite. Folosind metoda getSystemLookAndFeelClassName(), un utilizator de Windows 95 va obine un aspect Windows 95, iar un utilizator UNIX va obine un aspect Motif.

Secvente de taste de accelerare


O secven de taste de accelerare (key accelerator), denumit i secven de prescurtare (keyboard mnemonic), reprezint o grupare de taste care poate fi folosit pentru a controla comportamentul unei componente a interfeei utilizator. Aceste taste permit folosirea unui program fr ajutorul mouse-ului; tehnica este nglobat n Swing ca parte a suportului pentru persoane cu nevoi speciale - clase care permit folosirea programelor Java de ctre nevztori sau alte persoane cu incapaciti fizice. Tastele de accelerare simuleaz aciunea mouse-ului, iar modul lor de folosire depinde de platforma folosit. Pe un calculator care ruleaz Windows 95, tastele de accelerare sunt disponibile apsnd tasta Alt mpreun cu o alt tast. Tastele de accelerare sunt stabilite prin apelul metodei setMnemonic(char) a componentei care va fi controlat prin secvena respectiv. Argumentul char este tasta care va fi folosit n combinaia de accelerare. Urmtorul exemplu creeaz un obiect JButton i asociaz caracterul i ca parte a secvenei de accelerare pentru acesta: JButton butonInfo = new Jbutton ("Informatii"); butonInfo.setMnemonic(i) ; Apsarea combinaiei Alt+I este echivalent cu executarea unui clic pe componenta butonInfo.

Sfaturi dependente de context


O alt modalitate de a face ca programul s fie mai prietenos cu utilizatorul este de a asocia sfaturi dependente de context (ToolTips) cu componentele unei interfee. Elementele TooITip sunt folosite pentru a descrie scopul unei componente. Atunci cnd nvai s folosii un program pentru prima dat, aceste sfaturi reprezint un ajutor binevenit. Pentru a asocia un sfat ToolTip cu o component, apelai metoda setToolTipText (String) pentru componenta respectiv. irul ar trebui s conin o descriere sumar a rolului componentei. Urmtorul exemplu creeaz o component JScrollBar i i asociaz acesteia un element ToolTip. JScrollBar viteza = new JscrollBar(); viteza.setToolTipText("Modifica viteza de animatie); Textul ToolTip se poate ntinde pe o singur linie, aa c nu putei folosi caracterul linie nou (newline \n) pentru a scrie mai multe rnduri.

Descrieri i nume de componente


O alt metod de a face mai accesibil o interfa este de a oferi o descriere text pentru componentele Swing. Aceast tehnic presupune dou etape: 1. Obinei obiectul AccessibleContext asociat componentei prin apelarea metodei getAccessibleContext() a acesteia. 2. Apelai metoda setAccessibleDescription(String) pentru obiectul AccessibleContext. Argumentul ir trebuie s conin textul descrierii componentei. De exemplu, urmtorul exemplu stabilete descrierea unui obiect JButton: JButton terminare = new JButton("Terminare"); terminare.getAccessibleContext().setAccessibleDescription( "C nd executati clic pe acest buton, programul se va termina); Metoda setAccessibleName (String) funcioneaz n acelai fel ca metoda setAccessibleDescription (String). Aceasta poate fi folosit pentru a da componentei un nume care s descrie pe scurt rolul ei. n cazul butonului Terminare din exemplul anterior, numele de "Buton de terminare" ar fi foarte potrivit. Urmtorul exemplu stabilete pentru cmpul de text cu numele "Camp text": JTextField ct = new JTextField(); ct.getAccessibleContext().setAccessibleName("Camp text);

Casete de dialog standard


Clasa JOptionPane ofer mai multe metode care pot fi folosite pentru a crea casete de dialog standard: mici ferestre n care se pune o ntrebare, se atrage atenia utilizatorului sau se afieaz un scurt mesaj informativ. Fr ndoial c ai mai vzut casete de dialog de acest fel - atunci cnd sistemul dumneavoastr se blocheaz, apare o caset de dialog care v anun vetile proaste. Sau atunci cnd tergei fiiere se poate folosi, de asemenea, o caset de dialog, care s v ntrebe nc o dat dac chiar dorii s facei acest lucru. Aceste ferestre reprezint o modalitate eficient de comunicare cu utilizatorul, far efortul suplimentar de a crea o clas nou care s reprezinte fereastra, de a aduga componente n ea i de a scrie metode de tratare a evenimentelor pentru preluarea datelor de intrare. Dac se folosete una dintre casetele de dialog standard oferite de dasa JOptionPane, toate aceste lucruri sunt realizate automat. Exist patru tipuri de casete de dialog standard: ConfirmDialog O caset de dialog care pune o ntrebare i posed trei butoane, corespunztoare rspunsurilor Yes, No i Cancel. InputDialog O caset de dialog care ateapt introducerea unui text. MessageDialog O caset de dialog care afieaz un mesaj. OptionDialog O caset de dialog care cuprinde toate celelalte trei tipuri. Fiecare dintre aceste casete de dialog posed propria metod n cadrul clasei JOptionPane.

Casete de dialog de confirmare

Cea mai simpl metod de creare a unei casete de dialog Yes/No/Cancel (Da/Nu/Anulare) este de a folosi metoda showConfirmDialog (Component, Object). Argumentul Component specific containerul care va fi considerat printele casetei de dialog; aceast informaie este folosit pentru a determina unde se va afia pe ecran fereastra de dialog. Dac se folosete valoarea null pentru acest argument sau containerul nu este un obiect Frame, caseta de dialog va fi afiat n centrul ecranului. Al doilea argument poate fi un ir, o component sau o pictogram. Dac este un ir de text, acesta va fi afiat n cadrul casetei de dialog. Dac este o alt component sau o pictograma, n locul mesajului text va fi afiat obiectul respectiv. Aceast metod returneaz una dintre cele trei valori posibile, reprezentate prin ntregi, care sunt variabile de clas ale JOptionPane: YES_OPTION, NO_OPTION sau CANCEL_OPTION. n continuare se prezint un exemplu care folosete o caset de dialog de confirmare cu un mesaj text i memoreaz rspunsul n variabila raspuns: int raspuns; raspuns = JOptionPane.showConfirmDialog(null, "Pot sa sterg toate fisierele dumneavoastra personale confidentiale?); Exist o alt metod ce ofer mai multe opiuni pentru dialogul de confirmare: showConfirmDialog(Component, Object, String, int, int). Primele dou argumente sunt aceleai ca pentru cealalt metod, iar ultimele trei sunt urmtoarele: Un ir care va fi afiat ca bar de titlu a casetei de dialog. Un ntreg care indic ce butoane vor fi afiate. Acesta trebuie s aib valoarea egal cu una dintre variabilele de clas YES_NO_CANCEL_OPTION sau YES_NO_OPTION. Un ntreg care descrie tipul de caset de dialog cu ajutorul variabilelor de clas ERROR_MESSAGE, INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE sau WARNING_MESSAGE. Acest argument este folosit pentru a determina care pictogram se afieaz n caseta de dialog, lng mesaj. int raspuns = JOptionPane.showConfirmDialog(null, "Error reading file. Want to try again?", "File Input Error.", JoptionPane.YES_NO_OPTION, JOptionPane.ERROR_MESSAGE);

Casete de dialog de intrare


O caset de dialog de intrare afieaz o ntrebare i folosete un cmp de text pentru a memora rspunsul. Cea mai simpl modalitate de a crea o caset de dialog de intrare este de a apela metoda showInputDialogBox (Component, Object). Argumentele sunt componenta printe, respectiv irul, componenta sau pictograma care se vor afia n caset. Exemplu: String raspuns = JOptionPane.showInputDialogBox (null,"Enter your name:"); Putei crea o caset de dialog de intrare i cu ajutorul metodei showInputDialog (Component, Object, String, int). Primele dou argumente sunt aceleai cu ale metodei anterioare, iar ultimele dou reprezint: Titlul afiat n bara de titlu a casetei de dialog. Una din cele cinci variabile de clas care descriu tipul casetei de dialog: ERROR_MESSAGE, INFORMATION_MESSAGE, PLAIN_MESSAGE,

QUESTION_MESSAGE sau WARNING_MESSAGE. Urmtoarea instruciune creeaz o caseta de dialog de intrare folosind aceast metod: String raspuns=JOptionPane.showInputDialog(null, "Care este codul dunineavoastra postal?", "Introduceti codul postal, JOptionPane.QUESTION_MESSAGE);

Casete de dialog pentru mesaje


Caseta de dialog pentru mesaje este o fereastr simpl n care se afieaz o informaie. O caset de dialog pentru mesaje poate fi creat printr-un apel al metodei showMessageDialog (Component, Object). Ca i n cazul celorlalte casete de dialog, argumentele sunt componenta printe, respectiv irul, componenta sau pictograma care se vor afia. Spre deosebire de alte casete de dialog, casetele pentru mesaje nu ntorc nici un fel de valoare de rspuns Exemplu: JOptionPane.showMessageDialog(null, "The program has been uninstalled.") ; Mai putei crea o astfel de caset de mesaje i cu ajutorul metodei showMessageDialogComponent(Object, String, int). Modul de folosire este identic cu al metodei showInputDialog(), cu aceleai argumente, cu excepia faptului c metoda showMessageDialog() nu returneaz nici o valoare. Instruciunea urmtoare creeaz o caset de dialog pentru mesaje folosind aceast ultim metod: JOptionPane.showMessageDialog(null,"Un asteroid a distrus Pamantul", "Alerta: pericol de asteroizi", JOptionPane.WARNING_MESSAGE) ;

Casete de dialog cu opiuni


Cea mai complex caset de dialog este caseta de dialog cu opiuni, care combin caracteristicile tuturor celorlalte casete de dialog. Aceast caset poate fi creat folosind metoda showOptionDialog (Component, Object, String, int, int, Icon, Object [ ], Object); Argumentele acestei metode sunt prezentate n continuare: Componenta printe a casetei de dialog Textul, pictograma sau componenta de afiat irul ce va fi afiat n bara de titlu Tipul casetei, folosind variabilele de clas YES_NO_OPTION, YES_NO_CANCEL_OPTION sau literalul 0, dac vor fi folosite alte butoane. Pictograma care va fi afiat; se folosesc variabilele de clas ERROR_MESSAGE, INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE, WARNING_MESSAGE sau literalul 0, dac nu se folosete nici una dintre acestea Un obiect Icon care va fi afiat n locul uneia dintre pictogramele stabilite de argumentul anterior Un tablou de obiecte care pstreaz componentele sau alte obiecte ce vor reprezenta opiunile casetei de dialog, dac nu se folosesc valorile YES_NO_OPTION sau

YES_NO_CANCEL_OPTION Obiectul care reprezinta selecia prestabilit, n cazul n care nu se folosesc opiunile YES_NO_OPTION sau YES_NO_CANCEL_OPTION Ultimele dou argumente v permit s creai o gam larg de opiuni pentru caseta de dialog. Putei crea un tablou de butoane, de etichete, de cmpuri de text sau chiar o combinaie de diferite obiecte. Aceste componente vor fi afiate folosind administratorul de dispunere secvenial (flow manager); nu exist nici o modalitate de a specifica un alt administrator de dispunere n cadrul casetei de dialog.

Tratarea evenimentelor utilizator cu ajutorul Swing


Pentru a face dintr-o interfa Java funcional un program Java funcional, va trebui ca interfaa s rspund la evenimentele produse de utilizator. Swing trateaz evenimentele n mod diferit, folosind un set de clase denumite interceptoare de evenimente (event listeners).

Evenimentul principal
n sistemul de tratare a evenimentelor, evenimentele erau prelucrate prin intermediul unui set de metode disponibile tuturor componentelor. Metode cum ar fi mouseDown(), keyDown() sau action() puteau fi suprascrise de orice program AWT care dorea s trateze aceste evenimente. Aceste sistem de tratare a evenimentelor este caracteristic doar Java 1.02, deoarece n urmtoarele versiuni ale limbajului a fost introdus o versiune mult mbuntit a acestuia. Acest nou sistem se folosete n aplicaiile Swing.

Interceptoare de evenimente
Dac o clas dorete s rspund unui eveniment utilizator conform sistemului Java 2 de tratare a evenimentelor, ea trebuie s implementeze o interfa care s prelucreze evenimentele. Aceste interfee se numesc interceptoare de evenimente (event listeners). Fiecare interceptor trateaz un anumit tip de eveniment, iar o clas poate implementa oricte evenimente are nevoie. Sunt disponibile urmtoarele interceptoare de evenimente: ActionListener Trateaz evenimente de aciune, care sunt generate de aciunea unui utilizator asupra unei componente cum ar fi execuia unui clic pe un buton. AdjustmentListener Trateaz evenimente de modificare, care sunt generate de modificarea unei componente, cum ar fi deplasarea unei bare de derulare, FocusListener Trateaz evenimente de selecionare, care sunt generate atunci cnd o component, cum ar fi un cmp de text, devine selectat sau pierde acest atribut. ItemListener Trateaz evenimente de element, care sunt generate atund cnd este modificat starea unui element cum ar fi o caset de validare. KeyListener Trateaz evenimente de tastatur, care apar atunci cnd un utilizator introduce date prin intermediul tastaturii. MouseListener Trateaz evenimente de mouse, care sunt generate de clicuri cu mouse-

ul, de ptrunderea indicatorului mouse-ului pe suprafaa unei componente sau de prsirea acesteia. MouseMotionListener Trateaz evenimente de deplasare a mouse-ului, care sunt folosite pentru a memora toate micarile mouse-ului pe o componenta. WindowListener Trateaz evenimente de ferestre, care sunt generate de maximizarea, minimizarea, mutarea sau nchiderea ferestrelor. Urmtoarea clas este declarat astfel nct s poat trata att evenimentele de aciune, ct i pe cele de text; public class Test extends JFrame implements ActionListener, TextListener { // . . . } Pacherul java.awt.event conine toate interceptoarele principale de evenimente, precum i pe cele asociate unor evenimente specifice. Pentru a folosi aceste clase n programele dumneavoastr putei s le importai individual sau s folosii o instruciune de tipul: import java.awt.event.*;

Configurarea componentelor
Prin definirea unei clase ca interceptor de evenimente ai stabilit faptul c aceasta poate asculta" (intercepta) un anumit tip de eveniment. Totui nu se va ntmpla nimic dac nu continuai cu un al doilea pas: trebuie s asociai componentei un interceptor de acelai tip; la folosirea componentei, acesta va genera evenimentele respective. Dup crearea unei componente, pentru a o asocia cu un anumit tip de interceptor putei apela una din urmtoarele metode: addActionListener() Pentru componente JButton, JCheckBox, JComboBox, JTextField i JRadioButton addAdjustmentListener() Pentru componente JScrollBar addFocusListener() Pentru toate componentele Swing addItemListener() Pentru componente JButton, JCheckBox, JComboBox i JRadioButton addKeyListener() Pentru toate componentele Swing addMouseListener() Pentru toate componentele Swing addMouseMotionListener() Pentru toate componentele Swing addWindowListener() Pentru toate componentele JWindow i JFrame O greeal des ntlnit n programele Java o constituie modificarea unei componente dup introducerea acesteia ntr-un container. Metodele de interceptare i celelalte configurri trebuie stabilite pentru o component nainte de a o aduga ntr-un container; altfel toate acestea vor fi ignorate la execuia programului. Urmtorul exemplu creeaz un obiect JButton i i asociaz un interceptor de evenimente de aciune: JButton terminare = new JButton("Terminare"); terminare.addActionListener(this) ; Toate metodele add. . .() folosesc un singur argument: obiectul care intercepteaz evenimentele de tipul respectiv. Folosirea cuvntului cheie this indic faptul c obiectul interceptor este chiar clasa curent. Putei specifica i alte obiecte, att timp ct clasa respectiv implementeaz

interfaa de interceptare corespunztoare.

Metode de tratare a evenimentelor


Atunci cnd asociai o interfa unei clase, clasa trebuie s implementeze toate metodele coninute de interfa. n cazul interceptoarelor de evenimente, fiecare metod este apelat automat de sistemul de ferestre atunci cnd are loc evenimentul corespunztor. Interfaa ActionListener posed o singur metod: actionPerformed(). Toate clasele care implementeaz ActionListener trebuie s conin o metod cu urmtoarea structur: public void actionPerformed(ActionEvent evt) { // aici se trateaza evenimentul } Dac n cadrul interfeei grafice utilizator exist o singur component care are asociat un interceptor de evenimente de aciune, atunci metoda actionPerformed() poate fi folosit pentru a rspunde la un eveniment generat de component. Dac mai multe componente au asociate interceptoare de evenimente de aciune, trebuie s folosii metoda pentru a afla mai nti care dintre componente a fost folosit, dup care s acionai corespunztor. n metoda actionPerformed() se transmite ca argument un obiect ActionEvent. Acest obiect poate fi folosit pentru a afla detalii despre componenta care a generat evenimentul. ActionEvent i celelalte obiecte eveniment fac parte din pachetul java.awt.event i sunt subclase ale clasei EventObject. Fiecare metod de tratare a evenimentelor primete ca argument un obiect eveniment de un anumit tip. Pentru a determina componenta care a transmis evenimentul se poate folosi metoda getSource() a obiectului, ca n exemplul urmtor: public void actionPerformed(ActionEvent evt) { Object sursa = evt.getSource(); } Obiectul returnat de metoda getSource() poate fi comparat cu o component folosind operatorul = =. n exemplul actionPerformed() anterior se pot folosi urmtoarele instruciuni: if (sursa == butonTerminare) terminaProgram() ; else if (sursa == sortareInregistrari) sorteazaInregistrari() ; Acest exemplu apeleaz metoda terminareProgram() n cazul cnd evenimentul a fost generat de obiectul butonTerminare sau metoda sortareInregistrari() dac evenimentul a fost generat de obiectul sortareInregistrari. Multe metode de tratare a evenimentelor apeleaz metode diferite pentru fiecare tip de eveniment sau de component. Aceasta face ca metoda de tratare a evenimentelor s fie uor de citit. n plus, dac o clas conine mai multe metode de tratare a evenimentelor, fiecare poate apela aceleai metode pentru realizarea sarcinii dorite. O alt tehnic util n cadrul unei metode de tratare a evenimentelor o constituie folosirea operatorului instanceof, care permite testarea fiecrui tip de component care putea genera evenimentul. Urmtorul exemplu poate fi folosit ntr-un program care conine un buton i un cmp de

text, fiecare dintre acestea genernd evenimente de aciune: void actionPerformed(ActionEvent evt) { Object sursa = evt.getSource() ; if (sursa instanceof JTextField) calculeazaScor() ; else if (sursa instanceof JButton) terminaProgram() ; }

Evenimente de actiune
Evenimentele de aciune apar atunci cnd utilizatorul realizeaz o aciune asupra unui obiect de tip JButton, JCheckBox, JTextField sau JRadioButton. Pentru a trata aceste evenimente, o clas trebuie s implementeze interfaa ActionListener. n plus, trebuie apelat metoda addActionListener() pentru fiecare component care urmeaz s genereze evenimente de aciune, cu excepia cazurilor n care dorii s ignorai evenimentele de aciune ale unei componente. Interfaa ActionListener conine o singur metod: actionPerformed(ActionEvent) care are urmtoarea form: public void actionPerformed(ActionEvent evt) { // ... } n afar de metoda getSource(), putei folosi metoda getActionCommand() cu argumentul ActionEvent, pentru a afla mai multe informaii despre sursa evenimentului. n mod prestabilit, comanda aciunii reprezint textul asociat componentei, cum ar fi eticheta de pe un buton JButton. Putei ns s definii o comand de aciune diferit pentru fiecare component, folosind metoda setActionCommand(String). Argumentul ir trebuie s conin textul dorit pentru comanda aciunii. De exemplu, urmtoarele instruciuni creeaz obiectele JButton i JTextField i le asociaz amndurora comanda de aciune "Sortare fiiere": JButton sortare = new JButton("Sortare); JTextField nume = new JTextField() ; sortare.setActionCommand(Sortare fisiere); nume.setActionCommand(Sortare fisiere);

Evenimente de modificare
Evenimentele de modificare (ajustare) apar atund cnd o component JScrollBar este deplasat folosind sgeile, caseta de derulare sau printr-un clic undeva pe bar. Pentru a trata aceste evenimente, o clas trebuie s implementeze interfaa AdjustmentListener. Interfaa AdjustmentListener conine o singur metod, care are urmtoarea form: adjustmentValueChanged(AdjustmentEvent evt) { // ...

} Pentru a obine valoarea curent a obiectului JScrollBar putei folosi metoda getValue() avnd ca argument obiectul AdjustmentEvent. Aceast metod returneaz o valoare ntreag care reprezint valoarea barei de derulare.. Putei determina i modul cum a fost deplasat bara de derulare dac folosii metoda getAdjustmentType() a obiectului AdjustmentEvent. Aceasta returneaz una din urmtoarele cinci valori, care sunt variabile de clas ale clasei Adjustment: UNIT_INCREMENT O cretere cu 1 a valorii, produs de executarea unui clic pe sgeata de deplasare a barei sau pe o tast cu sgeat UNIT_DECREMENT O descretere a valorii cu 1 BLOCK_INCREMENT O cretere mai mare a valorii, cauzat de un clic pe bara de derulare, n zona dintre caset i sgeat BLOCK_DECREMENT O descretere mai mare a valorii TRACK O modificare produs de deplasarea casetei de derulare

Evenimente de selecionare
Evenimentele de selecionare (focus events) apar atunci cnd o component primete sau pierde dreptul de a primi datele de intrare n cadrul interfeei grafice utilizator. Starea de selecionare determin componenta care este activat la un moment dat pentru a primi date de intrare de la tastatur. Dac unul din cmpurile de text este selecionat (ntr-o interfa utilizator cu mai multe cmpuri de text editabile), n acesta se va vedea un cursor care plpie. Orice text introdus de la tastatura este memorat n componenta selecionat. Starea de selecionare (focus) se aplic tuturor componentelor care pot primi date de intrare de la tastarur. n cazul unui obiect JButton selecionat, pe suprafaa acestuia va fi reprezentat un contur cu linie ntrerupt. Pentru a trata un eveniment de selecionare, o clas trebuie s implementeze interfaa FocusListener. Aceast interfa conine dou metode: focusGained(FocusEvent) i focusLost(FocusEvent), care au urmtoarea form: public void focusGained(FocusEvent evt) { // ... } public void focusLost(FocusEvent evt) { // ... } Pentru a determina care obiect a obinut sau a pierdut starea de selecionare se poate folosi metoda getSource() pentru obiectul FocusEvent, primit ca argument de metodele focusGained() sau focusLost().

Evenimente de element
Evenimentele de element (item events) apar atunci cnd se selecteaz sau se deselecteaz un element de tip JButton, JCheckBox, JComboBox sau JRadioButton. Pentru a trata aceste

evenimente, o clas trebuie s implementeze interfaa ItemListener. Aceast interfa conine o singur metod: itemStateChanged (ItemEvent), care are urmtoarea form: void itemStateChanged(ItemEvent evt) { // ... } Pentru a determina elementul care a produs evenimentul se poate folosi metoda getItem(), care primete ca argument obiectul ItemEvent. De asemenea, putei determina dac elementul a fost selectat sau deselectat folosind metoda getStateChange(). Aceasta returneaz o valoare ntreag, egal cu una dintre variabilele de clas ItemEvent. DESELECTED sau ItemEvent.SELECTED.

Evenimente de tastatur
Evenimentele de tastatur (key events) sunt generate atunci cnd se apas o tast. Orice component poate genera aceste evenimente, iar pentru a fi suportate ntr-o clas, aceasta trebuie s implementeze interfaa KeyListener. Aceast interfa conine trei metode: keyPressed(KeyEvent), keyReleased(KeyEvent) i keyTyped(KeyEvent), care au urmtoarea form: public void keyPressed(KeyEvent evt) { //... } public void keyReleased(KeyEvent evt) { // ... } public void keyTyped(KeyEvent evt) { // ... } Metoda getkeyChar() a obiectului KeyEvent returneaz caracterul tastei asociate evenimentului. Dac nu exist caracterul Unicode al tastei, metoda getKeyChar() returneaz o valoare egal cu variabila de clas KeyEvent.CHAR_UNDEFINED.

Evenimente de mouse
Evenimentele de mouse sunt generate, de obicei, de mai multe tipuri de interaciuni: Clic de mouse Indicatorul mouse-ului ptrunde pe suprafaa componentei Indicatorul mouse-ului prsete suprafaa componentei Orice component poate genera aceste evenimente, care sunt implementate de o clas prin intermediul interfeei MouseListener. Aceast interfa posed cinci metode: mouseClicked(MouseEvent) mouseEntered(MouseEvent) mouseExited(Mouse.Event) mousePressed(Mouse.Event)

mouseReleased(MouseEvent) Fiecare dintre acestea are forma generic prezentat mai jos pentru mouseReleased (MouseEvent): mouseReleased(MouseEvent evt) { // ... } Pentru obiectele MouseEvent pot fi folosite unntoarele metode: getClickCount() Returneaz o valoare ntreag ce reprezint de cte ori s-a executat clic getPoint() Returneaz coordonatele x,y ale punctului unde s-a executat clic pe component, sub forma unui obiect Point. getX() Returneaz poziia x getY() Returneaz poziia y

Evenimente de deplasare a mouse-ului


Evenimentele de micare a mouse-ului apar atunci cnd mouse-ul este deplasat pe o component. Ca i n cazul altor evenimente de mouse, orice component poate genera evenimente de deplasare a mouse-ului. Pentru a suporta aceste evenimente, o clas trebuie s implementeze interfaa MouseMotionListener. Aceast interfa conine dou metode: mouseDragged(MouseMotionEvent) i mouseMoved(MouseMotionEvent), care au urmtoarea form: public void mouseDragged(MouseEvent evt) { // ... } public void mouseMoved(MouseEvent evt) { // ... } Spre deosebire de alte interfee de interceptoare de evenimente pe care le-ai ntlnit pn acum, MouseMotionListener nu posed un tip propriu de eveniment, ci folosete evenimente MouseEvent. Din acest motiv, putei apela orice metode corespunztoare evenimentelor de mouse: getClickCount(), getPoint (), getX() sau getY().

Evenimente de fereastr
Evenimentele de fereastr apar atunci cnd utilizatorul deschide sau nchide un obiect fereastr, cum ar fi JFrame sau JWindow. Orice componenta poate genera aceste evenimente, iar pentru a le trata, o clas trebuie s implementeze interfaa windowListener. Interfaa WindowListener conine apte metode: windowActivated(WindowEvent) windowClosed(WindowEvent) windowClosing(WindowEvent) windowDeactivated(WindowEvent) windowDeiconified(WindowEvent)

windowIconified(WindowEvent) windowOpened(WindowEvent) Toate acestea au urmtoarea form, prezentat aici pentru metoda windowOpened(WindowEvent): public void windowOpened(WindowEvent evt) { // . . . } Metodele windowClosing() i windowClosed() sunt asemntoare, ns una este apelat o dat cu nchiderea ferestrei, iar cealalt - dup nchiderea acesteia. Dac dorii, este posibil ca n cadrul metodei windowClosing() s decidei anularea nchiderii ferestrei.

S-ar putea să vă placă și