Administratie | Alimentatie | Arta cultura | Asistenta sociala | Astronomie |
Biologie | Chimie | Comunicare | Constructii | Cosmetica |
Desen | Diverse | Drept | Economie | Engleza |
Filozofie | Fizica | Franceza | Geografie | Germana |
Informatica | Istorie | Latina | Management | Marketing |
Matematica | Mecanica | Medicina | Pedagogie | Psihologie |
Romana | Stiinte politice | Transporturi | Turism |
Un applet reprezinta un program scris in limbaj Java care isi poate afisa rezultatele intre limite bine determinate intr-o pagina de Web. Astfel, un applet ruleaza intr-un dreptunghi de dimensiune specificata in pagina de Web in care este inglobat.
Java a fost conceput pentru a oferi un inalt grad de securitate. Posibilitatea de a executa cod luat de pe Internet pe calculatorul clientului poate deschide cutia Pandorei pentru acesta. De aceea, appleturilor le-au fost limitate capabilitatile prin interzicerea unor actiuni cum ar fi scrierea si/sau citirea de pe harddisk-ul clientului, citirea/scrierea unor variabile de sistem, limitarea comunicatiei prin Internet la calculatorul de pe care a fost preluat appletul, avertizari ale browserelor ca o fereastra a fost deschisa de applet s.a. Daca ar fi fost eliminate complet aceste capabilitati, limbajul ar fi fost serios limitat in actiunile sale. Din fericire, echipa de la Sun ne ofera o solutie : doua tipuri de programe Java. Unul din tipuri, cel care va fi executat prin Internet va fi lipsit de posibilitatile de mai sus, iar celalalt va putea fi executat doar pe calculator ca un program obisnuit, va fi lipsit de limitarile appleturilor dar nu va putea fi distribuit prin Internet. Primul se numeste applet iar cel de-al doilea aplicatie. Limitarea aplicatiilor prin imposibilitatea de a fi executate prin Internet rezulta din capacitatile acestora : acestea putand scrie pe harddisk, ar putea produce pagube ireparabile. O alta limitare a aplicatiilor este aceea ca ele nu beneficiaza de suportul grafic integrat al browserelor, lasandu-se in seama programatorului rezolvarea acestei probleme.
Iata un prim exemplu de aplet:
import java.applet.Applet;
import java.awt.Graphics;
public class PrimulAplet extends Applet
Metoda paint este mostenita de clasa Applet (de la clasa Component) si se foloseste pentru a desena obiecte. Ea are antetul public void paint(Graphics g). Aici am suprascris-o (iata deci un exemplu de polimorfism!) pentru a executa ceea ce dorim noi.
Functia care realizeaza afisarea unui text este drawString (functie membra a clasei Graphics), ce primeste ca parametri textul de afisat si coordonatele x si y unde textul respectiv va fi scris pe ecran.
Pentru a vedea rezultatele rularii
acestui aplet, trebuie ca fisierul HTML sa contina
urmatoarea linie:
<applet code='PrimulAplet.class' width=150
height=25></applet>
Putem introduce in sursa HTML parametrii care vor fi transmisi apletului,
astfel:
<applet >
<param name=titlu value='Acesta este primul meu aplet'>
</applet>
Atunci modificam codul apletului folosind functia
getParameter(String nume), membra a clasei Applet:
public class PrimulAplet extends Applet
public void paint(Graphics g)
}
Intr-un aplet java nu exista o functie main (cum este in C++ sau in aplicatiile java), care determina apelul celorlalte functii. Atunci care este ordinea in care vor fi executate functiile?
Executia unui aplet este marcata de cateva evenimente importante generate de catre browser. La intalnirea etichetei <applet>, browserul incarca fisierul necesar rularii apletului (fisierele .class). Apletul nu poate rula pana cand codul nu a ajuns pe calculatorul client.Dupa incarcarea codului, apletul este apelat automat pentru initializare prin functia init(). Este momentul in care apletul isi pregateste parametrii si obtine de la sistem resursele necesare rularii. In exemplul nostru functia init citeste parametrul titlu transmis apletului de fisierul HTML.
Dupa ce
initializarea a fost terminata, browserul trimite catre aplet o comanda de
pornire (functia start()). Un
aplet ruleaza atat timp cat navigatorul este activ. La schimbarea paginii
curente, apleturile din vechea pagina primesc o comanda de oprire temporara
(functia stop()). La inchiderea browserului este
lansata functia destroy() care distruge toate
variabilele alocate, eliberand memoria. Toate aceste functii
sunt definite in clasa Applet si sunt apelate automat de sistem. Daca
sunteti atenti, atunci cand Internet Explorer incarca un aplet java, scrie pe
bara de jos mai intai 'Applet initialized', apoi 'Applet
started', care va sta scris atata vreme cat apletul este activ. Daca
apasati butonul 'Refresh', va scrie 'Applet stopped', si
apoi va trece iar la initializare (cu init()) si va
porni din nou apletul (cu start()).
Orice aplet Java reprezinta deci un nou tip de obiect,
derivat din obiectul standard Applet. Sa desenam acum
pe ecran diferite obiecte grafice. Pentru aceasta, sa folosim urmatoarele
functii, care au fost definite in clasa java.awt.Graphics astfel:
- public abstract void drawLine(int x1, int y1, int x2, int y2); deseneaza o
linie de la punctul (x1,y1) la punctul (x2,y2), cu culoarea curenta (vom vedea
cum o putem schimba);
- public void drawRect(int x, int y, int width, int height); deseneaza un
patrat cu coltul din stanga sus (x,y) si de latimea width
si inaltimea height;
- public abstract void fillRect(int x, int y, int width, int height); deseneaza
un patrat plin;
- public abstract void drawRoundRect(int x, int y, int width, int height, int
arcWidth, int arcHeight); deseneaza un patrat cu colturile rotunde;
- public abstract void fillRoundRect(int x, int y, int width, int height, int
arcWidth, int arcHeight); deseneaza un patrat plin cu colturile rotunde;
- public void draw3DRect(int x, int y, int width, int height, boolean raised);
daca parametrul raised are valoarea true, deseneaza un patrat cu umbra (asa cum
sunt butoanele); iar daca este false, deseneaza un patrat ca un buton apasat;
- public void fill3DRect(int x, int y, int width, int height, boolean raised);
un patrat plin cu umbra;
- public abstract void drawOval(int x, int y, int width, int height); deseneaza
un oval cu parametri specificati (desigur ca daca width si height sunt egale,
va fi desenat un cerc);
- public abstract void fillOval(int x, int y, int width,
int height); un oval (cerc) plin;
- public abstract void drawPolygon(int xPoints[], int yPoints[], int nPoints);
deseneaza un poligon cu nPoints colturi definite de vectorii xPoints si
yPoints;
- public abstract void fillPolygon(int xPoints[], int yPoints[], int nPoints);
un poligon plin.
- public abstract void setColor(Color c); putem
schimba culoarea curenta .Pentru aceasta trebuie sa cunoastem mai intai clasa
Color, care face parte tot din pachetul java.awt. Clasa Color defineste
constante corespunzatoare culorilor uzuale: white, lightGray, gray, darkGray,
black, red, pink, orange, yellow, green, magenta, cyan si blue. Astfel, de
exemplu, pentru a seta culoarea curenta pe rosu vom scrie linia g.setColor(Color.red), unde g este un obiect de tipul
Graphics. Putem seta culoarea curenta pe o culoare care nu a fost definita ca o
Color c = new Color(123,200,255).
Culoarea de background a apletului se seteaza cu ajutorul functiei setBackground(Color c), mostenita de clasa Applet. Acesta
linie trebuie scrisa in corpul metodei init() pentru
ca apletul trebuie sa stie inca de la initializare care este culoarea de
background (nu poate fi schimbata dupa aceea); Acum
aveti destule cunostinte pentru a putea desena cu orice culoare obiecte grafice
pe ecran. Va recomand sa construiti apleturi folosind
functiile prezentate si eventual si alte functii definite in clasele Graphics
si Color. Iata un exemplu :
import java.awt.*;
import java.applet.Applet;
public class Desene extends Applet
public void paint(Graphics
g) ;
int ypoli[]=;
g.fillPolygon(xpoli,ypoli,7);
Color c = new Color(100,20,200);
g.setColor(c);
g.drawOval(400,50,50,50);
}
}
In continuare , vom invata prin intermedul unui exemplu cum putem crea interactiune cu utilizatorul folosind butoane, campuri de text etc
Triunghiul lui Sierpinski
Se da un triunghi oarecare. Se imparte in 4 triunghiuri de arie egala ducand cele trei linii mijlocii ale triunghiului. Se repeta constructia pentru triunghiurile mici formate cu exceptia triunghiului format numai din linii mijlocii. Se coloreaza triunghiurile care se elimina cu o culoare, lasand necolorate suprafetele care nu se elimina. Se repeta procedeul de un anumit numar de ori.
Puteti modifica urmatorii parametri: coordonatele varfurilor triunghiului mare si numarul de iteratii. Am notat cu A de coordonate xa,ya varful de sus, cu B de coordonate xb,yb varful din stanga jos si cu C de coordonate xc,yc varful din dreapta jos.
Dimensiunea apletului este de 500 x 500 de pixeli
Deoarece apleturile java trebuie sa fie portabile relativ la sistemul de operare, orice mediu de dezvoltare Java furnizeaza clase pentru crearea elementelor de baza necesare unei interfete grafice. Aceste elemente includ: etichete (labels), campuri de text (text fields), butoane (buttons), radio butoane (radio buttons), cutii de selectie (check boxes), meniuri de selectie (choice menus) etc. Toate aceste elemente sunt incluse, in pachetul java.awt.
Etichete
O
eticheta se creeaza apeland constructorul clasei Label, in felul urmator:
Label eticheta = new Label(str,
align); unde str este o variabila de tip String care defineste sirul de
caractere care va fi scris pe aceasta eticheta, iar align este una dintre
valorile Label.LEFT, Label.CENTER sau Label.RIGHT, reprezentand alinierea
etichetei la stanga, in centru sau la dreapta.
Dupa crearea etichetei, aceasta trebuie adaugata apletului scriind in cadrul
functiei init() urmatoarea linie: add(eticheta).
Dupa cum puteti vedea, eticheta creata mai sus va fi afisata pe suprafata apletului in stanga, in centru sau in dreapta. Acest lucru nu va da prea multa libertate. De exemplu, cum puteti afisa o eticheta la anumite coordonate si cum puteti seta latimea si inaltimea etichetei dupa anumite valori? Atunci cand creati un aplet, Java creeaza si asigneaza in mod automat un layout implicit. Puteti seta layout-ul ca avand diferite valori, printre care enumar FlowLayout, GridLayout, BorderLayout, CardLayout, GridBagLayout. Acestea sunt clase care fac parte din pachetul java.awt. Prin urmare le puteti gasi acolo. Eu nu imi propun sa explic aceste clase pentru ca personal nu le folosesc, preferand sa am libertatea de a seta coordonatele si dimensiunile. Cum se face acest lucru? Pentru aceasta, trebuie sa nu fie setat nici un layout, ceea ce se face prin comanda setLayout(null). Apelati aceasta functie prima in init() si va va permite sa dati ce coordonate si dimensiuni doriti etichetelor. Haideti incetul cu incetul sa construim apletul pe care vi l-am propus:
import java.applet.Applet;
import java.awt.*; public class proba extends Applet
}
Deci in exemplul de mai sus am creat mai intai doua obiecte de tip Label. Apoi, in cadrul metodei init() am setat layout-ul pe null. Dintre metodele clasei Label, mai folosite sunt:
public void setText(String str); seteaza sirul de scris pe str
public String
getText(); returneaza sirul
afisat.
Clasa Label mosteneste clasa Component, deci si toate metodele
implementate de aceasta.
Clasa Component reprezinta o componenta generica ce
are ca atribute: coordonata x, coordonata y, latime, inaltime, culoare de
foreground, culoare de background, font, vizibilitate etc.
Printre metodele implementate de clasa Component, mai folosite sunt:
public void move(int x, int y); muta obiectul la coordonatele x si y specificate;
public void resize(int latime, int inaltime); redimensioneaza latimea si inaltimea cu valorile specificate;
public
synchronized void reshape(int x, int y, int latime, int inaltime); muta si redimensioneaza obiectul la valorile
specificate.
Prin
urmare, clasa Component ofera mai multe atribute necesare claselor de tip
Label, Button etc, si chiar si clasa Applet mosteneste aceasta clasa, chiar
daca nu direct (clasa Applet mosteneste clasa Panel, care mosteneste clasa
Container, care mosteneste clasa Component). Daca cititi fisierele applet.java,
component.java, label.java etc. va veti clarifica in
ceea ce priveste mostenirile si metodele acestor clase. Revenind la exemplul
nostru, dupa ce am stabilit textul de scris si pozitia si dimensiunile
obiectului, acesta trebuie adaugat apletului prin add(labelxa).
Adaugati in acelasi fel etichetele labelxb, labelyb, labelxc, labelyc,
labelIteratii, corespunzand celorlalte etichete pe care le-ati vazut in aplet.
Apoi compilati programul si rulati-l, apelandu-l dintr-un fisier .html in care sa aveti linia:
<applet code=triunghi.class width=500 height=500></applet>
Campuri de text
Obiectele de tip TextField sunt asemanatoare cu cele de tip Label. Deci le veti crea astfel:
TextField textFieldxa = new textField();
TextField textFieldya = new textField();
In
corpul functiei init() veti seta textul implicit, coordonatele si dimensiunile,
si apoi le veti adauga apletului astfel:
textFieldxa.setText('250');
textFieldxa.reshape(42,36,36,24);
add(textFieldxa);
textFieldya.setText('100');
textFieldya.reshape(88,36,36,24);
add(textFieldya); Creati si
celelalte campuri de text, si anume textFieldxb, textFieldyb, textFieldxc,
textFieldyc si textFieldIteratii.
Butoane
Asa
cum va asteptati, butoanele pot fi create in mod asemanator cu etichetele si
campurile de text:
Button buttonRedeseneaza = new Button();
buttonRedeseneaza.setLabel('Redeseneaza');
buttonRedeseneaza.reshape(356,36,96,24);
add(buttonRedeseneaza);
Sa vedem acum partea
cea mai interesanta,
si anume: interactiunea cu utilizatorul: cum putem citi datele introduse in
campurile de text? Pentru a executa o actiune de gen apasarea unui buton, se
apeleaza metoda action, astfel:
public boolean action(Event
evt, Object arg);
Primul parametru, evt, este un obiect de tip Event, care desemneaza un eveniment primit de aplet, de exemplu poate fi vorba de un eveniment de la tastatura sau de la mouse. Campul target al unui obiect de tip Event indica tipul obiectului care a generat evenimentul. Pentru a determina acest obiect, folosim cuvantul cheie instanceof astfel: if (evt.target instanceof Button). Daca acesta este adevarat, pentru a vedea exact care buton a fost apasat, de exemplu se scrie linia: if (arg == 'Redeseneaza') pentru a vedea daca a fost apasat butonul cu textul 'Redeseneaza'. In exemplul prezentat nu avem mai multe butoane, deci nu e nevoie sa folosim aceasta din urma linie, dar o puteti exersa construind mai multe butoane si adaugand evenimente diferite pentru fiecare dintre ele. Sa revenim la exemplul nostru. Dupa ce ati construit etichetele, campurile de text si un buton, sa citim datele introduse.Pentru aceasta, mai declarati ca variabila a apletului variabila sir de tip String pentru a citi in ea datele introduse intr-un camp de text: String sir;Apoi adaugati urmatoarele doua metode apletului: public boolean action(Event evt, Object arg)
return false;
} public void paint(Graphics g)
Functia
action citeste sirul de caractere introdus in campul textFieldxa si il introduce in variabila sir declarata anterior. Apoi
apeleaza functia repaint(). Aceasta este definita in
clasa Component si executa metoda paint(Graphics g). Nu
mai ramane deci decat sa apelam functia drawString (pe care am explicat-o
anterior) in corpul functiei paint. Sa citim acum
datele introduse in campurile corespunzatoare coordonatelor si sa desenam un
triunghi.
Trebuie sa declaram mai intai 6 variabile pentru cele
6 coordonate:
int xa, ya, xb, yb, xc, yc;
In locul variabilei declarate anterior String
sir; vom declara Integer temp;
pentru a citi datele introduse. Metoda action va
deveni:
public
boolean action(Event evt, Object arg)
return false;
}
Am citit in temp
valoarea introdusa in campul textFieldxa ca Integer, si apoi am trecut-o in
variabila xa transformand-o mai intai in int. Transformand textul introdus
intr-o valoare de tip int, realizam si o validare, in sensul ca daca
introduceti in vreunul din campuri o alta valoare decat un numar intreg, ea va
fi ignorata. Functia paint devine:
public void paint(Graphics g)
Rulati
tot ce am facut pana acum si veti vedea ca apasand
butonul veti desena un triunghi, iar daca modificati valorile campurilor si
apasati din nou butonul, triunghiul va avea alta forma. Pentru ca triunghiul sa
apara de prima data (pentru niste valori initiale ale coordonatelor), fara sa
mai fie nevoie sa mai apasati o data butonul, trebuie sa copiati liniile de
tipul:
temp=Integer.valueOf(textFieldxa.getText());
xa=temp.intValue();
astfel incat ele sa apara si la sfarsitul functiei init(). Initial valorile xa, ya, xb, yb, xc, yc au valoarea zero ( la declararea unei variabile, acesteia i se asigneaza
valoarea 0 sau null) si de aceea nu apare nimic desenat. In sfarsit, sa desenam figura care reprezinta Triunghiul lui Sierpinski.
Pentru aceasta trebuie definita o functie recursiva care imparte
triunghiul initial in 4 triunghiuri egale si care se autoapeleaza pentru toate
triunghiurile, exceptand triunghiul din mijloc. Aceasta functie este data mai jos:
void Sierpinski(Graphics g,int xa,int ya,int xb,int yb,int
xc,int yc,int iteratii) ;
int ypoly[]=;
g.fillPolygon(xpoly,ypoly,3); //umplerea triunghiurilor
exterioare cu culoarea implicita
if(iteratii>1)
Aceasta functie trebuie apelata din functia paint, astfel incat ea
devine:
public void paint(Graphics g)
unde nr_iteratii este o variabila de tip int a carei valoare o citim la fel ca
si xa, ya etc. Alte clase inrudite cu cele prezentate mai sunt: CheckBox,
Choice, TextArea, Menu, MenuItem, MenuBar, ScrollBar etc.
Tema :
Ansamblati toate functiile date anterior si rulati applet-ul rezultat .
Acest document nu se poate descarca
E posibil sa te intereseze alte documente despre: |
Copyright © 2024 - Toate drepturile rezervate QReferat.com | Folositi documentele afisate ca sursa de inspiratie. Va recomandam sa nu copiati textul, ci sa compuneti propriul document pe baza informatiilor de pe site. { Home } { Contact } { Termeni si conditii } |
Documente similare:
|
ComentariiCaracterizari
|
Cauta document |