Sunteți pe pagina 1din 18

Java2D

API Java 2D ofera programelor Java capabilitati pentru lucrul cu grafice 2D, a text si imagini prin extensiile pachetului Abstract Windowing Tool it !AWT"# API Java 2D API ofera un numar mare de primitive geometrice, cum ar fi curbele, dreptunghiuri, elipse ca si un mecanism de redare a oricarei forme geometrice $etodele care controlea%a procesul de desenare se gasesc in clasa Component si sunt pre%entate mai &os' Desenea%a o componenta# (ste o metoda supradefinita de fiecare componenta in parte pentru a furni%a repre%entarea sa grafica specifica# $etoda este apelata de fiecare data cand continutul componentei trebuie desenat !redesenat") nu se apelea%a explicit#
void paint(Graphics g)void update(Graphics g)- Actuali%ea%a starea grafica a unei componente sterge componenta prin supradesenarea ei cu culoarea fundalului stabileste culoarea !foreground" a componentei apelea%a metoda paint pentru a redesena complet componenta

in trei pasi'

*u se apelea%a explicit#
void repaint()-(xecuta

explicit un apel al metodei update pentru a actuali%a repre%entarea

grafica a unei componente# Dupa cum se observa singurul argument al metodelor paint si update este un obiect de tip Graphics# Acesta obiect repre%inta contextul grafic in care se executa desenarea componentelor 1. Metoda paint desenarea obiectelor Toate desenele care trebuie sa apara pe o suprafata de desenare se reali%ea%a in metoda paint a unei componente, care este definita in superclasa Component insa nu are nici o implementare si, din acest motiv, orice obiect grafic care doreste sa se desene%e trebuie sa o supradefineasca pentru a+si crea propria sa repre%entare# 2. Clasa Canvas suprafata de desenare Java ofera si posibilitatea controlului la nivel de punct !pixel" pe dispo%itivul grafic, respectiv desenarea a diferite forme grafice direct pe suprafata unei componente# Desi este posibil, in general nu se desenea%a la nivel de pixel direct pe suprafata ferestrelor sau a altor suprafete de afisare#

In Java a fost definit un tip special de componenta numita Canvas !p,n%a de pictor", cu scopul de a implementa obiecte grafice cu o anumita infatisare# -lasa Canvas este o clasa generica din care se derivea%a subclase pentru crearea suprafetelor de desenare !planse"# Plansele nu pot contine alte componente grafice, ele fiind utili%ate doar ca suprafete de desenat sau ca fundal pentru animatie# Desenarea pe o plansa se face prin supradefinirea metodei paint# . plansa este suprafata dreptunghiulara de culoare alba pe care se poate desena# Implicit dimensiunile plansei sunt / si, din acest motiv, gestionarii de po%itionare nu vor avea la dispo%itie dimensiuni implicite pentru afisarea unui obiect de tip -anvas# Pentru a evita acest nea&uns este recomandat ca o plansa sa redefineasca si metodele getMinimumSize, getMaximumSize, getPreferredSize pentru a+si specifica dimensiunile implicite# (tapele care trebuie parcurse pentru crearea unui desen, sau mai bine %is, a unui obiect grafic cu o anumita infatisare sunt'

crearea unei planse de desenare, adica o subclasa a clasei Canvas redefinirea metodei paint din clasa respectiva redefinirea metodelor getMinimumSize getMa!imumSize get"referredSize desenarea efectiva a componentei in cadrul metodei paint adaugarea plansei la un container cu metoda add# interceptarea evenimentelor de tip FocusEvent, KeyEvent, MouseEvent, ComponentEvent si tratarea lor in anumite ca%uri

Definirea generica a unei planse are urmatorul format'


class PlansaDesenare extends Canvas { public void paint(Grap ics !" { # # # $$desenarea % public Dimension !etMinimum&i'e(" { return # # # % public Dimension !etMaximum&i'e(" { return # # # % public Dimension !etPre(erred&i'e(" { return # # #) %

#!emplu$ 0a definim o plansa pe care desenam un patrat si cercul sau circumscris# Plansa o vom afisa apoi pe o fereastra#

import *ava#a+t#,) import *avax#s+in!#,) class PlansaDesenare extends Canvas { Dimension canvas&i'e - ne+ Dimension(.//, .//") public void paint(Grap ics !" { !#setColor(Color#red") !#dra+0ect(/, /, .//, .//") !#setColor(Color#blue") !#dra+1val(/, /, .//, .//") % public Dimension !etMinimum&i'e(" { return canvas&i'e) % public Dimension !etPre(erred&i'e(" { return canvas&i'e) % % class Fereastra extends 2Frame { public Fereastra(&trin! titlu" { super(titlu") set&i'e(3//, 3//") add(ne+ PlansaDesenare(", 4order5ayout#CE67E0") % % public class 7estCanvas { public static void main(&trin! ar!s89" { Fereastra ( - ne+ Fereastra(:7est Paint:") (#s o+(") % %

%. Casa Graphics conte!tul de desenare Inainte ca utili%atorul sa poata desena el trebuie sa obtina un context grafic de desenare pentru suprafata careia ii apartine regiunea pe care se va desena# 1n context grafic este, de fapt, un obiect prin intermediul caruia putem controla procesul de desenare a unui obiect# In general desenarea se poate face' pe o portiune de ecran, la imprimanta sau intr+o %ona virtuala de memorie# 1n conte!t grafic este specificat prin intermediul obiectelor de tip Graphics primite ca parametru in metodele paint si update# In functie de dispo%itivul fi%ic pe care se face afisarea !ecran, imprimanta, plotter, etc" metodele de desenare au implementari interne diferite, transparente utili%atorului# -lasa Graphics pune la dispo%itie metode pentru'

primitive grafice ' desenarea de figuri geometrice, texte si imagini stabilirea proprietatilor unui conte!t grafic, adica' o stabilirea culorii si fontului curente cu care se face desenarea o stabilirea originii coordonatelor suprafetei de desenare

o o

stabilirea suprafetei 2n care sunt vi%ibile componentelor desenate stabilirea modului de desenare#

1. "roprietatile conte!tului grafic


3a orice tip de desenare parametrii legati de culoare, font, etc# sunt specificati de contextul grafic in care se face desenarea' culoarea curenta de desenare Color getColor&' void setColor&Color c' fontul curent cu care vor fi scrise textele (ont get(ont&' void set(ont&(ont f' originea coordonatelor + poate fi modificata prin ' translate&int ! int )' %ona de decupare' %ona in care sunt vi%ibile desenele Shape getClip&' void setClip&Shape s' void setClip&int ! int ) int *idth int height' modul de desenare void set+orMode&Color c1' , desenare -sau e!clusivvoid set"aintMode&Color c1' , supradesenare

2. "rimitive grafice
Desenarea te!telor Desenarea textelor de face cu metodele dra*String dra*.)tes dra*Chars in urmatoarele formate' draw0tring!0tring str, int x, int 4" draw54tes!b4te67 data, int offset, int length, int x, int 4" draw-hars!char67 data, int offset, int length, int x, int 4" unde x si 4 repre%inta coltul din stanga+&os al textului# Textul desenat va avea culoarea curenta a contextului grafic# Desenarea figurilor geometrice 8igurile geometrice ce pot fi desenate in Java si metodele folosite pentru acestea'

linii draw3ine!int x9, int 49, int x2, int 42" drawPol4line!int67 xPoints, int67 4Points, int nPoints" dreptunghiuri simple draw:ect!int x, int 4, int width, int height" fill:ect!int x, int 4, int width, int height" clear:ect!int x, int 4, int width, int height" dreptunghiuri cu chenar ;ridicat; sau ;ad,ncit; draw<D:ect!int x, int 4, int width, int height, boolean raised" fill<D:ect!int x, int 4, int width, int height, boolean raised" dreptunghiuri cu colturi rotun&ite draw:ound:ect!int x, int 4, int width, int height, int arcWidth, int arc=eight" fill:ound:ect!int x, int 4, int width, int height, int arcWidth, int arc=eight ovaluri draw.val!int x, int 4, int width, int height" fill.val!int x, int 4, int width, int height" arce circulare sau eliptice drawArc!int x, int 4, int width, int height, int startAngle, int arcAngle" fillArc!int x, int 4, int width, int height, int startAngle, int arcAngle" poligoane drawPol4gon!int67 xPoints, int67 4Points, int nPoints" drawPol4gon!Pol4gon p" fillPol4gon!int67 xPoints, int67 4Points, int nPoints" fillPol4gon!Pol4gon p"

#!ercitiu$ 9# -reati un poligon prin adaugarea de puncte'


Poly!on poly - ne+ Poly!on(") # # # $$ crearea unui triun! i poly#addPoint(.//, .//") poly#addPoint(.;/, .;/") poly#addPoint(;/, .;/")

2# -rearea unui poligon folosind vectori de coordonate


int89x - ne+ int8<9) int89y - ne+ int8<9) int n) # # # $$ Ma=e a trian!le x8/9-.//) x8.9-.;/) x839-;/) y8/9-.//) y8.9-.;/) y839-.;/) n - <) # # # Poly!on my7ri - ne+ Poly!on(x, y, n") $$ a trian!le $$ count o( points

<# Pentru a desena sau umple un poligon folositi functiile' g#drawPol4gon!m4Tri" sau g#fillPol4gon!m4Tri"

%. (olosirea fonturilor
Dupa cum va%ut, pentru a scrie un text pe ecran avem doua posibilitati# Prima dintre acestea este sa folosim o componenta orientata+text cum ar fi 5abel, 7extField sau 7ext>rea, iar a doua sa apelam la metodele clasei Grap ics de desenare a textelor' dra+&trin!, dra+C ars, dra+4ytes# Indiferent de modalitatea aleasa, putem specifica prin intermediul fonturilor cum sa arate textul respectiv, acest lucru reali%,ndu+se prin metoda clasei Component, respectiv Graphics' set(ont&(ont f'# -ei mai importanti parametri ce caracteri%ea%a un font sunt'

numele fontului' =elvetica 5old, Arial 5old Italic, etc familia din care face parte fontul' =elvetica, Arial, etc dimensiunea fontului' 2naltimea sa stilul fontului' /ngrosat &bold', nclinat (italic) metrica fontului

-lasele care ofera suport pentru lucrul cu fonturi sunt (ont si (ontMetrics.

Clasa (ont
1n obiect de tip Font 2ncapsulea%a informatii despre toti parametrii unui font, mai putin despre metrica acestuia# -onstructorul u%ual al clasei este cel care primeste ca argumene numele fontului, dimensiunea si stilul acestuia#
Font(&trin! name, int style, int si'e"

0tilul unui font este specificat prin intermediul constantelor '

Font#P5>?6 - normal Font#415D - ngrosat Font#?7>5?C - nclinat Exemple@ ne+ Font(:>rial:, Font#415D, .3") ne+ Font(:7imes 6e+ 0oman:, Font#?7>5?C, .A") ne+ Font(:Courier 6e+:, Font#P5>?6, ./")

8olosirea unui obiect de tip 8ont se reali%ea%a u%ual astfel'


$$pentru componente etic etate Labe abe ! ne" Labe (#$ext %ava#)& abe 'set(ont(ne" (ont(#)ria #* (ont'+,L-* ./))& $$in metoda paint(Grap ics !" g'set(ont(ne" (ont(#$imes 0e" 1oman#* (ont'2$)L2C* .3))& g'dra"String(#$ext %ava#* 4* 4)&

. platforma de lucru are instalate, la un moment dat, o serie intreaga de fonturi care sunt disponibile pentru scrierea textelor# 3ista acestor fonturi se poate obtine cu metoda !et>llFonts a clasei Grap icsEnvironment astfel'
Font89 (onturi Grap icsEnvironment#!et5ocalGrap icsEnvironment("#!et>llFonts(")

(xemplul urmator afisea%a lista primelor 2/ de fonturi disponibile pe platforma curenta de lucru# Textul fiecarui nume de font va fi scris cu fontul sau corespun%ator#
import *ava#a+t#,) import *avax#s+in!#,) class Fonturi extends Canvas { private Font89 (onturi) Dimension canvas&i'e - ne+ Dimension(A//, A//") public Fonturi(" { set&i'e(canvas&i'e") (onturi - Grap icsEnvironment# !et5ocalGrap icsEnvironment("#!et>llFonts(") % public void paint(Grap ics !" { &trin! nume) (or(int i-/) i B 3/) iCC" { nume - (onturi8i9#!etFont6ame(") !#setFont(ne+ Font(nume, Font#P5>?6, .A"") !#dra+&trin!(nume, 3/, (i C ." , 3/") % % public Dimension !etMinimum&i'e(" { return canvas&i'e) % public Dimension !etPre(erred&i'e(" { return canvas&i'e) %

% class Fereastra extends 2Frame { public Fereastra(&trin! titlu" { super(titlu") add(ne+ Fonturi(",4order5ayout#CE67E0") pac=(") % % public class 7est>llFonts { public static void main(&trin! ar!s89" { Fereastra ( - ne+ Fereastra(:>ll (onts:") (#s o+(") % %

0.(olosirea culorilor
.rice culoare este formata prin combinatia culorilor standard rosu !:ed", verde !>reen" si albastru !5lue", la care se adauga un anumit grad de transparenta !Alpha"# 8iecare din acesti patru parametri poate varia intr+un interval cuprins fie intre / si 2?? !daca dorim sa specificam valorile prin numere intregi", fie intre /#/ si 9#/ !daca dorim sa specificam valorile prin numere reale"# . culoare este repre%entata printr+o instanta a clasei Color sau a subclasei sale S)stemColor# Pentru a crea o culoare avem doua posibilitati' sa folosim una din constantele definite 2ntr+un din cele doua clase sa folosim unul din constructorii clasei -olor# 0a vedem mai 2nt,i care sunt constantele definite 2n aceste clase'
Color SystemColor

blac= blue cyan dar=Gray !ray !reen li! tGray ma!enta oran!e pin= red + ite yello+

activeCaption activeCaption4order activeCaption7ext control controlDi! li! t control& ado+ contol7ext des=top menu text textDi! li! t +indo+ # # #

In clasa Color sunt definite culori u%uale din paleta standard de culori, in timp ce in clasa S)stemColor sunt definite culorile componentelor standard !ferestre, texte, meniuri, etc" ale platformei curente de lucru# 8olosirea acestor constante se face ca in exemplele de mai &os' -olor rosu @ -olor#red)

-olor galben @ -olor#4ellow) -olor fundal @ 04stem-olor#des top) Daca nici una din aceste culori predefinite nu corespunde preferintelor noastre atunci putem crea noi culori prin intermediul constructorilor clasei -olor' -olor!float r, float g, float b" -olor!float r, float g, float b, float a" -olor!int r, int g, int b" -olor!int r, int g, int b, int a" -olor!int rgb" unde r, g, b, a sunt valorile pentru rosu, verde, albastru si transparenta !alpha" iar parametrul ;rgb; de la ultimul constructor repre%inta un intreg format din' bitii 9A+2< rosu, B+9? verde, /+C albastru# Dalorile argumentelor varia%a intre /+2?? pentru tipul int, respectiv /#/+9#/ pentru tipul float# Daloarea 2?? !sau 9#/" pentru transparenta specifica faptul ca respectiva culoare este complet opaca, iar valoarea / !sau /#/" specifica transparenta totala# Implicit, culorile sunt complet opace#
$$Exemple de (olosire a constructorilor@ Color Color Color Color alb - ne+ Color(3;;, 3;;, 3;;") ne!ru - ne+ Color(/, /, /") rosu - ne+ Color(3;;, /, /") rosu7ransparent - ne+ Color(3;;, /, /, .3E")

$etodele cele mai folosite ale clasei Color sunt'


Color bri! ter(" Color dar=er(" int !et>lp a(" int !et0ed(" Determina parametrii din care este alcatuita culoarea int !etGreen(" int !et4lue(" int !et0G4("
Determina valoarea ce reprezinta culoarea respectiva (bitii 16-23 rosu, 8-1 verde, !-" albastru#

Creeaza o noua versiune a culorii curent mai deschisa / nchisa

1. (olosirea imaginilor
a# 2ncarcarea unei imagini dintr,un fisier -rearea unui obiect de tip ?ma!e se face folosind o imagine dintr+un fisier fie aflat pe masina pe care se lucrea%a, fie aflat la o anumita adresa !1:3" pe Internet# $etodele pentru incarcarea unei imagini dintr+un fisier se gasesc in clasele >pplet si 7ool=it, avand aceeasi denumire get2mage si urmatoarele formate'
Applet Toolkit

public ?ma!e !et?ma!e(F05 url" public ?ma!e !et?ma!e(F05 url, &trin! (isier"

public ?ma!e !et?ma!e(F05 url" public ?ma!e !et?ma!e(&trin! (isier"

Pentru a obtine un obiect de tip 3ool4it se va folosi metoda getDefault3ool4it, ca in exemplul de mai &os' Tool it tool it @ Tool it#getDefaultTool it!") Image image9 @ tool it#getImage!;image8ile#gif;") Image image2 @ tool it#getImage! new 1:3!;http'EE&ava#sun#comEgraphicsEpeople#gif;"") $etoda get2mage nu verifica daca fisierul sau adresa specificata repre%inta o imagine valida si nici nu incarca efectiv imaginea in memorie, aceste operatiuni fiind facute abia in momentul in care se va reali%a afisarea imaginii pentru prima data# $etoda nu face decat sa cree%e un obiect de tip 2mage care face referinta la o anumita imagine externa# Dintre metodele clasei 2mage cele mai des folosite sunt cele pentru determinarea dimensiunilor unei imagini' int get5eight!Image.bserver observer" int get6idth!Image.bserver observer" unde parametrul observer este u%ual t is# !despre interfata ?ma!e1bserver se va discuta ulterior"

b. 7fisarea imaginilor
Afisarea unei imagini intr+un context grafic se reali%ea%a prin intermediul metodei dra*2mage din clasa Graphics si, in general, se reali%ea%a in metoda paint a unui obiect de tip Canvas# -ele mai u%uale formate ale metodei sunt'
boolean dra+?ma!e(?ma!e im!, int x, int y, ?ma!e1bserver observer" boolean dra+?ma!e(?ma!e im!, int x, int y, Color b!color, ?ma!e1bserver observer" boolean dra+?ma!e(?ma!e im!, int x, int y, int +idt , int ei! t, ?ma!e1bserver observer" boolean dra+?ma!e(?ma!e im!, int x, int y, int +idt , int ei! t, Color b!color, ?ma!e1bserver observer"

unde'

img este obiectul ce repre%inta imaginea ! si ) sunt coordonatele stanga+sus la care va fi afisata imaginea, relativ la spatiul de coordonate al contextului grafic observer este un obiect care ;observa; incarcarea imaginii si va fi informat pe masura derularii acesteia) de obicei se specifica t is# *idth heigth repre%inta inaltimea si latimea la care trebuie scalata imaginea bgColor repre%inta culoarea cu care vor fi colorati pixelii transparenti ai imaginii

In exemplul urmator afisam aceeasi imagine de trei ori


?ma!e im! - 7ool=it#!etDe(ault7ool=it("#!et?ma!e(:ta'#!i(:") !#dra+?ma!e(im!, /, /, t is")

!#dra+?ma!e(im!, /, 3//, .//, .//, t is") !#dra+?ma!e(im!, 3//, /, 3//, A//, Color#yello+, t is")

$etoda dra*2mage returnea%a true daca imaginea a fost afisata in intregime si false in ca% contrar, cu alte cuvinte metoda nu astepta ca o imagine sa fie complet afisata ci se termina imediat ce procesul de afisare a inceput# In ca%ul in care se afisea%a o imagine care se gaseste pe Internet sau imaginea afisata este de dimensiuni mari se va observa ca aceasta nu apare complet de la inceput ci este desenata treptat fara interventia programatorului# Acest lucru se intampla deoarece metoda dra*2mage nu face decat sa declanse%e procesul de incarcareEafisare a imaginii, dupa care reda imediat controlul apelantului, lucru deosebit de util intrucat procesul de incarcare a unei imagini poate dura mult si nu este de dorit ca 2n acest interval de timp !pana la incarcarea completa a imaginii" aplicatia sa fie blocata# -a urmare, la apelul metodei dra"2mage va fi desenata numai portiunea de imagine care este disponibila la un moment dat si care poate fi incompleta# De aceea trebuie sa existe un mecanism prin care componenta sa fie redesenata 2n momentul 2n care au mai sosit informatii legate de imagine# Acest mecanism este reali%at prin intermediul interfetei 2mage8bserver, implementata de clasa Component si deci de toate componentele# Aceasta interfata specifica obiecte care au inceput sa utili%e%e o imagine incompleta si care trebuie anuntate de noile date obtinute in legatura cu imaginea respectiva#

c. Crearea imaginilor in memorie , clasa Memor)2mageSource


In ca%ul in care dorim sa folosim o anumita imagine creata direct din program si nu incarcata dintr+un fisier vom folosi clasa Memor)2mageSource, aflata in pachetul &ava#awt#image# Pentru aceasta va trebui sa definim un vector de numere intregi in care vom scrie valorile intregi !:>5" ale culorilor pixelilor ce definesc imaginea noastra# Dimensiunea vectorului va fi inaltimea inmultita cu latimea in pixeli a imaginii# -onstructorul clasei $emor4Image0ource este' Memor)2mageSource&int * int h intst pi!eli int off int scan' unde' w, h repre%inta dimensiunile imaginii !latimea si 2naltimea" pixeli67 este vectorul cu culorile imaginii off, scan repre%inta modalitatea de construire a matricii imaginii pornind de la vectorul cu pixeli, normal aceste valori sunt off @ /, scan @ w In exemplul urmator vom crea o imagine cu pixeli de culori aleatorii si o vom afisa pe ecran'
import *ava#a+t#,) import *avax#s+in!#,) import *ava#a+t#ima!e#,) class Desenea'a extends 2Panel { public void paint(Grap ics !" {

int + - .//) int - .//) int 89 pix - ne+ int 8+ , int index - /)

9)

(or (int y - /) y B ) yCC" { (or (int x - /) x B +) xCC" { int red - (int" (Mat #random(" , 3;;") int !reen - (int" (Mat #random(" , 3;;") int blue - (int" (Mat #random(" , 3;;") pix8indexCC9 - (ne+ Color(red, !reen, blue""#!et0G4(") % % ?ma!e im! - create?ma!e(ne+ Memory?ma!e&ource(+, !#dra+?ma!e(im!, /, /, t is") % % class 7estC extends 2Frame { public 7estC(&trin! titlu" { super(titlu") set&i'e(3//, 3//") !etContentPane("#add(ne+ Desenea'a("") % public static void main(&trin! ar!s89" { 7estC ( - ne+ 7estC(:7est:") (#setDe(aultClose1peration(2Frame#EG?7H16HC51&E") (#s o+(") % %

+"")

, pix, /,

9.3iparirea
Tiparirea in Java este tratata in aceeasi maniera ca si desenarea, singurul lucru diferit fiind contextul grafic in care se executa operatiile# Pachetul care ofera suport pentru tiparire este :ava.a*t.print, iar clasa principala care controlea%a tiparirea este "rinterJob# . aplicatie va apela metode ale acestei clase pentru' crearea unei sesiuni de tiparire !&ob" invocarea dialogului cu utili%atorul pentru specificarea unor parametri legati de tiparire tiparirea efectiva .rice componenta care poate fi afisata pe ecran poate fi si tiparita# In general, orice informatii care trebuie atat afisate cat si tiparite, vor fi incapsulate intr+un obiect grafic + componenta, care are o repre%entare vi%uala descrisa de metoda paint si care va specifica si modalitatea de repre%entare a sa la imprimanta#

1n obiect care va fi tiparit trebuie sa implemente%e interfata "rintable care contine o singura metoda print responsabila cu descrierea modalitatii de tiparire a obiectului# In ca%ul cand imaginea de pe ecran coincide cu imaginea de la imprimanta, codurile metodelor paint si print pot fi identice# In general, metoda print are urmatorul format'
public int print(Grap ics !, Pa!eFormat p(, int pa!e?ndex" t ro+s PrinterException { $$descrirea ima!inii obiectului ce va (i a(isata la imprimanta $$poate (i un apel la metoda paint@ paint(!" i( (ceva nu este in regula" { return Printable#61H&FCDHP>GE) % return Printable#P>GEHEG?&7&) % %

Pasii care trebuie efectuati pentru tiparirea unui obiect sunt' 9# -rearea unei sesiuni de tiparire 2# 0pecificarea obiectului care va fi tiparit) acesta trebuie sa implemente%e interfata Printable <# .ptional, initierea unui dialog cu utili%atorul pentru preci%area unor parametri legati de tiparire F# Tiparirea efectiva PrinterJob#getPrinterJob setPrintable printDialog print

In exemplul urmator vom defini un obiect care are aceeasi repre%entare pe ecran c,t si la imprimanta !un cerc circumscris unui patrat, 2nsotit de un text" si vom tipari obiectul respectiv#
import import import import import import *ava#io#,) *ava#a+t#,) *ava#a+t#event#,) *ava#a+t#print#,) *avax#s+in!#,) *ava#a+t#print#PrinterException)

class Plansa extends Canvas implements Printable { Dimension d - ne+ Dimension(A//, A//") public Dimension !etPre(erred&i'e(" { return d) % public void paint(Grap ics !" { !#dra+0ect(3//, 3//, .//, .//") !#dra+1val(3//, 3//, .//, .//") !#dra+&trin!(:Dello:, 3//, 3//") % public int print(Grap ics !, Pa!eFormat p(, int pi" t ro+s PrinterException {

i( (pi I- ." { return Printable#61H&FCDHP>GE) % paint(!") !#dra+&trin!(:6umai la imprimanta:, 3//, <//") % % class Fereastra3 extends 2Frame implements >ction5istener { private Plansa plansa - ne+ Plansa(") private 4utton print - ne+ 4utton(:Print:") public Fereastra3(&trin! titlu" { super(titlu") addJindo+5istener(ne+ Jindo+>dapter(" { public void +indo+Closin!(Jindo+Event e" { &ystem#exit(/") % %") add(plansa, 4order5ayout#CE67E0") Panel sout - ne+ Panel(") sout #set5ayout(ne+ Flo+5ayout(Flo+5ayout#CE67E0"") sout #add(print") add(sout , 4order5ayout#&1F7D") print#add>ction5istener(t is") pac=(") return Printable#P>GEHEG?&7&)

public void actionPer(ormed(>ctionEvent e" { $$.#crearea unei sesiuni de tiparire Printer2ob print2ob - Printer2ob#!etPrinter2ob(") $$3#stabilirea obiectului ce va (i tiparit print2ob#setPrintable(plansa") $$<#initierea dialo!ului cu utili'atorul i( (print2ob#printDialo!("" { try { $$A#tiparirea e(ectiva print2ob#print(") % catc (PrinterException e." { &ystem#out#println(:Exceptie la tiparireK:") e.#print&tac=7race(") % % % % public class 7estPrint { public static void main(&trin! ar!s89" t ro+s Exception {

% %

Fereastra3 ( - ne+ Fereastra3(:7est Print:") (#s o+(")

Exemplu@ divi'area unei ima!ini in subima!ini import import import import import import import *ava#a+t#,) *ava#a+t#event#,) *ava#a+t#ima!e#,) *ava#io#,) *avax#ima!eio#?ma!e?1) *avax#s+in!#,) *avax#s+in!#event#Mouse?nput>dapter)

public class Croppin! extends 2Panel { 4u((ered?ma!e ima!e) Dimension si'e) 0ectan!le clip) boolean s o+Clip) public Croppin!(4u((ered?ma!e ima!e" { t is#ima!e - ima!e) si'e - ne+ Dimension(ima!e#!etJidt (", ima!e#!etDei! t("") s o+Clip - (alse) % protected void paintComponent(Grap ics !" { super#paintComponent(!") Grap ics3D !3 - (Grap ics3D"!) !3#set0enderin!Dint(0enderin!Dints#KELH>67?>5?>&?6G, 0enderin!Dints#M>5FEH>67?>5?>&H16") int x - (!etJidt (" - si'e#+idt "$3) int y - (!etDei! t(" - si'e# ei! t"$3) !3#dra+?ma!e(ima!e, x, y, t is") i((s o+Clip" { i((clip -- null" createClip(") !3#setPaint(Color#red") !3#dra+(clip") % % public void setClip(int x, int y" { $$ =eep clip +it in raster int x/ - (!etJidt (" - si'e#+idt "$3) int y/ - (!etDei! t(" - si'e# ei! t"$3) i((x B x/ NN x C clip#+idt I x/ C si'e#+idt NN y B y/ NN y C clip# ei! t I y/ C si'e# ei! t" return) clip#set5ocation(x, y") repaint(")

% public Dimension !etPre(erred&i'e(" { return si'e) % private void createClip(" { clip - ne+ 0ectan!le(.A/, .A/") clip#x - (!etJidt (" - clip#+idt "$3) clip#y - (!etDei! t(" - clip# ei! t"$3) % private void clip?ma!e(" { 4u((ered?ma!e clipped - null) try { int + - clip#+idt ) int - clip# ei! t) int x/ - (!etJidt (" - si'e#+idt "$3) int y/ - (!etDei! t(" - si'e# ei! t"$3) int x - clip#x - x/) int y - clip#y - y/) clipped - ima!e#!et&ubima!e(x, y, +, ") % catc (0asterFormatException r(e" { &ystem#out#println(:raster (ormat error@ : C r(e#!etMessa!e("") return) % 25abel label - ne+ 25abel(ne+ ?ma!e?con(clipped"") 21ptionPane#s o+Messa!eDialo!(t is, label, :clipped ima!e:, 21ptionPane#P5>?6HME&&>GE") % private 2Panel !etF?Panel(" { (inal 2C ec=4ox clip4ox - ne+ 2C ec=4ox(:s o+ clip:, s o+Clip") clip4ox#add>ction5istener(ne+ >ction5istener(" { public void actionPer(ormed(>ctionEvent e" { s o+Clip - clip4ox#is&elected(") repaint(") % %") 24utton clip - ne+ 24utton(:clip ima!e:") clip#add>ction5istener(ne+ >ction5istener(" { public void actionPer(ormed(>ctionEvent e" { clip?ma!e(") % %") 2Panel panel - ne+ 2Panel(")

panel#add(clip4ox") panel#add(clip") return panel) % public static void main(&trin!89 ar!s" t ro+s ?1Exception { File (ile - ne+ File(:D@$Documentation$2avaH+or=$s ape$2PG$animals$.+mHelep antsH//.#*p!:") Croppin! test - ne+ Croppin!(?ma!e?1#read((ile"") ClipMover mover - ne+ ClipMover(test") test#addMouse5istener(mover") test#addMouseMotion5istener(mover") 2Frame ( - ne+ 2Frame(") (#setDe(aultClose1peration(2Frame#EG?7H16HC51&E") (#!etContentPane("#add(ne+ 2&crollPane(test"") (#!etContentPane("#add(test#!etF?Panel(", :&out :") (#set&i'e(A//,A//") (#set5ocation(3//,3//") (#setMisible(true") % % class ClipMover extends Mouse?nput>dapter { Croppin! croppin!) Point o((set) boolean dra!!in!) public ClipMover(Croppin! c" { croppin! - c) o((set - ne+ Point(") dra!!in! - (alse) % public void mousePressed(MouseEvent e" { Point p - e#!etPoint(") i((croppin!#clip#contains(p"" { o((set#x - p#x - croppin!#clip#x) o((set#y - p#y - croppin!#clip#y) dra!!in! - true) % % public void mouse0eleased(MouseEvent e" { dra!!in! - (alse) % public void mouseDra!!ed(MouseEvent e" { i((dra!!in!" { int x - e#!etG(" - o((set#x)

% % %

int y - e#!etL(" - o((set#y) croppin!#setClip(x, y")

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