Documente Academic
Documente Profesional
Documente Cultură
Curs13 Java
Curs13 Java
- realizarea unei interfete grafice folosind AWT: ierarhii de clase AWT; clasa Component, clasa Container, clasa Window, clasa Frame, clasa Pane; - notiuni de baza despre pozitionarea componentelor interfetei utilizator: administratori de pozitionare;
- componente AWT elementare: clasa Label, clasa Button, clasa TexField, clasa TextArea;
- realizarea unei interfete grafice folosind Swing: avantaje Swing;
proiectarea ferestrelor aplicatiei Java- clasa JFrame; folosirea componentelor elementare Swing.
27/01/2013
Button
Label
TextComponent TextField
TextArea
Clasa abstracta Component, aflata in radacina arborelui claselor din AWT, defineste interfata general valabila pentru toate componentele grafice. Obiectele de tip Component se numesc componente grafice. Un container (obiect de tip Container) este o componenta care poate contine alte componente AWT. Exemple de containere sunt: ferestre independente (obiecte de tip Frame), casete de dialog (obiecte de tip Dialog), fereastra Applet etc.
27/01/2013 2
Clasa Container este superclasa tuturor suprafetelor de afisate Java (ferestre independente, Appleturi etc). O fereastra AWT (obiect de tip Window) este o suprafata de afisare dreptunghiulara fara margini si fara bara de meniuri. Un cadru (obiect de tip Frame) este o fereastra AWT cu margini, titlu si bara de meniuri. O fereastra de dialog (obiect de tip Dialog) extinde o fereastra AWT prin adaugarea de margini si a unui titlu; ea este folosita in principal pentru a prelua informatii de la utilizator. O fereastra de defilare (obiect de tip ScrollPane) implementeaza un cadru de defilare pe orizontala si pe verticala pentru o componenta inclusa in container. Un panou (obiect de tip Panel) este folosit pentru a grupa mai multe componente elementare (butoane, casete de text etichete etc). Un applet este (obiect de tip Applet) extinde un panou AWT si este folosit ca suprafata de afisare a componentelor elementare ale unei aplicatii Internet de tip Applet, executate prin intermediul unui browser compatibil Java (ca de exemplu Internet Explorer sau Netscape).
27/01/2013 3
Vom descrie succint fiecare din componentele prezentate in ierarhia de clase AWT. Clasa Component este o clasa abstracta care deriva din clasa Object si face parte din pachetul java.awt. Dintre metodele acestei clase mentionam: - void setVisible(boolean <b>) afiseaza o componenta daca parametrul <b> are valoarea true si face componenta invizibila daca parametrul <b> este false; - void requestFocus() prin care componenta curenta primeste focus-ul (controlul asupra tastaturii) cu conditia ca ea sa fie vizibila; - void setBackGround(Color <c>) stabileste culoarea fundalului componentei conform cu parametrul <c>; - void setForeGround(Color <c>) stabileste culoarea prim planului componentei; - void setFont(Font f) stabileste fontul pentru componenta.
27/01/2013
- void setLayout(LayoutManager <lm>) stabileste modul de pozitionare al componentelor interfetei in container, corespunzator parametrului <lm>. Vom reveni la modalitatile de dispunere a componentelor interfetei mai tarziu in aceasta lectie;
- Insets getInsets() - determina distanta rezervata pentru marginile suprafetei de afisare; - void validate() - forteaza containerul sa reaseze toate componentele sale; aceasta metoda trebuie apelata explicit atunci cand adaugam sau eliminam componente pe suprafata de afisare dupa ce aceasta a devenit vizibila.
27/01/2013 5
CardLayout
BorderLayout
GridBagLayout
27/01/2013
Pentru a crea un administrator de pozitionare pentru un container, se creaza o instanta a clasei administratorului folosind o instructiune de genul: GridLayout glo = new GridLayout(); Dupa crearea administratorului de pozitionare, acesta va fi declarat drept administrator de pozitionare pentru container folosind metoda setLayout() a acestuia: setLayout(glo); Nota: Administratorul de pozitionare trebuie stabilit inainte de a adauga, folosind metoda add(), componentele in container.
Vom descrie succint cativa dintre administratorii de pozitionare mai des folositi.
Pozitionarea secventiala a componentelor FlowLayout este cea mai simpla clasa de administrare a pozitionarii componentelor. Ea aranjeaza componentele intr-o maniera asemanatoare dispunerii cuvintelor intr-o pagina de la stanga la dreapta pana la capatul randului, apoi in continuare pe randul urmator.
27/01/2013
Administratorul de pozitionare tabelara (GridLayout) aranjeaza componentele intr-un tabel format din randuri si coloane. Componentele sunt asezate incepand cu celula aflata cel mai in stanga pe primul rand al tabelului si continuand spre dreapta. Dupa completarea tuturor celulelor de pe primul rand se continua cu cel de-al doilea rand, de la stanga la dreapta, si asa mai departe. Pozitionare marginala
Pozitionarea marginala (BorderLayout) imparte un container in cinci sectiuni: nord, sud, est, vest si centru. Acest aranjament are ca rezultat o componenta centrala de dimensiuni mari, inconjurata de patru componente de dimensiuni mai mici.
Etichete Etichetele sunt create folosind clasa Label. E.tichetele sunt texte care pot fi afisate pe suprafata de afisare dar nu pot fi modificate de utilizator Clasa Label are urmatorii constructori:
27/01/2013
11
Butoane Butoanele sunt create folosind clasa Button. Butoanele sunt folosite intr-o interfata pentru a declansa o anumita actiune. Clasa Button are urmatorii constructori:
- Button() creaza un buton care nu contine nici un text pentru explicarea functiei sale;
- Button(String <eticheta>) creaza un buton pe care este afisat sirul de text, specificat in parametrul <eticheta>.
27/01/2013
12
Campuri si arii de text Campurile si ariile de text sunt create folosind clasele TextField si TextArea. Textele sunt folosite intr-o interfata pentru a crea zone in care textul poate fi modificat de utilizator. Aceste doua clase au ca superclasa TextComponent. Clasa TextField are mai multi constructori dintre care mentionam: - TextField() creaza un camp de text care nu contine nici un text; - TextField(String <text>) creaza un camp de text completat cu sirul de text, specificat in parametrul <text>. Dintre metodele clasei TextField, mai des folosite sunt: - void setText(String <text>) scrie sirul de text, specificat in parametrul <text>, in camp; - String getText() returneaza textul continut de camp; - void setEditable(boolean <b>) determina daca acel camp de text poate fi modificat. Un parametru cu valoarea false impiedica editarea campului, iar valoarea true o permite (aceasta este prestabilita). - boolean isEditable() returneaza o valoare de tip boolean prin care se indica daca acel camp poate fi editat (true) sau nu (false).
27/01/2013 13
Obiectele de tip TextArea se deosebesc de obiectele TextField prin aceea ca ele contin mai multe linii de text. Zonele de text poseda bare de defilare orizontale si verticale, care permit utilizatorului sa parcurga intregul text continut in componenta.
Clasa TextArea are mai multi constructori dintre care mentionam: - TextArea() creaza o arie de text care nu contine nici un text, cu inaltimea si latimea nespecificate; - TextArea(String <text>) creaza o arie de text completata cu sirul de text, specificat in parametrul <text>, cu inaltimea si latimea nespecificate. Dintre metodele clasei TextArea, mai des folosite sunt: - void setText(String <text>), String getText(), void setEditable(boolean <b>), boolean isEditable() prezentate la clasa TextField; - void setRows (int <m>) stabileste numarul de linii ale ariei de text conform cu parametrul <m>;
- void setColumns (int <n>) stabileste numarul de coloane ale ariei de text conform cu parametrul <n>;
27/01/2013
14
- void insert(String <str>, int <poz>) insereaza textul <str> la pozitia <poz> din aria de text; - void replaceRange(String <str>, int <p>, int <u>) inlocuieste textul dintre pozitiile <p> si <u> cu testul <str>.
Swing permite unui program Java sa-si modifice aspectul si comportarea (look and feel) sub actiunea unui program sau chiar a utilizatorului. Astfel, Swing permite crearea unui program Java cu o interfata utilizator care foloseste stilul sistemului de operare nativ cum ar fi Windows sau Solaris sau un stil propriu Java, care a fost denumit Metal.
Componentele Swing sunt implementate in intregime in Java. Aceasta are ca rezultat o mai buna compatibilitate cu platforme diferite decat in cazul folosirii componentelor AWT. Toate componentele Swing fac parte din pachetul javax.swing.
27/01/2013 15
Pentru a fi afisate pe ecran, componentele grafice, ale unei aplicatii care foloseste o interfata Swing, trebuie plasate pe o suprafata de afisare, numit container radacina. Containerul radacina este reprezentat de una din clasele JFrame, JDialog sau JApplet.
27/01/2013 16
Vom face cateva consideratii asupra modului de folosire a clasei JFrame. Clasa JFrame este o extensie a clasei Frame si poate fi folosita intr-un mod asemanator, totusi, cu cateva deosebiri. Orice aplicatie Java cu interfata Swing contine cel putin un container radacina reprezentat de fereastra principala a programului, instanta a clasei JFrame. Un obiect care reprezinta o fereastra Swing contine o zona care este rezervata barei de meniuri si care este situata in partea sa superioara si corpul ferestrei pe care vor fi plasate componentele sale. Corpul ferestrei este o instanta a clasei Container ce poate fi obtinuta cu metoda getContentPane() (metoda a clasei JFrame). Plasarea si aranjarea componentelor pe suprafata ferestrei se va face folosind obiectul de tip Container si nu direct fereastra de tip JFrame. Spre deosebire de Frame, un obiect JFrame are un comportament implicit la inchiderea ferestrei, care consta in ascunderea ferestrei atunci cand utilizatorul apasa butonul de inchidere (din coltul dreapta sus). Acest comportament poate fi modificat prin apelarea metodei setDefaultCloseOperation() (metoda a clasei JFrame) care primeste ca parametru diverse constante ce se gasesc in clasa WindowConstants.
27/01/2013
17
Constantele folosite ca parametru pentru metoda setDefaultCloseOperation() sunt: -DO_NOTHING_ON_CLOSE (definita in WindowConstants) nu se intampla nimic, ci numai solicita programului sa trateze, in metoda windowClosing(), evenimentele interceptate cu un interceptor de tip WindowListener; -HIDE_ON_CLOSE (definita in WindowConstants) inchide automat fereastra dupa invocarea si interceptarea unui obiect de tip WindowListener; -EXIT_ON_CLOSE (definita in WindowConstants) termina aplicatia folosind metoda System.exit().
27/01/2013
18
.addContainerGap(148, Short.MAX_VALUE))
); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup() .addContainerGap(249, Short.MAX_VALUE) .add(jButton1) .add(28, 28, 28)) ); pack(); } // Variables declaration - do not modify private javax.swing.JButton jButton1; // End of variables declaration }
27/01/2013 20
Folosirea componentelor elementare Swing Deoarece clasa JComponent extinde clasa Container, ea mosteneste functionalitatea generala a containerelor si componentelor AWT, furnizand binenteles si o serie intreaga de noi facilitati.
- Stabilirea de secvente de taste de accelerare. O secventa de taste de accelerare (key accelerator), denumita si secventa de prescurtare (keyboard mnemonic), reprezinta o grupare de taste care poate fi folosita pentru a controla comportamentul unei componente a interfetei utilizator. Aceste taste permit folosirea unei aplicatii fara ajutorul mouse-ului. Toate componentele elementare AWT se regasesc si in Swing. In majoritatea cazurilor, constructorii componentelor Swing sunt similari constructorilor AWT. Toate clasele corespunzatoare componentelor elementare din AWT au acelasi nume in Swing dar precedat de litera J, cum ar fi: JButton, JTextField, JLabel, JTextArea etc. Casete de dialog standard pentru afisare de mesaje si introducere de date de la tastatura Clasa JOptionPane ofera mai multe metode care pot fi folosite pentru a crea casete de dialog standard: mici ferestre in care se afiseaza un scurt mesaj sau se introduc date de la tastatura. Casetele de dialog standard sunt de patru tipuri: - ConfirmDialog o caseta de dialog care pune o intrebare si contine trei butoane: Yes, No, Cancel; - InputDialog - o caseta de dialog care asteapta introducerea unui text;
27/01/2013 22
unde:
-<componenta_parinte> - specifica containerul care va fi considerat parintele casetei de dialog; aceasta informatie este folosita pentru a determina unde se va afisa pe ecran fereastra de dialog; daca se foloseste valoarea null pentru acest argument sau containerul nu este un obiect Frame, caseta de dialog va fi afisata in centrul ecranului. -<mesaj_afisat> - specifica sirul de text care va fi afisat in caseta; -<titlul_casetei> - specifica un sir de text care va fi afisat pe bara de titlu;
27/01/2013 23
-<buton_afisat> - specifica ce butoane vor fi afisate in caseta, pe baza constantelor: YES_NO_CANCEL_OPTION sau YES_NO_OPTION;
-<pictograma_afisata> - specifica tipul pictogramei afisata in caseta care determina tipul casetei de dialog, pe baza constantelor: ERROR_MESSAGE, INFORMATION_MESSAGE, PLAIN_MESSAGE, QUESTION_MESSAGE.
Metoda returneaza un intreg care reprezinta una din cele trei valori posibile: YES_OPTION, NO_OPTION, CANCEL_OPTION.
De exemplu: int raspuns = JOptionPane.showConfirmDialog(null, Pot sa adaug o inregistrare in fisierul dvs.); Crearea casetelor de dialog de intrare Crearea casetelor de dialog de intrare se realizeaza cu metoda: showInputDialog(<componenta_parinte>, <mesaj_afisat>, <titlu_casetei>, <pictograma_afisata>) Metoda returneaza un sir care reprezinta raspunsul utilizatorului.
27/01/2013
24
De exemplu:
27/01/2013
25