Apleturi Java

3. Exemplul 1: un aplet simplu

In primul exemplu voi explica modalitatea de a scrie un text, de a desena diferite forme geometrice etc.

Clasele din pachetele despre care tocmai am vorbit sunt folosite intr-un program prin includerea la inceput a unei linii de forma: import numeClasa;
Clasa java.applet.Applet este clasa de baza din care deriva orice aplet, deci ea trebuie inclusa intotdeauna cand construim un aplet. Pentru a putea folosi elemente grafice, vom mai include clase din pachetul java.awt.

Iata un prim exemplu de aplet:
import java.applet.Applet;

import java.awt.Graphics;

public class PrimulAplet extends Applet{
    public void paint(Graphics g){

        g.drawString("Primul aplet",50,25);

    }

}

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{
    private String sir;

    public void init(){

        sir=getParameter("titlu");

        if(sir==null) sir="Primul aplet";

    }

    public void paint(Graphics g){

        g.drawString(sir,50,25);

    }

}

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.

Pentru alte functii definite in clasa Graphics, cititi fisierul Graphics.java (din directorul java\awt\).

Putem schimba culoarea curenta cu ajutorul functiei definita tot in clasa Graphics astfel:
public abstract void setColor(Color c);

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 avem destule cunostinte pentru a putea desena cu orice culoare obiecte grafice pe ecran. Iata un exemplu! Aici puteti vedea apletul ruland.

import java.awt.*;
import java.applet.Applet;

public class Desene extends Applet {

 private String mesaj;

 public void init() {
     mesaj = getParameter("titlu");

     if(mesaj==null) mesaj="Uite ce-am invatat sa desenez in Java! :)) :";

     setBackground(Color.cyan);

 }

 public void paint(Graphics g) {
     g.setColor(Color.black);

     g.drawString(mesaj,10,15);

     g.setColor(Color.blue);

     g.drawLine(10,50,30,100);

     g.drawRect(50,50,50,50);

     g.setColor(Color.red);

     g.fillRoundRect(120,50,50,50,20,20);

     g.setColor(Color.magenta);

     g.fill3DRect(190,50,50,50,true);

     g.setColor(Color.pink);

     int xpoli[]={250,300,320,380,320,250,250};

     int ypoli[]={50,50,80,80,120,100,50};

     g.fillPolygon(xpoli,ypoli,7);

     Color c = new Color(100,20,200);

     g.setColor(c);

     g.drawOval(400,50,50,50);

 }

}

1