QReferate - referate pentru educatia ta.
Cercetarile noastre - sursa ta de inspiratie! Te ajutam gratuit, documente cu imagini si grafice. Fiecare document sau comentariu il poti downloada rapid si il poti folosi pentru temele tale de acasa.



AdministratieAlimentatieArta culturaAsistenta socialaAstronomie
BiologieChimieComunicareConstructiiCosmetica
DesenDiverseDreptEconomieEngleza
FilozofieFizicaFrancezaGeografieGermana
InformaticaIstorieLatinaManagementMarketing
MatematicaMecanicaMedicinaPedagogiePsihologie
RomanaStiinte politiceTransporturiTurism
Esti aici: Qreferat » Documente informatica

Aplicatii Java - Appleturi



Aplicatii Java - Appleturi


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 constanta apeland unul dintre constructori (vezi fisierul Color.java), ca exemplu:

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


Problema


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 .

Nu se poate descarca referatul
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 }