Sunteți pe pagina 1din 35

Curs 6 - Java

UTILIZAREA CLASELOR LEGATE DE


GRAFICA, FONTURI SI CULORI
Curs 6 - Java

DESENAREA FORMELOR-CONTUR SI UMPLEREA

➢ LINIE

Metoda drawLine() este folosita pentru a desena o linie intre doua puncte.
Metoda primeste patru argumente: coordonatele x, y ale punctului de
inceput si coordonatele x, y ale punctului final:

drawLine (x1, y1, x2, y2);


Curs 6 - Java

DESENAREA FORMELOR-CONTUR SI UMPLEREA

➢ DREPTUNGHIURI

Clasa Graphics contine metode pentru doua tipuri de dreptunghiuri: normale si cu


colturile rotunjite.
Ambele tipuri de dreptunghiuri pot fi desenate sub forma de contur sau umplute cu
culoarea curenta.
Pentru a desena un dreptunghi normal se foloseste metoda drawRect() pentru
contururi si fillRect() pentru forme umplute.

Ambele metode preiau patru argumente:


- coordonatele x si y ale coltului din stanga-sus al dreptunghiului
- latimea dreptunghiului
- inaltimea dreptunghiului
Curs 6 - Java

DESENAREA FORMELOR-CONTUR SI UMPLEREA

➢ DREPTUNGHIURI

Dreptunghiurile cu colturile rotunjite se deseneaza cu ajutorul metodelor


drawRoundRect() si fillRoundRect(). Acestea preiau aceleasi patru argumente
pentru dreptunghiuri normale plus inca doua argumente suplimentare care definesc
latimea si inaltime zonei unde se rotunjesc colturile. Cu cat aceasta zona este mai
mare cu atat mai rotunjite sunt colturile. Daca aceste argumente sunt suficient de
mari dreptunghiul poate deveni chiar un cerc sau un oval.

Ex.
ecran.drawRoundRect(182,61,43,24,10,8);

Rezultatul acestei instructiuni este desenarea unui dreptunghi rotunjit cu o latime de


43 de pixeli si o inaltime de 24 de pixeli. Zona dreptunghiulara pentru fiecare colt
rotunjit este de 10 pixeli latime si 8 inaltime.
Curs 6 - Java

DESENAREA FORMELOR-CONTUR SI UMPLEREA

➢ POLIGOANE

Poligoanele se realizeaza cu metodele drawPolygon() si fillPolygon().


(import java.awt.Polygon;)

Pentru a realiza desenarea avem nevoie de coordonatele x si y ale fiecarui punct care
defineste colturile poligonului. Poligoanele pot fi definite ca o serie de linii
interconectate. Cea mai buna solutie pentru specificarea coordonatelor este:

- o pereche de tablouri de intregi, dintre care unul pastreaza valorile coordonatei x si


celalalt pastreaza toate valorile coordonatei y
- un obiect Polygon creat folosind un tablou cu valori intregi ale coordonatei x si un
tablou cu valori intregi ale coordonatei y
Curs 6 - Java

DESENAREA FORMELOR-CONTUR SI UMPLEREA

➢ POLIGOANE

Metoda este foarte flexibila, permitand adaugarea individuala a punctelor unui


poligon inainte de desenarea sa.
In afara de coordonatele x si y trebuie sa specificam si numarul de puncte al
poligonului. Nu se pot specifica mai multe coordonate x, y decat numarul de puncte
si nici invers. In oricare din aceste cazuri compilatorul va semnala eroare.

Ex.
Polygon polig=new Polygon();

int x[]={10,20,30,40,50};
int y[]={15,25,35,45,55};
int puncte=x.length;
Polygon polig=new Polygon(x,y,puncte);
Curs 6 - Java

DESENAREA FORMELOR-CONTUR SI UMPLEREA

➢ POLIGOANE

Dupa crearea obiectului Polygon se pot adauga puncte folosind metoda addPoint().
Aceasta preia ca argumente coordonatele x si y si adauga punctul in poligon:

polig.addPoint(60,65);

Atunci cand obiectul poligon are toate punctele el poate fi desenat folosind una
dintre metodele drawPoliyon() sau fillPolygon(). Aceste metode au drept unic
argument obiectul de tip Polygon:

ecran.drawPolygon(polig);
Curs 6 - Java

DESENAREA FORMELOR-CONTUR SI UMPLEREA

➢ OVALE

Metodele drawOval() si fillOval() sunt utilizate pentru a desena cercuri si ovale.


Metodele preiau patru argumente:
- coordonatele x si y ale ovalului
- latimea si inaltimea ovalului - care in cazul cercurilor iau valori egale

Coordonate x si y pe care le primesc aceste metode se refera de fapt la punctul din


stanga-sus al zonei in care va fi desenat ovalul, aflandu-se de fapt la stanga si mai sus
decat forma geometrica propriu-zisa.

Ex.
ecran.fillOval(235,140,15,15);
Curs 6 - Java

DESENAREA FORMELOR-CONTUR SI UMPLEREA

➢ ARCE DE CERC

Desenarea arcelor de cerc este o operatie ceva mai complexa; un arc este parte a
unui oval, fiind implementat de fapt ca parte a unui oval partial desenat.
Arcele sunt folosite cu ajutorul metodelor drawArc() si fillArc(), care preiau sase
argumente:
- coordonatele x si y ale ovalului din care face parte arcul
- latime si inaltime acestui oval
- unghiul de unde incepe trasarea arcului
- numarul de grade al arcului

Unghiul de inceput al arcului ia valori intre 0 si 359 de grade si creste in sens


trigonometric (invers acelor de ceas). Pe un cerc de forma unui ceas putem vedea 0
grade in dreptul orei 3, 90 de grade la ora 12, 180 de grade la ora 9 si 270 de grade la
ora 6.
Numarul de grade pe care se intinde arcul ia valori de la 0 la 359 tot in sens contrar
acelor de ceas sau de la 0 la -359 in sensul acelor de ceas.
Curs 6 - Java

DESENAREA FORMELOR-CONTUR SI UMPLEREA

➢ ARCE DE CERC

Arcele umplute sunt desenate ca si cand ar fi “felii” dar, in loc sa se uneasca direct
cele doua puncte terminale acestea sunt unite prin intermediul centrului formei
eliptice (ovalului).
Ex.
ecran.fillArc(20,25,300,150,-90,-180);

Aceasta instructiune deseneaza un arc oval cu coordonatele 20 si 25, o latime de 300


pixeli si o inaltime de 150 pixeli. Arcul incepe la valoarea de -90 grade si se intinde pe
o distanta de 180 de grade in sensul acelor de ceas, aparand pe ecran sub forma
unei “felii”.
Curs 6 - Java

OPERATIUNI ADIACENTE

➢ COPIEREA SI STERGEREA

copyArea() - copiaza o regiune dreptunghiulara a ferestrei intr-o alta regiune a ferestrei


clearRect() - “sterge” o regiune dreptunghiulara din fereastra appletului

copyArea() preia sase argumente:


- coordonatele x si y ale regiunii de copiat
- latimea si inaltimea regiunii
- distanta pe orizontala si verticala - in pixeli - cu care se deplaseaza copia fata de
regiunea initiala, inainte de afisare

Metoda clearRect() preia aceleasi patru argumente ca si metoda drawRect() sau


fillRect(), umpland regiunea dreptunghiulara astfel creata cu culoarea curenta de
fundal a appletului.
Curs 6 - Java

OPERATIUNI ADIACENTE

Daca dorim sa stergem intreaga fereastra applet putem determina mai intai
dimensiunea ferestrei folosind metoda getSize(). Aceasta returneaza un obiect
Dimension, care poseda variabilele width si height; acestea reprezinta dimensiunile
appletului.

Ex.
ecran.clearRect (0, 0, getSize().width, getSize().height);

In versiunile mai vechi de Java se putea folosi si size(), ea fiind de fapt inlocuita cu
getSize(), care functioneaza identic. In cazul in care utilizam size() vom primi un mesaj
de avertizare de la compilator, aceasta fiind considerata “deprecated”.
Curs 6 - Java

➢ TEXT SI FONTURI

Obiectele clasei java.awt.Font sunt folosite pentru a putea utiliza metoda drawString()
cu diferite tipuri de caractere.

CREAREA OBIECTELOR FONT


Un astfel de obiect se creaza prin apelarea constructorului sau cu trei argumente:
- numele fontului
- stilul fontului
- dimensiunea in puncte a fontului

Stilul de font poate avea trei valori apelate folosind constantele Font.PLAIN, Font.BOLD
si Font.ITALIC. Aceste constante pot fi insumate pentru a obtine o combinatie de
efecte.

Ex.
Font f=new Font("Dialog",Font.BOLD+Font.ITALIC,24);
Curs 6 - Java

➢ DESENAREA CARACTERELOR SI SIRURILOR

Pentru a stabili fontul folosit in applet se utilizeaza metoda setFont() a clasei Graphics,
impreuna cu un obiect Font:

Ex.

public void paint(Graphics ecran) {


Font f=new Font("Verdana",Font.PLAIN,72);
ecran.setFont(f);
ecran.drawString("Text de afisat cu Verdana",10,100);}
Curs 6 - Java

➢ AFLAREA DE INFORMATII DESPRE FONT

Clasa FontMetrics poate fi folosita pentru a afla informatii detaliate despre fontul
curent, cum ar fi latimea sau inaltimea caracterelor pe care le poate afisa.
Pentru a folosi metodele acestei clase, trebuie mai intai creat un obiect FontMetrics
prin metoda getFontMetrics(). Aceasta metoda primeste un singur argument: un
obiect Font.
Un obiect FontMetrics poate apela mai multe metode:
- stringWidth(String) - intoarce latimea totala a sirului, in pixeli
- charWidth(char) - intoarce latimea unui caracter dat
- getHeight() - intoarce inaltimea totala a fontului

Ex.
Font f=new Font("Calibri",Font.BOLD,18);
FontMetrics fm=getFontMetrics(f);
Curs 6 - Java

➢ CULORI

Clasele Color si ColorSpace din pachetul java.awt pot fi folosite pentru a aduce culoare
in appleturi si aplicatii.
In mod prestabilit Java foloseste culorile conform sistemului RGB. Fiecare dintre cele
trei componente poate fi reprezentata cu un intreg din gama 0 - 255. Combinatia 0,0,0
reprezinta negru.
Putem specifica o combinatie RGB si prin trei valori in virgula mobila, in gama 0 - 1.

Ex.
Color c1=new Color(0.807F,1F,0F);
Color c2=new Color(255,204,102);
Curs 6 - Java

➢ TESTAREA SI STABILIREA CULORILOR CURENTE

Culoarea curenta pentru desenare este desemnata folosind metoda setColor() a clasei
Graphics. Aceasta metoda trebuie apelata pentru obiectul Graphics care reprezinta
zona in care desenam. Intr-un applet acest obiect este cel transmis metodei paint().

O modalitate de a stabili culoarea de desenare este folosirea uneia dintre culorile


standard disponibile ca variabila de clasa in clasa Color. Aceste culori folosesc
urmatoarele variabile Color:
- black, blue, cyan, darkGray, gray, green, lightGray, magenta, orange, pink, red,
white, yellow.
Incepand cu Java 1.4, aceste culori sunt acceptate (si recomandate) sub forma cu
majuscule: Color.RED

Ex.
ecran.setColor(Color.PINK); // merge la fel si cu Color.pink
Color culoareamea=new Color(255,204,102);
ecran.setColor(culoareamea);
Curs 6 - Java

➢ TESTAREA SI STABILIREA CULORILOR CURENTE

Putem stabili culoarea de fundal intr-o fereastra applet folosind metodele


setBackground() si setForeground().

Metoda setBackground() seteaza culoare de fundal primind ca argument un obiect


Color. Metoda setForeground() functioneaza la fel ca metoda setColor, dar schimba
culoarea unei componente a interfetei grafice - ca de exemplu un buton sau o fereastra.
Datorita faptului ca un applet este o fereastra putem folosi setForeground() in metoda
init() pentru a seta culorile pentru operatiile de desenare. Aceasta culoare va fi folosita
pana la alegerea unei alte culori cu una dintre metodele setForeground() sau setColor().

Daca vrem sa aflam care este culoarea curenta putem folosi metoda getColor() pentru
un obiect grafic, respectiv una dintre metodele getForeground() sau getBackground()
pentru clasa Applet.

Ex. se stabileste culoarea curenta pentru ecran - un obiect Graphics - ca fiind aceeasi cu
fundalul appletului:
ecran.setColor(getBackground());
Curs 6 – Java

OPERATII GRAFICE DE BAZA


FOLOSIND JAVA2D
Curs 6 - Java

DESENAREA FORMELOR-CONTUR SI UMPLEREA

➢ Clasele Java2D extind facilitatile claselor grafice din java.awt, cum sunt cele pe
care le-am vazut anterior. Ele nu inlocuiesc clasele existente ci doar aduc
posibilitati suplimentare noi.

Functiile Java2D contin printre altele:


- metode speciale de umplere cu degradeuri si texturi
- tuse care definesc grosime si stilul desenului
- posibilitati de “netezire” a marginilor obiectelor desenate (anti-aliasing)

Operatiile de desenare de pana acum sunt apelate pentru obiecte Graphics ce


reprezinta zona in care desenam; pentru Java2D acest obiect trebuie folosit pentru
a crea un nou obiect Graphics2D, ca in urmatoarea metoda paint():

public void paint(Graphics ecran) {


Graphics2D ecran2D=(Graphics2D)ecran;
}
Curs 6 - Java

COLORAREA JAVA2D

➢ Desenele care nu sunt 2D pot selecta un singur atribut: culoarea. 2D ofera o


gama mai larga de atribute de culoare, grosimea liniei, modelul de umplere,
transparenta si altele.

➢ Culorile sunt specificate folosind metoda setColor(), care functioneaza la fel cu


metoda Graphics cu acelasi nume - diferenta constand in obiectul argument care
acum este de tip Graphics2D.
Curs 6 - Java

MODELE DE UMPLERE

➢ Texturile sau modelele de umplere, definesc modul cum este “umplut” un


obiect. In Java2D putem folosi o culoare solida, un degrade, o textura sau un
model oarecare

➢ Un model de umplere este definit prin folosirea metodei setPaint() a clasei


Graphics2D, avand ca argument un obiect Paint. Interfata Paint este
implementata de fiecare clasa care poate juca rolul unui model de umplere - ca
de exemplu GradientPaint, TexturePaint sau Color.

GradientPaint(x1,y1,culoare1,x2,y2,culoare2);

Punctul x1,y1 este punctul de unde incepe culoare culoare1 iar x2,y2 este punctul
unde se termina trecerea la culoare2.

Pentru a implementa un degrade ciclic introducem un argument suplimentar:


GradientPaint(x1,y1,culoare1,x2,y2,culoare2,true);
Curs 6 - Java

MODELE DE UMPLERE

Dupa ce am definit un obiect GradientPaint il vom declara atribut curent de


desenare cu setPaint():

GradientPaint model=new GradientPaint(0f,0f,Color.white,100f,45f,Color.blue);


ecran2D.setPaint(model);

Toate operatiile de desenare care vor urma pentru obiectul ecran2D vor folosi acest
model de umplere.
Curs 6 - Java

MODELE DE UMPLERE

Exemplu de utilizare a unui obiect TexturePaint. BufferedImage face parte din


pachetul java.awt.image, File din java.io iar ImageIO din javax.imageio si preia
standard fisiere grafice in formatele jpeg, png, bmp, gif, wbmp):

BufferedImage imagine = ImageIO.read(new File(“c:\\poze\\imagine.png"));


TexturePaint textura=new TexturePaint(imagine, new Rectangle(0,0,100,100));
ecran2D.setPaint(textura);

Toate operatiile de desenare care vor urma pentru obiectul ecran2D vor folosi acest
model de umplere prin textura.
Curs 6 - Java

TUSE DE DESEN

Liniile desenate in operatiile non-Java2D au grosimea standard de 1 pixel. Java2D da


posibilitatea de a modifica grosimea liniei de desenare cu metoda setStroke()
pentru un obiect BasicStroke.

Un constructor BasicStroke poate prelua trei argumente:


- o valoare float pentru grosimea liniei, valoarea implicita fiind 1.0
- o valoare int care determina stilul terminatiei liniei
- o valoare int care determina stilul imbinarii intre doua segmente de linie

Ex.
BasicStroke tusa = new BasicStroke(2.0f);

ecran.setStroke(new BasicStroke(3.0f));
Curs 6 - Java

TUSE DE DESEN

Stilurile posibile pentru terminatii sunt CAP_BUTT (fara terminatie), CAP_ROUND


(pentru terminatii circulare) si CAP_SQUARE (pentru terminatii rectangulare).
Diferenta intre primul si ultimul stil este foarte mica, o linie cu CAP_SQUARE fiind
mai lunga, datorita terminatiei de forma dreptunghiulara.
Curs 6 - Java

TUSE DE DESEN

Stilurile de imbinare sunt JOIN_MITER (pentru imbinarea prin prelungirea muchiilor


exterioare), JOIN_ROUND (pentru imbinarea rotunjita) si JOIN_BEVEL (pentru o
imbinare tesita).
Curs 6 - Java

CREAREA OBIECTELOR CE VOR FI DESENATE

Desenarea obiectelor in Java2D se face prin definirea lor ca forme geometrice,


folosind clasele pachetului java.awt.geom. Putem desena toate formele intalnite
pana acum - linii, dreptunghiuri, ovale, arce si poligoane.

Clasa Graphics2D nu poseda metode diferite pentru desenarea fiecareia dintre


forme. In schimb se defineste mai intai forma dorita iar apoi se foloseste ca
argument pentru una dintre metodele fill() sau draw().
Curs 6 - Java

LINII

Se creaza folosind clasa Line2d.Float (de fapt este o subclasa a clasei Line2D din
pachetul java.awt.geom). Aceasta clasa preia patru argumente:

Line2D.Float linie=new Line2D.Float(60f,5f,13f,28f);


Curs 6 - Java

DREPTUNGHIURI

Dreptunghiurile sunt create folosind clasele Rectangle2D.Float sau


Rectangle2D.Double. Diferenta intre cele doua este doar tipul argumentelor.

Rectangle2D.Float primeste patru argumente: coordonatele x, y, latimea si


inaltimea:

Rectangle2D.Float dreptunghi=new Rectangle2D.Float(10f,13f,40f,20f);


Curs 6 - Java

ELIPSE

Obiectele ovale sunt numite in Java2D “elipse” si pot fi create cu ajutorul clasei
Ellipse2D.Float. Este nevoie de patru argumente: coordonatele x, y, latimea si
inaltimea.

Instructiunea de mai jos creaza o elipsa la coordonatele x,y = 113 si 25, cu o latime
de 22 pixeli si o inaltime de 40 pixeli:

Ellipse2D.Float el=new Ellipse2D.Float(113,25,22,40);

Coordonatele x,y se refera la coltul din stanga-sus al zonei in care este inscrisa
elipsa.
Curs 6 - Java

ARCE

Acestea sunt create prin clasa Arc2D.Float. Sunt create asemanator cu versiunea lor
non-2D dar cu o diferenta: putem stabili modul de inchidere.

Arc2D.Float primeste sapte argumente. Primele patru se refera la elipsa din care
face parte arcul: coordonatele x, y, latimea si inaltimea. Ultimele trei se refera la
unghiul de unde incepe desenarea, numarul de grade pe care se intinde si un intreg
care stabileste modul de inchidere.
Exista o deosebire fata de arcele non-2D: numarul de grade pe care se intinde
arcul 2D este specificat ca avand sensul pozitiv in sensul acelor de ceas.

Modul de inchidere poate fi:


- Arc2D.OPEN (pentru arc deschis)
- Arc2D.CHORD (pentru un arc ale carui capete sunt unite printr-o linie dreapta)
- Arc2D.PIE (pentru un arc cu capetele unite prin intermediul centrului elipsei)
Stilul de inchidere Arc2D.OPEN nu se aplica arcelor umplute; un astfel de arc umplut va fi automat inchis cu
stilul Arc2D.CHORD.
Curs 6 - Java

POLIGOANE

Acestea sunt create in Java2D prin deplasarile dintr-un punct al poligonului in altul.
Deplasarile necesare pentru crearea poligonului sunt definite in obiectul
GeneralPath, care apartine pachetului java.awt.geom.

GeneralPath poligonul=new GeneralPath();

Metoda moveTo() a clasei GeneralPath este folosita pentru a crea primul punct al
poligonului.

polig.moveTo(5f,0f);

Metoda lineTo() se foloseste pentru crearea unei linii care incepe din punctul curent
si se termina intr-un nou punct:

polig.lineTo(205f,0f);
polig.lineTo(205f,90f);
Curs 6 - Java

POLIGOANE

Daca vrem sa inchidem un poligon se poate folosi metoda closePath() fara nici un
argument:

polig.closePath();

Aceasta metoda inchide un poligon prin conectarea punctului curent cu punctul


specificat in cel mai recent apel de metoda moveTo(). Putem inchide poligonul si
fara aceasta metoda, prin folosirea metodei lineTo() care conecteaza punctul curent
cu punctul initial al poligonului.
O data creata forma poligonala ea poate fi reprezentata (desenata) ca orice alt
obiect, cu metodele fill() sau draw().
Curs 6 - Java

TEXT

Sirurile sunt desenate si in Java2D tot cu metoda drawString().

Aceasta preia trei argumente: obiectul String si coordonatele x si y - cu mentiunea


ca aceste coordonate sunt acum de tip float, ca la toate coordonatele din Java2D.

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