Sunteți pe pagina 1din 13

Programare Java Curs 9 CREAREA DE INTERFETE GRAFICE PENTRU APPLETURI Realizarea unei astfel de interfete in limbajul Java se bazeaza

a in principal pe biblioteca AWT ( Abstract Windowing Toolkit ) , care contine un set de clase pentru crearea si folosirea unor astfel de interfete grafice pentru utilizator . AWT Dupa cum am mai spus AWT reprezinta un set de clase care ne ajuta - printre altele sa cream o interfata grafica utilizator care sa reactioneze la datele de intrare primite de la mouse sau tastatura . Deoarece Java este un limbaj independent de platforma AWT ofera modalitatea de a proiecta o interfata care sa fie la fel reprezentata si cu aceleasi caracteristici pe orice sistem pe care ar rula . Folosind pachetul AWT avem de luat in calcul mai multe elemente care compun o interfata grafica : componente - orice element poate fi practic plasat pe o interfata utilizator : butoane , liste derulante , meniuri popup , casete de validare sau campuri de text . containere - acestea reprezinta de fapt componente care pot contine la randul lor alte componente . Un exemplu de container este chiar fereastra Applet , iar alte exemple ar putea fi panouri , casete de dialog sau ferestre independente . administratori de dispunere - acestia sunt de fapt niste obiecte care definesc modul de dispunere a componentelor intr-un container . Un astfel de administrator nu este un element propriu-zis vizual , nu vedem pe ecran un astfel de obiect , efectele sale sunt insa vizibile .

Toate clasele AWT sunt bineinteles incluse in pachetul java.awt . Pentru a le putea folosi trebuie importat acest pachet explicit la inceputul codului nostru sursa . Importarea intregului pachet are ca rezultat disponibilizarea pentru programator a tuturor componentelor , containerelor si administratorilor de dispunere folositi pentru realizarea unei interfete grafice . O alta modalitate de a putea folosi clasele necesare este si importarea individuala a claselor necesare . COMPONENTELE INTERFETEI GRAFICE Acestea sunt pozitionate in cadrul interfetei pe care o construim prin adaugarea lor intr-un container . Acesta este chiar el o componenta si deci poate fi la randul sau adaugat in alt container . Cel mai usor mod de a demonstra cum se proiecteaza o interfata este folosirea containerului cu care am lucrat in ultimele cursuri - clasa Applet .

ADAUGAREA DE COMPONENTE LA UN CONTAINER Exista doar doi pasi care trebuie urmati pentru a adauga o componenta la un container : crearea componentei respective apelarea metodei add() a containerului pentru componenta respectiva

Datorita faptului ca un Applet este un container putem folosi metoda add() in cadrul unui applet pentru a adauga o componenta direct in fereastra Applet . Fiecare componenta AWT la randul ei este o clasa , deci componenta este creata propriu-zis prin crearea unui obiect al clasei respective . De exemplu , clasa Button reprezinta butoanele din cadrul unei interfete grafice . Un buton se creaza specificand eticheta sa in metoda constructorului , ca mai jos : Button butonNou=new Button("Apasa aici"); Parametru de tip string primit de constructor se refera la textul care se va afisa pe suprafata butonului . Dupa ce s-a creat componenta cea mai simpla metoda de a o adauga este folosirea metodei add() cu numele componentei ca argument : add(butonNou); Adaugarea componentei nu duce automat si la desenarea ei pe ecran . Ea va fi afisata doar dupa apelul metodei paint() a containerului ; putem folosi si metoda repaint() pentru a forta afisarea unor noi componente eventual adaugate . La momentul adaugarii unei componente intr-un container se observa ca nu i se acorda acesteia nici o pozitionare - prin coordonate x si y ; acesta pozitionare se face doar prin administratorii de dispunere . In cazul in care nu specificam un administrator de dispunere se foloseste automat un administrator Java numit FlowLayout - acesta ordoneaza componentele de la stanga la dreapta , iar cand nu mai este loc pe linie se trece la urmatoarea linie , mai jos . Pentru crearea componentelor in applet vom folosi metoda init() . In continuare aveti un exemplu de creare a unui buton in cadrul unui applet ; acest buton are un text afisat pe el si va fi afisat propriu-zis doar dupa apelarea metodei paint() : import java.awt.*; public class Buton extends java.applet.Applet { String mesaj="Numele butonului . Nu apasati"; Button butonNou=new Button(mesaj); public void init() { add(butonNou); } }

ETICHETE O eticheta este de fapt cea mai simplista componenta a unei intergete grafice , ea fiind implementata prin clasa Label . Etichetele se folosesc pentru a identifica rolul celorlalte componente si nu pot fi modificate direct de utilizator - de fapt reprezinta niste siruri afisate in dreptul celorlalte componente pentru a ne arata cu ce se ocupa componenta respectiva . Folosirea etichetelor pentru text se foloseste in locul metodei drawString() din mai multe cauze : o eticheta este desenata automat si nu are nevoie de tratare explicita de catre metoda paint() etichetele pot fi dispuse in fereastra conform cu administratorii de dispunere folositi si nu nevoie de o pozitionare prin coordonate date in pixeli

Pentru a crea o eticheta putem incerca mai multemetode : Label() - aceasta instructiune creaza o eticheta goala , cu textul aliniat automat la stanga Label(sir) - creaza o eticheta cu textul specificat prin variabila de tip String , alinierea textului fiind la stanga Label(sir,argument2) - creaza o eticheta cu sirul dat ca text si cu alinierea indicata de argumentul al doilea . Pentru a seta alinierea se pot folosi variabilele de clasa : Label.RIGHT , Label.LEFT si Label.CENTER , care duc la alinierea textului la dreapta , la stanga si respectiv centrat .

Pentru a modifica textul etichetei dupa crearea acesteia putem folosi metoda setText(sir) ; noul sir dat ca parametru este afisat dupa reimprospatarea componentei . O alta metoda folositoare este si getText() care ne returneaza valoarea textului etichetei . In continuare avem un exemplu de applet in care s-au creat trei etichete ; in codul sursa apare si un obiect de tip GridLayout - acesta este folosit pentru a putea vedea efectul alinierii etichetelor . In cazul in care nu l-am fi folosit Java ar fi apelat implicit administratorul FlowLayout care nu ne-ar mai fi permis sa aliniem etichetele . Administratorii de dispunere vor fi prezentati mai tarziu detaliat . import java.awt.*; public class Etichete extends java.applet.Applet { Label stanga=new Label("Aliniat la stanga"); Label dreapta=new Label("Aliniat la dreapta",Label.RIGHT); Label centrat=new Label("Aliniat pe centru",Label.CENTER); Font f=new Font("Helvetica",Font.BOLD,18); GridLayout dispunere=new GridLayout(3,1); public void init() { setFont(f); setLayout(dispunere); add(stanga);

setForeground(Color.green); add(centrat); setForeground(Color.blue); add(dreapta); } } BUTOANE Un buton reprezinta de fapt o zona pe care putem efectua un clic ; el poate fi creat cu ajutorul clasei Button . In general aceste butoane sunt folosite pentru a declansa o actiune atunci cand se efectueaza un clic pe suprafata lor . Ca sa cream un buton trebuie sa urmam una dintre caile urmatoare : fie apelam constructorul Button() care ne creaza un buton fara nici un text fie apelam constructorul cu un argument de tip String care este de fapt chiar textul butonului . Odata creat acest buton ii mai putem modifica textul cu ajutorul metodei setLabel() sau putem folosi metoda getLabel() pentru a afla textul acestui buton . OBS. : setLabel() si getLabel() nu au legatura cu clasa Label , ele se refera doar la clasa Button . In continuare avem un exemplu de applet care va prezenta cinci butoane pentru functiile unui casetofon ( de exemplu ) : import java.awt.*; public class Casetofon extends java.applet.Applet { Button inapoi=new Button("Inapoi"); Button inainte=new Button("Inainte"); Button play=new Button("Play"); Button stop=new Button("Stop"); Button pauza=new Button("Pauza"); public void init() { add(inapoi); add(inainte); add(pauza); add(stop); add(play); } } CASETE DE VALIDARE

Aceste componente , numite in engleza checkbox , sunt in practica niste casete patrate care pot fi bifate sau nu cu ajutorul unui clic de mouse . Scopul lor este in general de a selecta sau deselecta anumite facilitati ale unui program . In majoritatea cazurilor in care se folosesc casete de validare acestea sunt neexclusive , adica oricare dintre casete poate avea valoare bifat sau nu , putand deci fi bifate la un moment dat chiar si toate casetele sau nici una . O alta modalitate de folosire a acestor casete este si gruparea lor care duce la realizarea asa numitelor butoane radio ; proprietatea acestora de baza este faptul ca la un moment dat poate fi activ ( bifat ) doar un singur caz , o singura caseta . Ambele tipuri de casete de validare sunt implementate cu ajutorul clasei Checkbox . Pentru a crea o caseta de validare neexclusiva putem folosi unul dintre urmatorii constructori : Checkbox() - care creaza o caseta de validare fara eticheta si nevalidata ( nebifata ) Checkbox(sir) - care creaza o caseta de validare cu eticheta fiind sirul dat ca parametru si nevalidata .

Odata creat un obiect Checkbox se foloseste metoda setState(boolean) pentru a modifica starea acestuia : valoarea true pentru a bifa caseta si valoarea false pentru a debifa caseta de validare . Metoda getState() returneaza o valoare Boolean care ne indica starea de validare a casetei la momentul respectiv . In listingul de mai jos avem un exemplu de applet care creaza cinci casete de validare neexclusive care permit selectarea unor marci de automobile : import java.awt.*; public class Bifare extends java.applet.Applet { Checkbox caseta1=new Checkbox("Volvo"); Checkbox caseta2=new Checkbox("BMW"); Checkbox caseta3=new Checkbox("Mercedes"); Checkbox caseta4=new Checkbox("Audi"); Checkbox caseta5=new Checkbox("Dacia"); public void init() { add(caseta1); add(caseta2); add(caseta3); add(caseta4); add(caseta5); caseta5.setState(true); } } In cazul in care dorim sa grupam mai multe casete de validare intr-un grup pentru a realiza niste butoane radio vom crea un obiect CheckboxGroup : CheckboxGroup grup=new CheckboxGroup();

Acest obiect va pastra starea tuturor casetelor din grupul respectiv si va fi folosit ca argument suplimentar pentru constructorul Checkbox . Pentru a crea o caseta de validare care apartine unui grup vom folosi o instructiune de genul : Checkbox(sir,grupCaseteValidare,boolean) Aceasta instructiune va crea o caseta cu eticheta conform a cu sirul si cu starea de bifare sau nebifare setata de argumentul de tip boolean . In continuare avem un exemplu care creaza un grup cu trei casete de validare : import java.awt.*; public class Bifare extends java.applet.Applet { CheckboxGroup grup=new CheckboxGroup(); Checkbox caseta1=new Checkbox("Volvo",grup,false); Checkbox caseta2=new Checkbox("BMW",grup,false); Checkbox caseta3=new Checkbox("Mercedes",grup,true); Checkbox caseta4=new Checkbox("Audi",grup,false); Checkbox caseta5=new Checkbox("Dacia",grup,false); public void init() { add(caseta1); add(caseta2); add(caseta3); add(caseta4); add(caseta5); } } In cazul in care vrem sa modificam starea de validare a unui buton radio dintr-un grup putem folosi metoda setCurrent(validare) . Putem folosi si metoda getCurrent() pentru a intoarce valoarea curenta de bifare a unei casete de validare . LISTE DE OPTIUNI Acestea sunt create cu ajutorul clasei Choice si permit alegerea unei singure optiuni dintr-o lista derulanta pe verticala . Pentru a crea o astfel de lista trebuie mai intai sa cream un obiect Choice care va pastra lista propriu-zisa : Choice lista=new Choice(); Elementele listei se adauga la aceasta prin metoda addItem(sir) a obiectului de tip Choice . Metoda addItem() poate fi folosita si dupa ce lista noastra a fost deja adaugata la un container . In codul sursa de mai jos s-a realizat un applet care permite selectarea unei echipe de fotbal dintr-o lista de patru echipe : import java.awt.*;

public class ListaSelectie extends java.applet.Applet { Choice lista=new Choice(); Label eticheta=new Label("Echipa care credeti ca va castiga Liga Campionilor in 2002 :"); public void init() { add(eticheta); lista.addItem("Real Madrid"); lista.addItem("Manchester United"); lista.addItem("Bayer Leverkusen"); lista.addItem("Barcelona"); add(lista); } } In cadrul clasei Choice exista mai multe metode folositoare pentru controlul asupra unei liste de selectie : getItem(int) - aceasta metoda returneaza textul optiunii din pozitia specificata de argumentul intreg , prima optiune avand pozitia 0 countItems() - intoarce numarul de elemente ale listei getSelectedIndex() - intoarce pozitia elementului care este selectat la acel moment getSelectedItem() - intoarce textul elementului selectat la acel moment select(int) - selecteaza elementul aflat pe pozitia specificata de argument select(String) - selecteaza primul element din lista care are sirul dat ca parametru drept text

OBS. : Trebuie sa facem cateva observatii legate de unele metode prezentate in paragrafele de mai sus : - metoda Checkbox(String,grup,boolean) a fost inlocuita in Java 2 cu metoda Checkbox(String,boolean,grup); putem folosi in continuare si prima varianta dar la compilare vom obtine un mesaj legat de deprecierea metodei respective - metoda addItem(String) folosita pentru a adauga un element intr-o lista de optiuni se va inlocui incepand cu Java 2 cu metoda add(String) a clasei Choice CAMPURI DE TEXT Textul introdus in applet prin componentele precedente nu era modificabil de catre utilizator , doar programatorul avand posibilitatea de a face acest lucru . Campurile de text dau posibilitatea utilizatorului sa poata introduce propriul text in program . Aceste componente ale interfetei sunt implementate cu ajutorul clasei TextField . Pentru a crea un camp de text putem folosi una dintre urmatoarele patru variante : TextField() - va crea un camp gol si fara o latime specificata TextField(int) - va crea un camp gol care are o latime pentru a afisa un numar de caractere specificat de argumentul intreg . TextField(String) - creaza un camp de text completat cu sirul dat ca parametru

TextField(String,int) - creaza un camp completat cu sirul dat ca parametru si cu latimea data de argumetul intreg . OBS. : incepand cu Java 2 se recomanda folosirea acestui constructor in locul lui TextField(int) .

Atributele responsabile cu latimea campului de text au de fapt importanta doar in cazul folosirii unor administratori de dispunere care nu redimensioneaza componentele - ca de exemplu FlowLayout . In cazul in care vrem ca textul introdus de la tastatura de utilizator sa nu fie vizibil in clar - de exemplu in cazul parolelor - putem folosi o metoda numita setEchoCharacter(char) care va primi ca argument un caracter ce trebuie inclus intre apostroafe ( de exemplu : '@' ) . OBS. : Incepand cu Java 2 metoda setEchoCharacter(char) se poate inlocui cu metoda setEchoChar(char) . In continuare este prezentat un applet care utilizeaza mai multe campuri de text in clar si un camp de text care ascunde textul introdus de utilizator : import java.awt.*; public class CampuriText extends java.applet.Applet { Label eticheta1=new Label("Nume : "); TextField nume=new TextField(30); Label eticheta2=new Label("Prenume : "); TextField prenume=new TextField(30); Label eticheta3=new Label("Parola : "); TextField parola=new TextField(30); public void init() { add(eticheta1); add(nume); add(eticheta2); add(prenume); add(eticheta3); parola.setEchoChar('@'); add(parola); } } Clasa TextField are si ea cateva metode foarte des folosite pentru a controla campurile de text : metoda getText() - returneaza textul continut de camp metoda setText(String) - completeaza campul de text cu sirul specificat ca argument metoda setEditable(boolean) - determina daca respectivul camp de text poate fi sau nu modificat de utilizator . Argumentul false duce la blocarea campului

pentru introducerea de text iar argumentul true permite introducerea de text din partea utilizatorului metoda isEditable() - returneaza starea unui camp de text printr-o valoare booleana ; daca respectivul camp de text poate fi editat va returna true iar daca nu este editabil va returna false

ZONE DE TEXT Aceste componente - numite text area in engleza - sunt de fapt niste campuri de text care contin mai multe linii ( spre deosebire de campurile de text clasice care apar doar pe un rand ) . O zona de text poseda si bare de scroll pentru eventualul text care nu incape in partea vizibila a zonei de text . Pentru a crea o astfel de zona de text trebuie sa folosim unul dintre cei patru constructori de mai jos : TextArea() - creaza o zona de text goala cu inaltime si latime nespecificate TextArea(int,int) - creaza o zona goala care contine numarul de linii dat de primul argument si are latimea data de numarul de caractere care este specificat de cel de-al doilea argument intreg TextArea(String) - creaza o zona de text care contine sirul dat ca argument TextArea(String,int,int) - creaza o zona de text care contine sirul dat ca argument , numarul de linii dat de primul argument intreg si lungimea unei linii de atatea caractere cat reprezinta al doilea argument intreg

In exemplul de mai jos avem o zona de text gata completata cu un text : import java.awt.*; public class ZonaText extends java.applet.Applet { String sir="Text introdus pentru a arata modalitatea de a introduce \ntext predefinit in cadrul unei zone de text create in limbajul Java ."; TextArea zona; public void init() { zona=new TextArea(sir,10,70); add(zona); } } In cazul zonelor de text mai trebuie sa mentionam ca ele sunt inrudite cu campurile de text nu numai din punct de vedere logic ci si ca ierarhie de clase Java ; ambele componente mostenesc de fapt o clasa numita TextComponent , clasa care de fapt poseda metodele setText() , getText() , setEditable() si isEditable() si astfel aceste metode sunt disponibile si clasei TextArea . Zonele de text poseda si ele unele metode proprii foarte utile :

metoda insertText(String,int) - insereaza sirul dat ca parametru la pozitia data de argumentul intreg ; prima valoare a indexului este 0 . OBS. : Incepand cu Java 2 metoda se recomanda a se inlocui cu metoda insert(String,int) . metoda replaceText(String,int,int) - inlocuieste textul aflat intre pozitiile indicate de argumentele intregi cu sirul dat ca prim argument . OBS. : Si aceasta metoda are o alta versiune incepand cu Java 2 , si anume metoda replace(String,int) .

LISTE DERULANTE Aceste componente - scrolling lists - sunt create cu ajutorulclasei List si sunt asemanatoare cu listele de optiuni avand de fapt doar doua diferente majore : 1. o lista derulanta poate fi configurata astfel incat sa poata fi selectate mai multe optiuni 2. aceste liste se prezinta ca o zona de text in care sunt afisate mai multe optiuni iar daca lista contine mai multe optiuni decat pot fi afisate atunci apare bara de scroll . Lista derulanta este definita prin crearea unui obiect List la care apoi se adauga elementele propriu-zise ale listei . Pentru a realiza acest lucru putem folosi unul dintre constructorii de mai jos : List() - creaza o lista vida care permite o selectie unica de element List(int , boolean) - creaza o lista derulanta care are un numar de elemente vizibile la un moment dat specificat prin argumentul intreg iar argumentul boolean indica daca pot fi selectate mai multe optiuni - in cazul posibilitatii selectarii mai multor optiuni argumentul trebuie sa aiba valoarea true

Odata creat un obiect List ii folosim metoda addItem(String) pentru a adauga elemente la acest obiect - OBS. : Ca si in cazul listei de optiuni , incepand cu Java 2 metoda aceasta se recomanda a fi inlocuita cu metoda add(String) a clasei List . Ca si orice alta componenta si lista derulanta trebuie adaugata intr-un container cu ajutorul metodei add() . Exemplul de mai jos ne prezinta o lista derulanta cu patru elemente vizibile la un moment dat ( dintr-un total de sase elemente ale listei ) : import java.awt.*; public class ListaDerulanta extends java.applet.Applet { List lista=new List(4,true); Label eticheta=new Label("Selectati ziarele pe care le cititi : "); public void init() { add(eticheta); lista.add("Evenimentul zilei"); lista.add("Curentul"); lista.add("Libertatea"); lista.add("ProSport");

lista.add("Gazeta Sporturilor"); lista.add("Monitorul oficial"); add(lista); } } Ca si in cazul celorlalte componente si listele derulante au cateva metode des utilizate in conjunctie cu ele : metodele getItem(int) , countItems() , getSelectedIndex() , getSelectedItem() si select(int) sunt aceleasi ca si pentru listele de optiuni . Metoda countItems() are un inlocuitor incepand cu Java 2 in persoana metodei getItemCount() - atat in cazul listelor de optiuni cat si al listelor derulante . metoda getSelectedIndezes() - intoarce un tablou de intregi care contine pozitiile fiecarui element selectat . metoda getSelectedItems() - intoarce un tablou de siruri care contine textul fiecarui element selectat .

BARE DE SCROLL Componentele numite bare de derulare - scrollbars - sunt cele care permit selectarea unei valori prin deplasarea unei casete intre doua sageti . Dupa cum am vazut in cazul componentelor anterioare mai multe dintre acestea au incorporate astfel de bare de derulare ( de exemplu zonele de text sau listele derulante ) . Clasa Scrollbar este cea responsabila pentru alte tipuri noi de bare de scroll . O astfel de bara de scroll poate fi orizontala sau verticala . Barele de derulare sunt folosite in general pentru a specifica valorile minime si maxime care pot fi stabilite prin utilizarea componentei . Pentru a crea o bara de scroll trebuie sa folosim unul dintre constructorii urmatori : Scrollbar() - creaza o bara de scroll verticala cu valorile minima si maxima setate initial la 0 Scrollbar(int) - creaza o bara de scroll cu valorile maxima si minima setate la 0 iar orientarea este data de argumentul intreg . Acest argument poate lua ca valori urmatoarele variabile de clasa : Scrollbar.HORIZONTAL , Scrollbar.VERTICAL . Scrollbar(int,int,int,int,int) - se creaza astfel o bara de scroll cu caracteristicile urmatoare : - primul argument stabileste orientarea cu ajutorul variabilelor de clasa prezentate mai sus - valoarea initiala a barei de scroll , care trebuie sa fie intre valorile minima si maxima ale barei - latimea sau inaltimea generala a casetei folosite pentru modificarea valorii barei de scroll ; in cazul in care se foloseste marimea predefinita a acestei casete vom folosi valoarea 0 pentru acest al treilea argument - valoarea minima a barei de scroll - valoarea maxim a barei de scroll

In exemplul de mai jos se creaza o bara de scroll orizontala . Pentru a afisa bara de scroll pe toata latimea ecranului trebuie sa folosim un administrator de dispunere - si se va folosi GridLayout pentru a imparti ecranul in 15 linii iar bara noastra de scroll va acoperi prima linie astfel creata a ecranului ; caseta care gliseaza pe bara noastra de scroll va fi initial la o cincime din lungimea barei si va avea ca latime tot o cincime din lungimea barei , lucru setat din constructorul folosit pentru crearea barei noastre : import java.awt.*; public class BaraScroll extends java.applet.Applet { GridLayout admin=new GridLayout(15,1); Scrollbar bara=new Scrollbar(Scrollbar.HORIZONTAL,20,20,1,100); public void init() { setLayout(admin); add(bara); } } Si clasa Scrollbar ofera cateva metode practice cum ar fi : metoda getValue() - returneaza valoarea curenta a barei de derulare . metoda setValue(int) - seteaza valoarea curenta a barei

SUPRAFETE DE DESENARE Aceste componente sunt in general folosite ca loc pentru afisarea de imagini sau animatii . Bineinteles ca putem desena si pe alte componente - ca de exemplu in fereastra Applet - insa obiectele Canvas ( aceasta fiind clasa responsabila de implementarea suprafetelor de desenare ) sunt cele mai simplu de folosit in acest scop . Pentru a folosi o suprafata de desenare trebuie mai intai sa cream o subclasa a clasei Canvas ; aceasta subclasa se poate ocupa de toate operatiunile de desenare care trebuie sa aiba loc in metoda sa paint() . Dupa ce s-a creat o subclasa Canvas aceasta poate fi folosita in aplicatia noastra prin apelarea constructorului sau si prin adaugarea noului obiect Canvas intr-un container . Pentru a exemplifica teoria de mai sus sa studiem putin applet urmator ; acesta deseneaza o cruce in centrul ferestrei Applet si poate muta centru acesteia daca fereastra care publica appletul este redimensionata : import java.awt.*; public class Cruce extends java.applet.Applet { GridLayout admin=new GridLayout(1,1); canvasNou suprafata=new canvasNou();

public void init() { setLayout(admin); add(suprafata); } } class canvasNou extends java.awt.Canvas { public void paint(Graphics ecran) { int x=getSize().width/2; int y=getSize().height/2; ecran.setColor(Color.blue); ecran.drawLine(x-10,y,x-2,y); ecran.drawLine(x+10,y,x+2,y); ecran.drawLine(x,y-10,x,y-2); ecran.drawLine(x,y+10,x,y+2); } } Acest applet contine in codul sau sursa doua clase ; prima dintre ele :- Cruce , este chiar appletul insusi . A doua clasa este o clasa creata de noi ca fiind o subclasa a clasei Canvas . Clasa Cruce creaza un obiect GridLayout care va fi stabilit drept administrator de dispunere cu ajutorul metodei setLayout() , creaza un obiect de tipul celei de a doua clase create in applet si apoi adauga acest obiect in containerul desemnat de insasi fereastra Applet . Datorita folosirii administratorului de dispunere suprafata de desenare numita "suprafata" va cuprinde de fapt toata suprafata ferestrei appletului . In cadrul clasei canvasNou se determina mai intai mijlocul ferestrei Applet - lucru facut dinamic astfel incat totdeauna , indiferent de eventuala redimensionare a ferestrei , variabilele x si y vor contine coordonatele corecte pentru jumatatea laturilor ferestrei . Tot aici este setata si culoare pentru desenare , culoarea albastra . Trebuie atrasa atentia ca aceasta metoda - ca si metodele de desenare propriu-zisa a liniilor ce compun vrucea - este apelata pentru obiectul de tip Graphics al metodei paint() si nu pentru suprafata de desenare . Obiectul ecran , de tipul Graphics , se ocupa de toate eventualele operatii de desenare care au loc pe obiectul suprafata de desenare . Finalul clasei canvasNou se ocupa de desenarea directa a celor patru linii care formeaza crucea , fiecare linie avand cate 6 pixeli lungime si terminandu-se la 4 pixeli de punctul care reprezinta exact centrul ferestrei .

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