Documente Academic
Documente Profesional
Documente Cultură
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.
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
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.
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.
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.
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);
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);
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.
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
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 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.