Sunteți pe pagina 1din 25

Cuvinte importante:

- 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

Realizarea unei interfete grafice folosind AWT


Pentru realizarea u nei interfete grafice utilizator pachetul java.awt dispune de urmatoarea ierarhie de clase: Object

Component (clasa abstracta)


Container Window Dialog ScrollPane Frame Panel Applet

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

Clasa Container face parte din pachetul java.awt.


Constructorul clasei este de forma: Container() Dintre metodele acestei clase mentionam:

- Component add(Component <comp>) introduce componenta <comp> in container;


- void remove(Component <comp>) elimina componenta <comp> din container;

- 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

Clasa Frame face parte din pachetul java.awt.

Dintre constructorii clasei mentionam:


- Frame() creaza o fereastra cu margini, titlu si bara de meniuri dar care nu are precizat nici un text in titlu; - Frame(String <titlu>) creaza o fereastra cu margini, titlu si bara de meniuri care are inscris in titlu textul dat de parametrul <titlu>. Prezentam o metoda a clasei Frame des intalnita: - void setTitle(String <titlu>) stabileste textul care apare in titlul ferestrei. - void pack() este mostenita de la clasa Window; metoda redimensioneaza fereastra la cea mai mica dimensiune posibila, tinand cont de dimensiunile curente ale componentelor sale, de modul de asezare a componentelor sale si de insertiile de margini sau intre componente stabilite; trebuie apelata dupa adaugarea tuturor componentelor pe suprafata ferestrei. Clasa Panel care face parte din pachetul java.awt are doi constructori: - Panel() - Panel(LayoutManager <lm>) stabileste modul de pozitionare al componentelor interfetei in panel, corespunzator parametrului <lm>.
27/01/2013 6

Notiuni de baza despre pozitionarea componentelor interfetei utilizator


Pentru a avea mai mult control asupra aspectului interfetei, programatorul care lucreaza cu AWT poate folosi administratorii de pozitionare (layout managers). Un administrator de dispunere determina modul cum vor fi aranjate (pozitionate) componentele adaugate intr-un container. Cativa dintre acesti administratori de pozitionare corespund claselor din urmatoarea ierarhie din pachetul java.awt: LayoutManager FlowLayout GridLayout LayoutManager2 (interfata) (clasa a superclasei Object) (clasa a superclasei Object) (interfata) (clasa a superclasei Object)

CardLayout

BorderLayout
GridBagLayout

(clasa a superclasei Object)


(clasa a superclasei Object)

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

Pozitionarea tabelara a componentelor

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.

Pozitionare tabelara neproportionata


Pozitionarea tabelara neproportionata (GridBagLayout) reprezinta o extensie a dispunerii tabelare. O pozitionare tabelara neproportionata difera de o dispunere tabelara simpla prin urmatoarele: - o componenta poate ocupa mai multe celule ale tabelului; - proportiile intre diferitele randuri sau coloane nu trebuie sa fie aceleasi; - componentele dispuse in cadrul celulelor pot fi aranjate in diferite moduri.
27/01/2013 9

Componente AWT elementare


Componentele elementare (numite si controale grafice) permit interactiunea cu utilizatorul si realizarea (prin modul lor de asezare si aspectul lor) unei interfete prietenoase in dialogul cu acesta. Componentele elementare pot fi adaugate containerelor. Fie C un container si comp o componenta elementara. Adaugarea lui comp in C se realizeaza astfel: - se creaza componenta comp; - se apeleaza metoda add(), declarata in clasa Container, pentru componenta comp: C.add(comp); Atunci cand se adauga o componenta intr-un container, nu se specifica coordonatele x, y ale locului unde va fi plasata aceasta. De aranjamentul componentelor se ocupa administratorul de dispunere (layout manager) care apartine containerului respectiv. Vom descrie cateva componente elementare mai des folosite: etichete (Label), butoane (Button), campuri de text (TextField) si zone de text (TextArea).
27/01/2013 10

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:

- Label() creaza o eticheta cu text vid;


- Label(String <text>) creaza o eticheta cu textul, specificat in parametrul <text>, aliniat la stanga. Dintre metodele clasei Label, mai des folosite sunt: - void setText(String <text>) scrie un text, specificat in parametrul <text>, pe eticheta; - String getText() returneaza textul asociat etichetei; - void setAlignment(int i) seteaza aliniere textului in eticheta (precizand pentru argument una din constantele clasei). Alinierea implicita este la stanga.

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>.

Dintre metodele clasei Button, mai des folosite sunt:


- void setLabel(String <eticheta>) scrie sirul de text, specificat in parametrul <eticheta>, pe buton; - String getLabel() returneaza eticheta inscrisa pe buton;

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>.

Realizarea unei interfete grafice folosind Swing


Tehnologia Swing face parte din proiect numit JFC (Java Foundation Classes) care pune la dispozitie, dezvoltatorilor de aplicatii Java o serie intreaga de facilitati pentru scrierea de aplicatii cu o interfata grafica mult imbunatatita functional si estetic fata de vechiul model AWT. Avantaje Swing

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

Proiectarea ferestrelor aplicatiei cu Swing


Modul de folosire a unei componente Swing nu este diferit de cel al folosirii componentelor AWT. Toate componentele Swing sunt subclase ale clasei JComponent. Object (din pachetul java.lang) Component (clasa abstracta, din pachetul java.awt)

Container (din pachetul java.awt)


Jcomponent (clasa abstracta, din pachetul javax.swing)

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().

Valoarea implicita este: HIDE_ON_CLOSE.


Daca se foloseste mediul de programare NetBeans, codul pentru apelul metodelor getContentPane si setDefaultCloseOperation se genereaza automat in metoda initComponents() a constructorului ferestrei de tip JFrame, ca in secventa de mai jos:

27/01/2013

18

public class TestInterfataSwing extends javax.swing.JFrame {

/** Creates new form TestInterfataSwing */


public TestInterfataSwing() { initComponents(); }

private void initComponents() {


jButton1 = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); jButton1.setText("Calcul Medie");

org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());


getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(161, 161, 161) .add(jButton1)
27/01/2013 19

.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.

Dintre facilitatile oferite de clasa Jcomponent mentionam:


-Asocierea de ToolTips (informatii ajutatoare dependente de context). Folosind metoda setToolTip() poate fi atasat unei componente un text cu explicatii legate de componenta respectiva. Cand utilizatorul trece cu mouse-ul deasupra componentei va fi afisat, pentru o perioada de timp, textul ajutator specificat. - Stabilirea de chenare. Orice componenta Swing poate avea unul sau mai multe chenare. Specificarea unui chenar se realizeaza cu metoda setBorder(). - Extinderea suportului pentru pozitionarea si dimensionarea componentelor. Folosind metodele setPreferredSize(), setMinimumSize(), setMaximumSize(), setAlignmentX(), setAlignmentY() pot fi controlati parametrii folositi de gestionarii de pozitionare pentru plasarea si dimensionarea automata a componentelor in cadrul unui container.
27/01/2013 21

- 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

- MessageDialog - o caseta de dialog care afiseaza un mesaj;

- OptionDialog - o caseta de dialog care cuprinde toate celelalte trei tipuri.


Pentru crearea uneia din cele patru tipuri de casete de dialog se foloseste metoda show<tip_caseta>() in care <tip_caseta> specifica unul din tipurile de casete prezentate mai sus. Crearea casetelor de dialog de confirmare Crearea casetelor de dialog de confirmare se realizeaza cu metoda: showConfirmDialog(<componenta_parinte>, <mesaj_afisat>, <titlu_casetei>, <buton_afisat>, <pictograma_afisata>)

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:

String raspuns = JOptionPane.showInputDialog(this, "Introduceti un numar", "Introducere de date", JOptionPane.INFORMATION_MESSAGE);

27/01/2013

25

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