Sunteți pe pagina 1din 38

INTERFEE GRAFICE

AWT (Abstract Windowing Toolkit)


- crearea unei aplicaii grafice presupune:

-Crearea unei suprafee de afiare (cum ar fi o fereastr) pe care vor


fi aezate obiectele grafice care servesc la comunicarea cu utilizatorul
(butoane, controale de editare, texte, etc);
-Crearea i aezarea obiectelor grafice pe suprafaa de afiare n
poziiile corespunztoare;
-Definirea unor aciuni care trebuie s se execute n momentul cnd
utilizatorul interacioneaz cu obiectele grafice ale aplicaiei;
-"Ascultarea" evenimentelor generate de obiecte n momentul
interactiunii cu utilizatorul i executarea aciunilor corespunztoare aa
cum au fost ele definite.

1
Componenta = orice obiect care are o reprezentare grafica ce poate fi afisata pe ecran si care poate interactiona cu
utilizatorul.

2
Suprafata pe care se aseaza obiectele grafice se numeste suprafata de afisare sau container si
reprezinta o instanta a unei clase obtinuta prin extensia superclasei Container. O parte din ierarhia a
carei radacina este Container este prezentata n figura de mai jos:

Component Superclas a tuturor componentelor non-meniu ce ofer suportul principal


pentru tratarea evenimentelor, schimbarea mrimii componentelor, controlul
fonturilor i culorilor, trasarea componentelor i a coninutului lor.

Container Este o component care conine alte componente i alte containere. Sunt
folosite pentru a construi ierarhii grafice pentru interfaa utilizator.

Panel Este un container pentru a mpacheta alte componente i panele pentru a


construi ierarhii de componente

Applet Este un panel specializat folosit pentru programe ce se execut ntr-un web
browser
Window Este un container ce reprezint o fereastr top level ce nu are titlu, meniu,
margini.
Frame Este o fereastr care poate fi (opional) mutat sau redimensionat, are bar de
titlu, un icon, meniuri

Dialog Este o fereastr independent, opional redimensionabil, ce poate avea un


titlu i margini. Poate fi modal (toate intrrile sunt direcionate spre ea pn
dispare).

3
import java.awt.*;
public class AFrame {
public static void main (String args[] ){
F f = new F("Exemplul 1");
f.setSize(300,100);
f.setVisible(true);
}
}
class F extends Frame{
F(String s) {
setTitle(s);
}
}

Executarea lui face ca pe ecran s apar:

Adaugarea unei componente

Clasa Container pune la dispozitie metoda add pentru adaugarea unei componente
pe o suprafata de afisare. O componenta nu poate apartine dect unui singur
container, ceea ce nseamna ca pentru a muta un obiect dintr-un container n altul
trebuie sa-l eliminam mai nti de pe containerul initial. Eliminarea unei componente
de pe un container se face cu metoda remove.
Frame f = new Frame("O fereastra");
Button b = new Button("OK");
f.add(b); //adauga butonul pe suprafata ferestrei

4
Un gestionar de pozitionare (layout manager) este un obiect care controleaza
dimensiunea si aranjarea (pozitia) componentelor unui container
Cei mai utilizati gestionari de pozitionare din pachetul java.awt sunt:

FlowLayout
BorderLayout
GridLayout
CardLayout
GridBagLayout

FlowLayout Aranjeaz componentele pe linii de la stnga la dreapta, de sus n


jos. Implicit pentru clasele Panel i Applet
GridLayout Plaseaz componentele ntr-o reea dreptunghiular, de la stnga
la dreapta n fiecare rnd, rndurile de sus n jos.
BorderLayout Pna la cinci componente se pot plasa n container n locaiile
specificate de direciile nord, sud, est, vest i centru. Implicit
pentru Window i subclasele ei
CardLayout Componentele sunt aezate ca nite cri, una deasupra alteia.
Doar cea de sus este vizibil.
GridBagLayout Este un LM flexibil i care se poate personaliza. Dispune
componentele ntr-o reea rectangular. O component poate
ocupa mai multe celule n reea.

Atasarea explicita a unui gestionar de pozitionare la un container se face cu


metoda setLayout a clasei Container.

Secventa de atasare a unui gestionar pentru un container este:

FlowLayout gestionar = new FlowLayout();


container.setLayout(gestionar);

sau:

container.setLayout(new FlowLayout());

5
1. Gestionarul de poziionare FlowLayout

Acest gestionar aeaz componentele pe suprafaa de afiare n flux


liniar, mai precis, componentele sunt adugate una dup alta pe linii, n
limita spaiului disponibil. In momentul cnd o component nu mai ncape
pe linia curent se trece la urmtoarea linie, de sus n jos.
Adugarea componentelor se face de la stnga la dreapta pe linie, iar
alinierea obiectelor n cadrul unei linii poate fi: la stnga, la dreapta,
centru. Implicit componentele sunt centrate pe fiecare linie, iar distanta
implicita ntre componente este de 5 uniti pe vertical i 5 pe orizontal.
Este gestionarul implicit al containerelor derivate din clasa Panel,deci i
al applet-urilor.

Constructori:
FlowLayout()
FlowLayout(int aliniere) aliniere n rnd (implicit centrat)
FlowLayout(int aliniere, int gapOrizontal, int gapVertical) spaiu ntre
componente (implicit 5 pixeli pe ambele direcii)

public static final int LEFT


public static final int CENTER
public static final int RIGHT

//Exemplu
import java.awt.*;
public class TestLayout {
public static void main(String args[]) {
Frame f = new Frame("Flow Layout");
f.setLayout(new FlowLayout());
Button b1 = new Button("Button 1");
Button b2 = new Button("2");
Button b3 = new Button("Button 3");
Button b4 = new Button("Long-Named Button 4");
Button b5 = new Button("Button 5");
f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5);
f.pack();
f.show();
}
}

6
Componentele ferestrei vor fi afisate astfel:

7
2. Gestionarul de poziionare BorderLayout

Gestionarul BorderLayout mparte suprafaa de afiare n cinci


regiuni, corespunztoare celor patru puncte cardinale i centrului. O
componenta poate fi plasata n oricare din aceste regiuni, dimensiunea
componentei fiind calculata astfel nct s ocupe ntreg de afiare oferit de
regiunea respectiv. Pentru a aduga mai multe obiecte grafice ntr-una din
cele cinci zone, ele trebuie grupate n prealabil ntr-un panel, care va fi
amplasat apoi n regiunea dorit.
La adugarea unei componente pe o suprafaa gestionat de
BorderLayout, metoda add va mai primi pe lng numele componentei i
zona n care aceasta va fi amplasat, acesta fiind specificat prin una din
constantele clasei BorderLayout: NORTH, SOUTH, EAST, WEST,
CENTER .
Este gestionarul implicit pentru toate containerele care descind din clasa
Window, deci este gestionarul implicit al ferestrelor Java.

BorderLayout()
BorderLayout(int gapOrizontal, gapVertical) gap implicit zero

Component add(Component c)
void add(Component c, Object constrangeri)

public static final String NORTH


public static final String SOUTH
public static final String EAST
public static final String WEST
public static final String CENTER - implicit

//Exemplu
import java.awt.*;
public class TestBorderLayout {
public static void main(String args[]) {
Frame f = new Frame("Border Layout");
f.setLayout(new BorderLayout());//poate sa lipseasca

f.add(new Button("Nord"), BorderLayout.NORTH);


f.add(new Button("Sud"), BorderLayout.SOUTH);
f.add(new Button("Est"), BorderLayout.EAST);

8
f.add(new Button("Vest"), BorderLayout.WEST);
f.add(new Button("Centru"), BorderLayout.CENTER);
f.pack();

f.show();
}
}
Cele cinci butoane ale ferestrei vor fi afisate astfel:

3. Gestionarul de pozitionare GridLayout


Gestionarul GridLayout organizeaz containerul ca un tabel cu
rnduri i coloane, componentele fiind plasate n csutele tabelului de la
stnga la dreapta ncepnd cu primul rnd. Csuele tabelului au
dimensiuni egale, iar o component poate ocupa doar o singur csu.
Numrul de linii i coloane poate fi specificat n constructorul
gestionarului, dar poate fi modificat i ulterior prin metodele setRows
i setCols. De asemenea, distana ntre componente pe orizontal i
distana ntre rndurile tabelului pot fi specificate n constructor sau
stabilite ulterior.
GridLayout() o linie cu oricte coloane
GridLayout(int linii, int coloane)
GridLayout(int linii, int coloane, int gapOrizontal, int gapVertical) gap
implicit este zero

9
//Exemplu
import java.awt.*;
public class TestGridLayout {
public static void main(String args[]) {
Frame f = new Frame("Grid Layout");
f.setLayout(new GridLayout(3, 2));

f.add(new Button("Button 1"));


f.add(new Button("2"));
f.add(new Button("Button 3"));
f.add(new Button("Button 4"));
f.add(new Button("Button 5"));
//f.add(new Button("6"));
f.pack();
f.show();
}
}

Cele sase butoane ale ferestrei vor fi pe trei rnduri si doua coloane astfel:

Redimensionarea ferestrei va determina redimensionarea tuturor componentelor.

4. Gestionarul de pozitionare CardLayout


Gestionarul CardLayout - trateaz componentele adugate pe
suprafaa ntr-o manier asemntoare cu cea a dispunerii crilor de joc
ntr-un pachet. Suprafaa de afiare poate fi asemnat cu pachetul de cri,
iar fiecare component este o carte din pachet. La un moment dat numai o
singura componenta este vizibil ("cea de deasupra").
Clasa dispune de metode prin care s poat fi afiat o anumit
component din pachet, sau s se poat parcurge secvenial pachetul.
CardLayout()
CardLayout(int gapOrizontal, int gapVertical) implicit zero

Adugarea de componente la container se face cu add();

CardLayout definete metode pentru tratarea componentelor:


void first(Container parent)
void next(Container parent)
void previous(Container parent)
void last(Container parent)

10
void show(Container parent, String name)

5. Gestionarul de pozitionare GridBagLayout

Suprafaa de afiare este considerat ca fiind un tabel, numrul de linii i


de coloane sunt determinate automat, n funcie de componentele
amplasate pe suprafaa de afiare. De asemenea, n funcie de
componentele gestionate, dimensiunile csuelor pot fi diferite, cu
singurele restricii ca pe aceeai linie csuele trebuie s aib aceeai
nlime, iar pe coloan trebuie s aib aceeai lime.

Pentru a specifica modul de afiare a unei componente, acesteia i este


asociat un obiect de tip GridBagConstraints, n care se specific
diferite proprieti ale componentei referitoare la regiunea sa de afiare i
la modul n care va fi plasat n aceast regiune.
Legtura dintre o component i un obiect GridBagConstraints se
realizeaz prin metode setConstraints:

GridBagLayout gridBag = new GridBagLayout();


container.setLayout(gridBag);
GridBagConstraints c = new GridBagConstraints();
...
//se specifica proprietatile referitoare la afiarea unei componente
gridBag.setConstraints(componenta, c);
container.add(componenta);
Etape pentru a-l folosi:
1. creare obiect GridBagLayout:
GridBagLayout gb = new GridBagLayout();
2. ataare LM la container:
container.setLayout(gb);
3. creare obiect de clas GridBagConstrains
GridBagConstrains gbc = new GridBagConstrains();
4. pentru fiecare component ce se adaug:
a. se completeaza obiectul GridBagConstrains
b. se adaug componenta specificnd obiectul GridBagConstrains:
11
container.add(new Checkbox(Fill, false), gbc)

Obiectul GridBagConstrains se poate refolosi:


GridBagConstrains()
GridBagConstrains(int gridx, int gridy, int gridwidth, int gridheight, double
weightx, double gridweighty, int anchor, int fill, Insets insets, int ipadx, int
ipady):
o gridx, gridy definete coloana i rndul pentru colul stnga-sus a
componentei. Implicit este GridBagConstrains.RELATIVE (relative la
componenta anterior adugat)
o gridwidth, gridheight specific numrul de celule ocupate de
component pe orizontal i pe vertical. Valoarea implicit este o
celul. GridBagConstrains.REMAINDER este pentru ultima
component.
o weightx, weighty pentru zona neocupat de component n celulele pe
care le ocup. Implicit zero.

Gruparea componentelor (Clasa Panel)

Plasarea componentelor direct pe suprafaa de afiare poate deveni


incomod n cazul n care avem multe obiecte grafice. Din acest motiv se
recomand gruparea obiectelor grafice nrudite ca funcii astfel nct,
indiferent de gestionarul de poziionare al suprafeei de afiare, ele se vor
gsi mpreun. Gruparea componentelor se face n panel-uri.
Un panel este cel mai simplu model de container. El nu are o
reprezentare vizibil, rolul su fiind de a oferi o suprafa de afiare pentru
componente grafice, inclusiv pentru alte panel-uri.

O aranjare eficient a componentelor unei ferestre:

gruparea componentelor "nfrite" n panel-uri;


aranjarea componentelor unui panel, prin specificarea unui
gestionar de poziionare corespunztor
aranjarea panel-urilor pe suprafaa ferestrei, prin specificarea
gestionarului de poziionare al ferestrei.

12
import java.awt.*;
public class AButon{
public static void main (String args[] ){
F f = new F("Exemplul 1");
f.setSize(500,300);
f.setVisible(true);
}
}
class F extends Frame{
F(String s) {
setTitle(s);
setLayout(new GridLayout(2,2));
Panel border=new Panel();
border.setLayout(new BorderLayout());
border.add("North",new Button("Nord"));
border.add("South",new Button("Sud"));
border.add("East",new Button("Est"));
border.add("West",new Button("Vest"));
add(border);
Panel flow=new Panel();
flow.setLayout(new FlowLayout());
flow.add(new Button("Buton 1"));
flow.add(new Button("Buton 2"));
flow.add(new Button("Buton 3"));
flow.add(new Button("Buton 4"));
add(flow);
Panel grid=new Panel();
grid.setLayout(new GridLayout(2,2));
grid.add(new Button("Buton 1"));
grid.add(new Button("Buton 2"));
grid.add(new Button("Buton 3"));
grid.add(new Button("Buton 4"));
add(grid);
add(new Button("Buton"));
}
}

13
Rezultatul rulrii este:

14
SCHEMA GENERAL DE LUCRU CU AWT

Modele de suprafa grafic (containere)

Principalele modele de suprafee grafice sunt cele asociate claselor din


urmtoarea ierarhie din pachetul java. awt:

Container
Window
Frame
Dialog
ScrollPane
Panel
Applet

Componente elementare

Componentele elementare (numite i controale grafice) permit


interaciunea cu utilizatorul.
Component
Button buton
Canvas suprafa de desenare
Checkbox csu de opiuni
Choice list de opiuni cu alegere unic
Label etichet
List list de opiuni cu alegere multipl
Scrollbar bar de defilare
TextComponent
TextArea arie de text
TextField cmp de text

Componentele elementare pot fi adugate containerelor. Fie C un container


i c o component elementar. Adugarea lui c n C se realizeaz prin:
C.add(c)
15
adic prin invocarea metodei add declarat n clasa Container prin:
Component add(Component c)
metod ce realizeaz adugarea componentei la sfritul containerului.

Evenimente
Un eveniment este produs de o actiune a utilizatorului asupra unei componente grafice
si reprezinta mecanismul prin care utilizatorul comunica efectiv cu programul.

Tratarea evenimentelor n Java este bazat pe modelul delegrii evenimentelor.


Elementele principale sunt:
Clase eveniment ce ncapsuleaz informaia despre diferite tipuri de
interaciuni cu utilizatorul
Obiecte ce genereaz evenimente, informeaz event listeners cnd acestea
apar i ofer informaii despre ele
Obiecte event listener ce sunt informate de o surs de evenimente cnd apar
acestea, pentru a trece la o anumit aciune.

Tratarea evenimentelor ntr-o aplicaie GUI, folosind modelul delegrii


evenimentelor, poate fi mprit n dou sarcini cnd se construiete aplicaia:
Setarea propagrii evenimentelor de la sursa lor la event listeners
Furnizarea aciunii ce trebuie efectuate n event listeners cnd se recepioneaz
evenimentul

16
n lucrul cu interfee grafice, o aciune asupra unei componente grafice
declaneaz un eveniment. Un eveniment este un obiect al unei clase
tipEvent din urmtoarea ierarhie de clase:

Object (din pachetul java.lang)


EventObject (din pachetul java. util)
AWTEvent (din pachetul java. awt)
tipEvent (din pachetul java.awt.event)

unde tip este tipul evenimentului.

Principalele tipuri de evenimente sunt:

tip Apare de exemplu la:


Action aciuni asupra unei componente elementare (buton etc.)
Adjustment aciuni asupra unei componente de tip Scrollbar
Component deplasri, redimensionri,ascunderi (componenta devine invizibil)
Container adugare, tergere
Focus obinerea/pierderea controlului asupra tastaturii
Item selecia sau deselecia de componente (liste, csue de opiuni,etc.)
Key apsarea sau eliberarea unei taste
Mouse clic, apsare, eliberare, ieire/intrare n component
MouseMotion micare, trre (drag)
Text modificarea textului din component
Window nchidere, minimizare/maximizare

17
Interfee i clase abstracte asociate evenimentelor

Fiecrui tip tip de eveniment i este asociat o interfa


tipListener n pachetul java.awt.event. Cu excepia tipurilor
Action, Adjustment, Item i Text, aceste interfee sunt
implementate n acelai pachet de clasele abstracte tipAdapter
corespunztoare; metodele din aceste clase nu sunt abstracte, dar prevd
aciunea nul.

EventListener (interfa din pachetul java.util)


tipListener (interfa din pachetul java.awt.Event)
tipAdapter (clas abstract din pachetul java.awt.Event)

Metodele din aceste interfee i clase sunt declarate prin:


public void nume-metod (tipEvent e)
i corespund cte unui "subeveniment" al evenimentului identificat prin tip.
De exemplu un eveniment de tipul MouseMotion, care corespunde generic
acionrii (cu mouse-ul) asupra unei componente, are ca subevenimente trrea,
apsarea, eliberarea mouse-ului, ca i intrarea i ieirea din component. Pentru
fiecare subeveniment este prevzut cte o metod n interfaa
MouseMotionListener i n clasa MouseMotionAdapter.

18
Fonturi

Pentru stabilirea fontului folosit n textele ce pot fi editate pe o


suprafa grafic, Java pune la dispoziie clasa Font din pachetul
java.awt:
public class Font extends Object

constructorul:
Font (String nume, int stil, int dim)
- nume este numele fontului;
- stil este stilul ales pentru font;
- dim este mrimea fontului.
Modul tipic de alegere a unui font este invocarea metodei setFont a
clasei Component:
public void setFont(Font f)
prin:
setFont(new Font(nume,stil,dim));

Culori

- culori pentru fundal i editare de texte sunt cuprinse n clasa Color din
pachetul java.awt:
public class Color extends Object
constante publice de lip Color:
white,lighGray,gray,darkGray,black,red,pink,orang,
yellow,green, magenta,cyan i blue
i metode:
public Color brighter()
public Color darker()
19
care creeaz o culoare mai deschis, respectiv mai nchis, dect cea care a
invocat metoda.
Clasa Component

Dintre metodele, toate publice, ale clasei Component din java.awt:


public abstract class Component
menionm urmtoarele:
void setName(String nume) -atribuie componentei numele nume;
String getName() -ntoarce numele componentei;
void setBackGround(Color c) -stabilete culoarea fundalului componentei;
void setForeground(Color c) -stabilete culoarea prim planului componentei
void setFont(Font f) -stabilete fontul pentru component;
void setLocation(int x,int y) -stabiletee poziia colului din stnga sus al
componentei.
Clasa Container

Clasa Container din pachetul java.awt:


public class Container extends Component
are constructorul:
Container ( ).

- metode publice ale clasei:

Component add(Component comp) -adaug componenta comp


containerului;

void remove(Component comp) -nltur componenta comp din


container;

void setLayoutLayoutManager g) -asociaz containerului gestionarul


poziionare g

void addContainerListener(ContainerListener c)
asociaz containerului gestionarul poziionare g;
void removeContainerListener(ContainerListener c)

20
obiectul c nceteaz de a mai fi gestionar de evenimente pentru container.

Clasa Frame
Clasa Frame - n pachetul java.awt:
public class Frame extends Window
constructorii:
Frame()
Frame(String titlu)
i metoda:
void setTitle(String titlu).

Clasa Panel
Clasa Panel din pachetul java.awt:
public class Panel extends Container
prevede constructorii:
Panel()
Panel(LayoutManager lm)
unde al doilea constructor asociaz panoului un gestionar de poziionare.

Etichete. Clasa Label


Clasa: public class Label extends Component
are constructorii:
Label() -construiete o etichet cu text vid;
Label(String text) -construiete o eticheta cu textul specificat, aliniat
la stnga i constantele publice ntregii RIGHT,CENTER i LEFT, prin
care se poate specifica plasarea etichetei.

Dintre metodele clasei Label:


public void setText(String text)
public String getText()
public void setAlignment(int i) -prin care este nscris un text pe
etichet, este ntors textul asociat etichetei, respectiv se specific alinierea
21
textului n eticheta (preciznd pentru argument una dintre constantele
clasei). Alinierea implicit este la stnga.

Butoane. Clasa Button


Clasa:
public class Button extends Component

Un clic pe un buton declaneaz un eveniment de tip ActionEvent.

Constructorii i cteva metode ale clasei Button, toate publice:


Button() -construiete un buton fr etichet;
Button(String label) -construiete un buton pe care este nscris
eticheta label;
String getLabel() -ntoarce eticheta nscrisa pe buton;
void setLabel(String label) -nscrie pe buton eticheta label.
Acionarea unui buton (prin clic cu mouse-ul) declaneaz un eveniment
de tipul Action.

Cmpuri i arii de text de text Clasele TextField i TextArea


Clasa:
public class TextComponent extends Component

este superclasa claselor TextField i TextArea.


Principalele metode publice ale clasei sunt:

void setText(String text) -seteaz textul afiat de component;


String getText () -ntoarce textul afiat de component;
void select(int p, int u) -selecteaz subtextul ce ncepe de pe poziia
p i se termin pe poziia u-1.Trebuie ca p<=u; dac p=u, atunci ntreg
textul este deselectat;
void selectAll() -selecteaz ntreg textul;
String getSelectdText() -ntoarce textul selectat;
int getSelectionStart() -ntoarce poziia de nceput a zonei
22
selectate;
int getSelectionEnd() -ntoarce poziia de sfrit a zonei
selectate;
Mai specificam c un subtext poate fi selectat i cu ajutorul mouse-ului.
Modificarea textului din component declaneaz un eveniment de tipul
Text.
Clasa:
public class TextField extends TextComponent

ofer faciliti de lucru cu cmpurile de text, ce permit editarea unei unice


linii de text.

Constructorii i cteva metode publice ale clasei:


TextField() -construiete un cmp de text;
TextField(String text) -construiete un cmp de text iniializat cu
text;
TextField(int col) -construiete un cmp de text cu col coloane;
TextField(String text,int col) -construiete un cmp de text cu
coloane, iniializat cu text;
void setText(String text) -nscrie textul text n cmp;

void addActionListener(ActionListener 1)
void removeActionListener(ActionListener l)

La acionarea unei taste n cmpul de text, va fi declanat un eveniment de


tipul Key. La apsarea tastei <Enter> este declanat un eveniment de tipul
Action.
Clasa:
public class TextArea extends TextComponent

ofer faciliti de lucru cu arii de text, care generalizeaz cmpurile de text


prin acceptarea mai multor linii de text. De fapt este vorba de un unic text,
n care tastarea lui <Enter> pe o poziie are ca efect trecerea la o linie nou,
conform noului caracter introdus. Putem ataa ariei o bar de defilare
orizontal, una vertical sau ambele aceste bare; utilitatea lor apare atunci
23
cnd textul de pe o linie este mai lung dect numrul de coloane stabilit
pentru arie, respectiv cnd numrul efectiv de linii este mai mare dect
numrul de linii stabilit pentru aria de text.
Clasa TextArea are cmpurile constante, publice i ntregi:
SCROLLBARS_NONE
SCROLLBARS_VERTICAL_ONLY
SCROLLBARS_HORIZONTAL_ONLY
SCROLLBARS_BOTH
prin care putem stabili sistemul de bare de defilare ales.
Constructorii clasei sunt:
public TextArea() -construiete o arie de text cu ambele bare de
defilare;

public TextArea(String text) -construiete o arie de text cu ambele bare


de defilare, n care este nscris textul text;

public TextArea(int m,int n) -construiete o arie de text cu ambele bare de


defilare, avnd m linii i n coloane;

public TextArea(String text,int m,int n) -construiete o arie de text cu


ambele bare de defilare, avnd m linii i n coloane i n care este nscris
textul text;

public TextArea(String text,int m,int n,int defilare) -n plus fa de


constructorul precedent, este specificat sistemul de bare de defilare ales;
defilare trebuie s fie una dintre cele 4 constante ale clasei.

Dintre metodele clasei TextArea:


void setRows(int n) -stabilete la m numrul de linii ale
ariei de text;
void setColumns(int n) -stabilete la n numrul de coloane
ale ariei de text;
void insert(String str,int poz) -insereaz textul str la poziia poz
din aria de text;

24
void append(String str) - adaug textul str ariei de text;
void replaceRange(String str,int p,int u) -nlocuiete textul dintre
poziiile p i u cu texlul str.

Csue de opiuni. Clasele Checkbox i CheckboxGroup

O csu de opiuni (checkbox) este o component simpl care poate fi


doar ntr-una dintre strile "selectat" sau "neselectat". Clasa de baz ce
permite lucrul cu asemenea csue este:

public class Checkbox extends Component

Clasa checkbox prevede constructorii:


public Checkbox() -creeaz o csu
de opiuni fr etichet ataat; starea casuei este neselectat;
public Checkbox(String et,boolean stare) - creeaz o csu
de opiuni cu eticheta et; starea csuei este dat de stare.

Dintre metodele clasei:


public void setLabel(String label) -care seteaz eticheta csuei.

O aciune asupra unei csue de opiuni declaneaz un eveniment de tipul


Item.

Clasa:
public class CheckboxGroup extends Object

ofer faciliti pentru gruparea mai multor csue de opiuni, ntr-un astfel
de grup, la orice moment de timp exact o csu este n starea "selectat".
Apsarea unei csue face ca ea s devin unic n starea "selectat".
Prezentm doar un constructor al clasei:
public CheckboxGroup()

25
Crearea i adugarea unei csue de opiuni la un grup se realizeaz
folosind urmtorul constructor al clasei checkBox:
public Checkbox(String et,CheckboxGroup grup,boolean stare)

Liste de opiuni cu alegere unic. Clasa Choice


Clasa:
public class Choice extends Component
permite crearea unei liste ce poate fi derulat (unui meniu "pop-up") de
elemente (item-uri). Elementele unei astfel de liste sunt iruri de caractere.
La fiecare moment de timp, doar unul dintre elementele din list este
selectat (de unde i numele de list de opiuni cu alegere unic); elementul
selectat apare n titlul listei. Selectarea se face prin clic cu mouse-ul pe
elementul vizat.
Constructorul:
public Choice() -creeaz un meniu pop-up pentru care prima
informaie ce va fi introdus este automat cea selectat.

Clasa pune la dispoziie mai multe metode publice, printre care:


int getItemCount() -ntoarce numrul de elemente din list;
String getItem(int index) -ntoarce elementul din list cu numrul de
ordine index;
void addItem(String item) -adaug un nou element listei;
void insert(String item,int index) -insereaz un nou element pe poziia
precizat;
void remove(String item) -terge din list prima apariie a
elementului item;
void remove(int poz) -terge din list elementul de pe
poziia poz;
void removeAll() - terge toate elementele listei;
String getSelectedItem() -ntoarce elementul selectat al listei;
int getSelectedlndex() -ntoarce poziia elementului
selectat.
O aciune asupra unei liste de opiuni cu alegere unic declaneaz un
eveniment de tipul Item.

26
In urmatorul exemplu s-a construit un cadru format din doua panouri:primul cuprinde 3 casute
de optiuni independente, iar al doilea cuprinde un grup de alte 3 casute de optiuni.

import java.awt.*;
public class ACheckbox {
public static void main (String args[] ){
F f = new F("Exemplul 1");
f.setSize(300,100);
f.setVisible(true);
}
}
class F extends Frame{
Checkbox checkbox[]=new Checkbox[6];
F(String s){
setTitle(s);
setLayout(new FlowLayout());
Panel panel1=new Panel();
Panel panel2=new Panel();
panel1.setLayout(new GridLayout(3,1));
panel2.setLayout(new GridLayout(3,1));
checkbox[0]=new Checkbox("unu");
checkbox[1]=new Checkbox("doi");
checkbox[2]=new Checkbox("trei");
CheckboxGroup group=new CheckboxGroup();
checkbox[3]=new Checkbox("four",group,false);
checkbox[4]=new Checkbox("five",group,false);
checkbox[5]=new Checkbox("six",group,false);
for (int i=0;i<3;i++) panel1.add(checkbox[i]);
for (int i=3;i<6;i++) panel2.add(checkbox[i]);
add(panel1);
add(panel2);
}
}

Rezultatul va arata in felul urmator:

27
Liste de opiuni cu alegere multipl. Clasa List
O list de opiuni cu alegere multipl permite selectarea a oricte
elemente (tot iruri de caractere, ca i n cazul listelor cu alegere unic) din
list. Selectarea /deselectarea se face n mod standard prin clic cu mouse-ul
pe elementul respectiv.
Clasa List este declarat prin:
public class List extends Component

constructor:
public List(int linii, boolean b)
-unde linii reprezint numrul iniial de elemente (linii) din list. La
invocare vom folosi totdeauna true pentru al doilea argument.

Dintre metodele (publice) ale clasei:


String getItem(int poz) -ntoarce elementul de pe linia poz;
String[] getItems() -ntoarce toate elementele listei;
add(String item) -adaug un element listei, la sfritul acesteia ;
void add(String item,int poz) -adaug un element listei, pe poziia
specificat;
void replaceltem(String newValue,int poz) -nlocuiete elementul
de pe poziia poz cu cel specificat;
void remove(String item) -terge din list primul
element cu informaia specificat;
void remove(int poz) -terge elementul din list de
pe poziia poz;
void removeAll() - terge toate elementele listei;
String[] getSelectedltems() -ntoarce toate elementele
selectate din list;
int getRows() -ntoarce numrul curent de
elemente din list.

O aciune asupra unei liste cu alegerea multipl declaneaz un eveniment


de tipurile Item sau Action.
28
In exemplul urmator este prezentat modul in carea apar o lista de optiuni cu alegere unica i o lista de optiuni
cu alegere multipla:

import java.awt.*;
public class AList {
public static void main (String args[] ){
F f = new F("Exemplul 1");
f.setSize(300,150);
f.setVisible(true);
}
}
class F extends Frame{
F(String s) {
setTitle(s);
setLayout(new FlowLayout());
Choice choice=new Choice();
List list=new List(3,true);
try {
choice.addItem("Unu");
choice.addItem("Doi");
choice.addItem("Trei");
choice.addItem("Patru");
} catch (NullPointerException ex) {}
add(choice);
list.addItem("Unu");
list.addItem("Doi");
list.addItem("Trei");
list.addItem("Patru");
add(list);
}
}
Executarea lui face ca pe ecran sa apara:

29
Bare de defilare. Clasa scrollbar

O bar de defilare (obiect de tipul Scrollbar) apare pe ecran ca o


bar orientat pe orizontal sau vertical, ce conine un cursor care se
deplaseaz de-a lungul barei (conform orientrii acesteia). Barei i este
asociat (de obicei prin constructor) un domeniu de valori ntregi
consecutive delimitate de valoarea minim p i de valoarea maxim u.
Cursorul are o lungime lung.

Clasa Scrollbar este declarat prin:


public class Scrollbar extends Component

Cmpurile clasei sunt constantele publice ntregi HORIZONTAL i


VERTICAL.

Principalul constructor al clasei este:


public Scrollbar(int o,int val,int lung,int p,int u)

care construiete o bar de defilare cu urmtoarele caracteristici:


-orientarea barei este dat de o, ce trebuie s fie unul dintre cmpurile
constante ale clasei;
-val este valoarea iniial a poziiei curente;
-lung este lungimea cursorului;
-p i u reprezint valorile minim i maxim din domeniul asociat barei.

Metode:
public int getValue() -ntoarce valoarea curent a barei de defilare;
public void setValue(int val)-seteaz valoarea selectat a barei de
defilare. Dac val<p, atunci val devine valoarea curent a lui p; analog,
daca val>u, atunci val devine valoarea curent a lui u.

30
Acionrile asupra unei bare de defilare declaneaz un eveniment de
tipul Adjustment. Gestionarul de evenimente corespunztor trebuie s
implementeze, respectiv extind, metoda adjustmentValueChanged fr
parametri a clasei AdjustmentListener.

Ferestre de dialog. Clasa Dialog

O fereastr de dialog poate avea ca proprietar un cadru sau o alt


fereastr de dialog. n cele mai multe cazuri, fereastra de dialog este
vizibil doar atta timp ct prin aciuni asupra componentelor sale
furnizm rspunsul dorit.
La declanarea evenimentului, avem posibilitatea de a putea aciona numai
asupra ferestrei de dialog sau i asupra proprietarului su. Cele dou tipuri
de dialog se numesc modal, respectiv nemodal.
Clasa Dialog este declarata prin:
public Class Dialog extends Windows
i are constructorii:
public Dialog(Frame p, String titlu, boolean modal)
public Dialog(Dialog p, String titlu, boolean modal)
unde p este proprietarul ferestrei de dialog, titlu este titlul ferestrei, iar prin
modal stabilim dac dialogul este sau nu modal.
Aciunile asupra unei ferestre de dialog declaneaz evenimente de
tipul Window.

Clasa FileDialog

Pachetul java.awt pune la dispozitie i un tip de fereastra de dialog


folosita pentru ncarcarea / salvarea fisierelor : clasa FileDialog, subclasa
directa a clasei Dialog. Instantele acestei clase au un comportament comun
dialogurilor de acest tip de pe majoritatea platformelor de lucru, dar forma
n care vor fi afisate este specifica platformei pe care ruleaza aplicatia.
Constructorii clasei sunt:
31
FileDialog(Frame parinte)
FileDialog(Frame parinte, String titlu)
FileDialog(Frame parinte, String titlu, boolean mod)
unde "parinte" reprezina o instanta ferestrei parinte, "titlu" reprezinta titlul
ferestrei iar prin argumentul "mod" specificam daca ncarcam sau salvam
un fisier; valorile pe care le poate lua acest argument sunt
FileDialog.LOAD (pentru ncarcare), respectiv FileDialog.SAVE (pentru
salvare).
//dialog pentru incarcarea unui fisier
new FileDialog(mainWin, "Alegere fisier", FileDialog.LOAD);
//dialog pentru salvarea unui fisier
new FileDialog(mainWin, "Salvare fisier", FileDialog.SAVE);

La crearea unui obiect FileDialog acesta nu este implicit vizibil. Daca


afiarea sa se face cu show caseta de dialog va fi modala. Daca afiarea se
face cu setVisible(true) va fi nemodala. Dupa selectarea unui fisier ea va fi
facuta automat invizibila.

Urmatorul exemplu prezinta modul in care apare un obiect de tipul FileDialog:

import java.awt.*;
import java.awt.event.*;
public class AFdialog {
public static void main (String args[] ){
F f = new F("Exemplul 1");
f.setSize(500,400);
f.setVisible(true);
}
}
class F extends Frame implements ActionListener{
FileDialog fdialog;
F(String s) {
setTitle(s);
MenuBar menubar=new MenuBar();
Menu file=new Menu("File");
Menu dialog=new Menu("Dialog");
MenuItem exit=new MenuItem("Exit");
MenuItem sh=new MenuItem("Show");
MenuItem hi=new MenuItem("Hide");
file.add("New");
file.add("Open");
32
file.add("Save");
file.add(exit);
dialog.add(sh);
dialog .add(hi);
menubar.add(file);
menubar.add(dialog);
setMenuBar(menubar);
exit.addActionListener(this);
sh.addActionListener(this);
hi.addActionListener(this);
fdialog=new FileDialog(this,"File Dialog Box");
}
public void actionPerformed(ActionEvent e){
if (e.getSource() instanceof MenuItem){
if (e.getActionCommand().equals("Exit")){
System.exit(0);}
if (e.getActionCommand().equals("Show")){
fdialog.show();}
}
}
}

In urma executiei vom obtine:

In exemplul de mai sus am folosit i un meniu;in continuare vom vorbi despre meniuri.

33
Folosirea meniurilor

Spre deosebire de celelate obiecte grafice, care deriva din clasa


Component, componentele unui meniu reprezinta instante ale unor clase
derivate din superclasa abstracta MenuComponent.
Meniurile sunt grupate n doua categorii:
-Meniuri fixe (vizibile permanent): sunt grupate ntr-o bara de
meniuri ce contine cte un meniu pentru fiecare intrare a sa; la rndul lor
aceste meniuri contin articole ce pot fi selectate, comutatoare - care au
doua stari (checkbox) sau alte meniuri (submeniuri). O fereastra poate avea
un singur meniu fix.
-Meniuri de context (popup): sunt meniuri invizbile asociate unei
ferestre i care se activeaza prin apasarea butonul drept al mouse-ului.
Diferenta fata de meniurile fixe consta n faptul ca meniurile de context nu
au bara de meniuri.

Pentru a putea contine un meniu o componenta trebuie sa implementez


interfata MenuContainer. Cel mai adesea meniurile sunt atasate ferestrelor,
mai precis obiectelor de tip Frame, aceste implementnd interfata
MenuContainer. Atasarea unei bare de meniuri la o fereastra se face prin
metoda addMenuBar a clasei Frame.

Clasa MenuComponent

Este o clasa abstracta, din care sunt extinse toate celelalte clase
folosite pentru lucrul cu meniuri.
Clasa MenuComponent contine metode de ordin general, dintre care:
getName, setName, getFont, setFont.

Clasa MenuBar

Permite crearea barelor de meniuri asociate unei ferestre cadru


(Frame). Aceasta clasa adapteaza conceptul de bara de meniuri la

34
platforma curenta de lucru. Pentru a lega bara de meniuri la o anumita
fereastra trebuie apelata metoda setMenuBar din clasa Frame.

Crearea unei bare de meniuri i legarea ei de o fereastra se realizeaza


astfel:
//creez bara de meniuri
MenuBar mb = new MenuBar();
//adaug meniurile derulante la bara de meniuri
...
//atasez unei ferestre bara de meniuri
Frame f = new Frame("Fereastra cu meniu");
f.addMenuBar(mb);

Clasa MenuItem

Orice articol al unui meniu trebuie sa fie o instanta a clasei


MenuItem. O instanta a clasei MenuItem reprezinta de fapt o eticheta ce
descrie numele cu care va aparea articolul n meniu, nsotita eventual de un
accelerator (obiect de tip MenuShortcut) ce reprezinta combinatia de taste
cu care articolul poate fi apelat rapid .
Exemplu cu meniu:

import java.awt.*;
import java.awt.event.*;
public class AMenu {
public static void main (String args[] ){
F f = new F("Exemplul 1");
f.setSize(300,300);
f.setVisible(true);
}
}

class F extends Frame implements ActionListener{


F(String s) {
setTitle(s);
MenuBar menubar=new MenuBar();
Menu file=new Menu("File");
Menu edit=new Menu("Edit");
Menu view=new Menu("View");
MenuItem exit=new MenuItem("Exit");
file.add("New");

35
file.add("Open");
file.add("Save");
file.add(exit);
edit.add("Copy");
edit.add("Cut");
edit.add("Paste");
view.add("Zoom");
menubar.add(file);
menubar.add(edit);
menubar.add(view);
setMenuBar(menubar);
exit.addActionListener(this);
}
public void actionPerformed(ActionEvent e){
if (e.getSource() instanceof MenuItem){
if (e.getActionCommand().equals("Exit")){
System.exit(0);}
}
}
}

In urma rularii se va obtine:

Suprafete de desenare - clasa Canvas

In afara posibilitatii de a utiliza componente grafice standard, Java


ofera i posibilitatea controlului la nivel de punct (pixel) pe dispozitivul
grafic, respectiv desenarea a diferite forme grafice direct pe suprafaa unei
componente.
In Java a fost definit un tip special de componenta numita Canvas
(pnza de pictor), a carui scop este de a fi extinsa pentru a implementa
obiecte grafice cu o anumita nfatisare.
Clasa Canvas este o clasa generica din care se deriveaza subclase pentru
crearea suprafetelor de desenare (planse). Plansele nu pot contine alte
36
componente grafice, ele fiind utilizate doar ca suprafete de desenat sau ca
fundal pentru animatie. Desenarea pe o plansa se face prin supradefinirea
metodei paint.
O plan, prin redefinirea metodelor getMinimumSize,
getMaximumSize, getPreferredSize i specific dimensiunile.
Etapele care trebuie parcurse pentru crearea unui desen, sau mai bine zis, a
unui obiect grafic cu o anumita nfatisare sunt:
crearea unei planse de desenare, adica o subclasa a clasei Canvas ;
redefinirea metodei paint din clasa respectiva ;
redefinirea metodelor getMinimumSize, getMaximumSize,
getPreferredSize ;
desenarea efectiva a componentei n cadrul metodei paint ;
adugarea plansei la un container cu metoda add;
interceptarea evenimentelor de tip FocusEvent, KeyEvent,
MouseEvent, ComponentEvent i tratarea lor (daca este cazul).

Definirea generica a unei planse are urmatorul format:

class Plansa extends Canvas {


public void paint(Graphics g) {
...
//desenarea
}
public Dimension getMinimumSize() {
return . . .
}
public Dimension getMaximumSize() {
return . . .
}
public Dimension getPreferredSize() {
return . . .;
}

Pentru clasa Canvas prezentam doar urmatoarele elemente:

public class Canvas extends Component


37
public Canvas()
public paint(Graphics g)

Cu mentiunea ca invocarea metodei paint pune la dispozitie contextul de


desenare standard g.

Prezentam in continuare cateva elemente legate de clasa Graphics.


class Graphics extends Object
Color getColor()
void SetColor(Color c)
Font getFont()
void setFont(Font f)
void drawLine (int x1,int y1,int x2,int y2)
traseaza un segment intre punctele de coordonate (x1,y1) i (x2,y2)
void drawPollyline (int[] x,int[] y,int n)
este trasata o linie poligonala ce trece, in ordine, prin n puncte ale caror
coordonate sunt specificate intablourile x i y.
void drawRect (int x,int y,int w,int h)
este trasat un dreptunghi, cu coltul din stanga sus de coordonate (x,y) i
inaltimea i latimea de h, respectiv w.
void fillRect (int x,int y,int w,int h)
un dreptunghi specificat ca mai sus este umplut cu culoarea curenta.
void drawOval (int x,int y,int w,int h)
este trasata o elipsa tangenta la laturile dreptunghiului precizat.
void fillOval (int x,int y,int w,int h)
este umpluta o elipsa tangenta la laturile dreptunghiului precizat.

38

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