View
264
Download
0
Category
Preview:
Citation preview
8/8/2019 Curs13 Java
1/25
15/09/2010 1
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 interfeteiutilizator: 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 componentelorelementare Swing.
8/8/2019 Curs13 Java
2/25
15/09/2010 2
Realizarea unei interfete grafice folosind AWT
Pentru realizarea u nei interfete grafice utilizator pachetul java.awtdispune de
urmatoarea ierarhie de clase:
Dialog
Clasa abstracta Component, aflata in radacina arborelui claselor din AWT, definesteinterfata general valabila pentru toate componentele grafice. Obiectele de tip
Componentse 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 tipDialog), fereastraAppletetc.
Object
Component (clasa abstracta)
Container
Window
Frame
ScrollPane Panel
Applet
Button Label TextComponent
TextArea TextField
8/8/2019 Curs13 Java
3/25
15/09/2010 3
Clasa Containereste 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 tipFrame) este o fereastra AWT cu margini, titlu si bara de
meniuri.
O fereastra de dialog (obiect de tipDialog) 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 tipPanel) este folosit pentru a grupa mai multe componente
elementare (butoane, casete de text etichete etc).
Un applet este (obiect de tipApplet) 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).
8/8/2019 Curs13 Java
4/25
15/09/2010 4
Vom descrie succint fiecare din componentele prezentate in ierarhia de clase AWT.
Clasa Component este o clasa abstracta care deriva din clasa Objectsi face parte din
pachetuljava.awt.
Dintre metodele acestei clase mentionam:
- void setVisible(boolean ) afiseaza o componenta daca parametrul
are valoarea true si face componenta invizibila daca parametrul este false;
- void requestFocus() prin care componenta curenta primeste focus-ul
(controlul asupra tastaturii) cu conditia ca ea sa fie vizibila;
- void setBackGround(Color ) stabileste culoarea fundalului
componentei conform cu parametrul ;
- void setForeGround(Color ) stabileste culoarea prim planuluicomponentei;
- void setFont(Font f) stabileste fontul pentru componenta.
8/8/2019 Curs13 Java
5/25
15/09/2010 5
Clasa Container face parte din pachetuljava.awt.
Constructorul clasei este de forma:
Container()
Dintre metodele acestei clase mentionam:
- Component add(Component ) introduce componenta in
container;
- void remove(Component ) elimina componenta dincontainer;
- void setLayout(LayoutManager ) stabileste modul de pozitionare al
componentelor interfetei in container, corespunzator parametrului . Vom reveni
la modalitatile de dispunere a componentelor interfetei mai tarziu in aceasta lectie;
- Insets getInsets() - determina distanta rezervata pentru marginilesuprafetei 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.
8/8/2019 Curs13 Java
6/25
15/09/2010 6
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 ) creaza o fereastra cu margini, titlu si bara de
meniuri care are inscris in titlu textul dat de parametrul .
Prezentam o metoda a clasei Frame des intalnita:
- void setTitle(String ) 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 ) stabileste modul de pozitionare al
componentelor interfetei in panel, corespunzator parametrului .
8/8/2019 Curs13 Java
7/25
15/09/2010 7
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 pachetuljava.awt:
LayoutManager (interfata)
FlowLayout (clasa a superclasei Object)
GridLayout (clasa a superclasei Object)
LayoutManager2 (interfata)
CardLayout (clasa a superclasei Object)
BorderLayout (clasa a superclasei Object)
GridBagLayout (clasa a superclasei Object)
8/8/2019 Curs13 Java
8/25
15/09/2010 8
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, folosindmetoda add(), componentele in container.
Vom descrie succint cativa dintre administratorii de pozitionare mai des folositi.
Pozitionarea secventiala a componentelor
FlowLayouteste 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.
8/8/2019 Curs13 Java
9/25
15/09/2010 9
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. Dupacompletarea 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 dedimensiuni 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.
8/8/2019 Curs13 Java
10/25
15/09/2010 10
Componente AWT elementare
Componentele elementare (numite si controale grafice) permit interactiunea cu
utilizatorul si realizarea (prin modul lor de asezare si aspectul lor) unei interfeteprietenoase in dialogul cu acesta.
Componentele elementare pot fi adaugate containerelor. Fie Cun container si comp
o componenta elementara. Adaugarea lui comp in Cse 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).
8/8/2019 Curs13 Java
11/25
15/09/201011
Etichete
Etichetele sunt create folosind clasaLabel. E.tichetele sunt texte care pot fi afisate pe
suprafata de afisare dar nu pot fi modificate de utilizator
ClasaLabelare urmatorii constructori:
- Label() creaza o eticheta cu text vid;
- Label(String ) creaza o eticheta cu textul, specificat in parametrul
, aliniat la stanga.
Dintre metodele claseiLabel, mai des folosite sunt:
- void setText(String ) scrie un text, specificat in parametrul ,
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.
8/8/2019 Curs13 Java
12/25
15/09/201012
Butoane
Butoanele sunt create folosind clasaButton. Butoanele sunt folosite intr-o interfata
pentru a declansa o anumita actiune.
ClasaButton are urmatorii constructori:
- Button() creaza un buton care nu contine nici un text pentru explicarea
functiei sale;
- Button(String ) creaza un buton pe care este afisat sirul de text,specificat in parametrul .
Dintre metodele claseiButton, mai des folosite sunt:
- void setLabel(String ) scrie sirul de text, specificat in
parametrul , pe buton;
- String getLabel() returneaza eticheta inscrisa pe buton;
8/8/2019 Curs13 Java
13/25
15/09/201013
Campuri si arii de text
Campurile si ariile de text sunt create folosind clasele TextFieldsi 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 TextFieldare mai multi constructori dintre care mentionam:
- TextField() creaza un camp de text care nu contine nici un text;
- TextField(String ) creaza un camp de text completat cu sirul de
text, specificat in parametrul .
Dintre metodele clasei TextField, mai des folosite sunt:
- void setText(String ) scrie sirul de text, specificat in parametrul
, in camp;
- String getText() returneaza textul continut de camp;
- void setEditable(boolean ) determina daca acel camp de text poate fimodificat. Un parametru cu valoarea false impiedica editarea campului, iar valoarea
true o permite (aceasta este prestabilita).
- boolean isEditable() returneaza o valoare de tip booleanprin care se
indica daca acel camp poate fi editat (true) sau nu (false).
8/8/2019 Curs13 Java
14/25
15/09/201014
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 ) creaza o arie de text completata cu sirul de text,
specificat in parametrul , cu inaltimea si latimea nespecificate.
Dintre metodele clasei TextArea, mai des folosite sunt:
- void setText(String ), String getText(), void setEditable(boolean
), boolean isEditable() prezentate la clasa TextField;
- void setRows (int ) stabileste numarul de linii ale ariei de text
conform cu parametrul ;
- void setColumns (int ) stabileste numarul de coloane ale ariei de text
conform cu parametrul ;
8/8/2019 Curs13 Java
15/25
15/09/201015
- void insert(String , int ) insereaza textul la pozitia
din aria de text;
- void replaceRange(String , int
, int ) inlocuieste textul dintre
pozitiile
si cu testul .
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.
8/8/2019 Curs13 Java
16/25
15/09/201016
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 claseiJComponent.
Object (din pachetuljava.lang)
Component (clasa abstracta, din pachetuljava.awt)
Container (din pachetuljava.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 claseleJFrame,JDialogsau
JApplet.
8/8/2019 Curs13 Java
17/25
15/09/201017
Vom face cateva consideratii asupra modului de folosire a clasei JFrame. Clasa
JFrame este o extensie a claseiFrame 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 claseiJFrame. 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 Containerce poate fiobtinuta cu metoda getContentPane() (metoda a clasei JFrame). Plasarea si aranjarea
componentelor pe suprafata ferestrei se va face folosind obiectul de tip Containersi
nu direct fereastra de tipJFrame.
Spre deosebire deFrame, un obiectJFrame 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 modificatprin apelarea metodei setDefaultCloseOperation() (metoda a claseiJFrame) care
primeste ca parametru diverse constante ce se gasesc in clasa WindowConstants.
8/8/2019 Curs13 Java
18/25
15/09/201018
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 folosindmetoda System.exit().
Valoarea implicita este: HIDE_ON_CLOSE.
Daca se foloseste mediul de programare NetBeans, codul pentru apelul
metodelorgetContentPane si setDefaultCloseOperation se genereaza automat
in metoda initComponents() a constructorului ferestrei de tip JFrame, ca insecventa de mai jos:
8/8/2019 Curs13 Java
19/25
15/09/2010 19
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)
8/8/2019 Curs13 Java
20/25
15/09/2010 20
.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 modifyprivate javax.swing.JButton jButton1;
// End of variables declaration
}
8/8/2019 Curs13 Java
21/25
15/09/2010 21
Folosirea componentelor elementare Swing
Deoarece clasaJComponentextinde 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.
8/8/2019 Curs13 Java
22/25
15/09/2010 22
- 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
ClasaJOptionPane 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;
8/8/2019 Curs13 Java
23/25
15/09/2010 23
- 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() in care specifica unul din tipurile de caseteprezentate mai sus.
Crearea casetelor de dialog de confirmare
Crearea casetelor de dialog de confirmare se realizeaza cu metoda:
showConfirmDialog(, , ,, )
unde:
- - 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 nullpentru acest argument sau
containerul nu este un obiectFrame, caseta de dialog va fi afisata in centrul
ecranului.
- - specifica sirul de text care va fi afisat in caseta;
- - specifica un sir de text care va fi afisat pe bara de titlu;
8/8/2019 Curs13 Java
24/25
15/09/2010 24
- - specifica ce butoane vor fi afisate in caseta, pe baza constantelor:
YES_NO_CANCEL_OPTION sau YES_NO_OPTION;
- - specifica tipul pictogramei afisata in caseta care determinatipul 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(, , ,
)
Metoda returneaza un sir care reprezinta raspunsul utilizatorului.
8/8/2019 Curs13 Java
25/25
15/09/2010 25
De exemplu:
String raspuns = JOptionPane.showInputDialog(this, "Introduceti un numar",
"Introducere de date", JOptionPane.INFORMATION_MESSAGE);
Recommended