Sunteți pe pagina 1din 89

1

i n sfrit ... Java


Scurt istoric
Java este un limbaj de programare orientat pe obiecte asemntor limbajului
C++. El a fost dezvoltat de firma Sun, prima semnalare a apariiei sale datnd din
1991. Limbajul a fost dezvoltat n cadrul unui proiect denumit Green, obiectivul
acestuia fiind dezvoltarea unui limbaj pentru programarea echipamentelor electrice
i electronice "inteligente" i comunicarea cu acestea. Punctul de pornire a fost
limbajul C++, dar Java aduce acestuia un volum semnificativ de modificri, mai ales
n sensul simplificrii, creterii rigurozitii i a portabilitii. Conductorul proiectului,
Green James Gosling, este considerat printele limbajului Java. Noului limbaj i s-a
dat la nceput numele Oak (eng. stejar) dar acesta a fost revendicat de o alt firm i
realizatorii l-au schimbat n Java, aluzie la sursa buturii favorite a memrilor echipei cafeaua.

Caracteristicile noului limbaj au intrat ns i n atenia i firmelor preocupate


de dezvoltarea Internetului. A realiza aplicaii avnd un cod redus, uor deci de
transportat prin reele i care pot fi rulate pe diferite tipuri de calculatoare i de
sisteme de operare reprezenta o problem dificil. Dar nu i pentru echipa care a
creat Java, care n 1994 a pus la punct o aplicaie destinat navigrii prin Internet
(denumit HotJava) care integra suportul necesar executrii n pagina de web a
unor mici aplicaii, denumite applet-uri. A mai trebuit un pic de sprijin din partea
firmei Netscape, al crui program de navigare n Internet era deja larg rspndit i
succesul imediat al limbajului Java a fost asigurat.

Tratarea programelor scrise n Java


Un program scris n limbajul Java este supus unei compilri n urma creia se
obine un cod intermediar (cod de octei) care este apoi interpretat i executat de o
aplicaie specializat, care poate fi asimilat unui procesor virtual. Aceast aplicaie

2
poart denumirea de "main virtual java" (eng. Java Virtual Machine, JVM
denumit mai nou JRE Java Runtime Environment).

Codul rezultat n urma

compilrii poate fi transferat i apoi executat pe orice calculator pe care exist


instalat JVM. Site-ul firmei Sun ofer spre descrcare, gratuit, aplicaia JVM pentru
toate sistemele de operare majore.

Realizarea unei aplicaii elementare n Java


Aplicaiile Java pot fi realizate n mai multe moduri. Cel mai economic mod
este scrierea aplicaiei ntr-un editor (Notepad este suficient) urmat de compilare i
execuie, ambele realizate prin comenzi n fereastra Command.
Exemplu:

Fiierul se salveaz sub numele Grideala.java. Numele fiierului coincide cu


numele clasei coninute n acesta.

compilare

executare

Aplicaiile scrise n Java conin una sau mai multe clase. De regul clasele
sunt coninute n fiiere distincte ale cror nume coincid cu numele claselor. Una
dintre clase va conine metoda principal, main(), care definete punctul de nceput a
aplicaiei.
Dei iniierea n Java folosind un editor simplu, compilatorul javac i
procesorul virtual java poate fi o abordare n nvarea limbajului, n cele ce urmeaz
aplicaiile vor fi dezvoltate folosind unul dintre mediile integrate, NetBeans.

Netbeans i JDK - instalare i configurare


JDK (Java Development Kit) este un ansamblu de instrumente software
destinat dezvoltrii de aplicaii n Java oferit de firma Sun Microsystems. Pachetul
poate fi descrcat de pe site-ul firmei:
(http://java.sun.com/javase/downloads/index.jsp).
Site-ul firmei Sun ofer spre descrcare i versiuni de JRE (Java Runtime
Environment, procesorul virtual Java necesar rulrii aplicaiilor) dar, pentru
dezvoltarea de aplicaii cu NetBeans trebuie descrcat i instalat JDK. De altfel n
kitul coninnd JDK exist i JRE.
Mediul integrat de dezvoltare NetBeans poate fi descrcat de la adresa
http://www.netbeans.info/downloads/index.php. El se instaleaz n mod obligatoriu
dup instalarea JDK. Mediul face apel de altfel la instrumentele de dezvoltare de
aplicaii integrate n JDK.

Realizarea unei aplicaii simple n NetBeans


Aplicaia deja realizat poate fi uor refcut folosind NetBeans. nainte de a
realiza ns noua aplicaie este bine s creai pe disc un director care s conin
toate proiectele pe care le vei realiza. La crearea unui nou proiect, NetBeans va
crea automat un director n care va plasa componentele acestuia.
Pai necesari realizrii unui proiect sunt urmtorii:

1.

Dup pornirea mediului se selecteaz File / New project:

2.

n fereastra New Project se selecteaz categoria (General) i tipul

proiectului (Java Application)

5
n noua ferestr se indic numele proiectului (Greutate), directorul n care va
fi creat (D:\ProiecteJava) i se deselecteaz caseta de validare Create Main Class
deoarece clasa principal va fi creat ulterior.
Rezultatul va fi crearea componentelor proiectului Greutate.

3.

n meniul contextual afiat la selectarea proiectului Greutate (clic cu

butonul drept) se selecteaz New / Java Class:

n fereastra care se afieaz se definete numele clasei - tot Greutate


deoarece va fi clasa principal a proiectului (va conine main()) i se indic numele
pachetului (Package, echivalentul n Java a spaiului de nume din C++ introdus prin
directiva using) care va conine clasa. Mediul NetBeans permite pstrarea claselor
aplicaiei ntr-un pachet implicit, DefaultPackage, dar este bine ca ntr-un proiect
clasele s fie dispuse ntr-un pachet creat n acest scop i nu n cel implicit. Odat
introdus numele pachetului, NetBeans va crea un director purtnd numele acestuia.

Rezultat:

Clasa creat nu conine deocamdat dect un constructor.

4. Se adaug clasei metoda main():

Metoda main() trebuie n continuare completat:

5. Se salveaz i se execut aplicaia:

8
Save All

Run Main Project (F6)

n NetBeans consola este fereastra Output. n aceast fereastr vor fi scrise


att mesajele mediului de programare generate n timpul procesrii fiierelor
aplicaiei (compilare, execuie) ct i irurile de caractere afiate prin apelul
metodelor System.out.print() sau System.out.println().

Observaie: Proiectele realizate cu NetBeans vor fi afiate sub forma unui


arbore n fereastra Projects. Butonul

realizeaz construirea executabilului i

executarea proiectului principal. Pentru a impune proiectul principal se selecteaz


File / Set Main Project sau se afieaz meniul contextual aferent proiectului (clic cu
butonul drept pe numele proiectului) i se selecteaz opiunea Set Main Project.

Scurt prezentare a limbajului Java


Fiind derivat din C++, limbajul Java nu pune probleme dificile celor care
cunosc acest limbaj. De aceea prezentarea elementelor fundamentale ale limbajului
va fi realizat foarte succint.

Comentarii
Programele Java conin explicaii sub forma unor comentarii. Acestea vor
asigura n timp nelegerea diferitelor metode i rolul funcional al variabilelor folosite.
Exemplu de aplicaie scris folosind comentarii:
class Greutate
{
/* Clasa Greutate permite calculul greutatii ideale.
Formula folosita determina greutatea pentru barbati, pentru femei rezultatul
trebuie inmultit cu 0.9.
*/
public static void main ( String[] args )
{
int h, v; // h - inaltimea in cm si v - varsta in ani
double g; // greutatea in kg
h = 178;
v = 36;
g = 50 + 0.75 * (h-150) + 0.25 * (v - 20);
System.out.println("Greutatea ideala (barbat) = " + g + " kg");
System.out.println("Greutatea ideala (femeie) = " + 0.9*g + " kg");
}
}

// Sfarsit main
// Sfarsit clasa Greutate

ntr-un program scris n Java pot fi folosite dou tipuri de comentarii:


comentarii "n linie", introduse prin //. Un astfel de comentariu se ncheie
la sfritul liniei curente;
comentarii pe unul sau mai multe rnduri consecutive. Zona care conine
comentariul este delimitat prin /*

(comentariu) */.

10
De regul se folosesc comentariile n linie, cel de-al doilea tip fiind folosit
frecvent n timpul depanrii programelor mari i complexe, pentru a suprima din
program anumite zone.
Comentariile care ncep cu /** sunt prelucrate de aplicaia javadoc pentru
realizarea automat a unei pagini web coninnd comentariile programatorului.
Aceast facilitate este folosit pentru documentarea rapid a programelor mari,
compuse din mai multe clase.

Variabile
n Java numele unei variabile, metode sau clase poate fi orice combinaie de
litere i cifre, ncepnd cu o liter.

Caracterele '_' (underscore) i '$' sunt

considerate litere i pot intra n construcia numelor. Nu pot fi folosite ca nume


cuvintele rezervate folosite la definirea limbajului.
abstract

double

int

strictfp

boolean

else

interface

super

break

extends

long

switch

byte

final

native

synchronized

case

finally

new

this

catch

float

package

throw

char

for

private

throws

class

goto

protected

transient

const

if

public

try

continue

implements

return

void

default

import

short

volatile

do

instanceof

static

while

true

false

null

11

Tipuri de date elementare


n Java, ca i n alte limbaje evoluate, sunt definite 8 tipuri de date elementare
(primitive):
Cuvnt cheie
pt. declarare

Descriere

Mrime/Reprezentare intern

(numere ntregi)
byte

ntreg reprezentat pe un octet 8-bii, repr. in compl. fa de 2

short

ntreg scurt

16-bii, repr. in compl. fa de 2

int

Intreg

32-bii, repr. in compl. fa de 2

long

ntreg lung

64-bii, repr. in compl. fa de 2


(numere reale)

float

Simpl precizie

32-bii, IEEE 754

double

Dubl precizie

64-bii IEEE 754


(alte tipuri)

char

Un caracter

16-bii, repr. Unicode

boolean

O valoare logic

true sau false

Spre deosebire de alte limbaje, n Java informaiile din tabelul precedent sunt
valabile indiferent de calculatorul pe care se execut programul.

Observaii asupra tipului char:


n Java un caracter se reprezint ncadrat ntre apostroafe. Astfel 'C' sau '&'
sunt caractere. Unele caractere nu au simbol grafic. Cele mai uzuale se pot totui
introduce folosind o succesiune de dou caractere (secven escape) astfel: '\n'
(LF), '\a' (bell), '\b' (backspace), '\f' (pagin nou, formfeed), '\r' (retur car, carriage
return), '\t' (tab orizontal), '\v' (tab vertical). Un exemplu n acest sens poate fi scris

12
pornind de la succesiunea de apeluri de metode care realizeaz afiarea pe ecran a
rezultatelor programului scris mai sus:
System.out.println("Gr. (barbat) = " + g + " kg");
System.out.println("Gr. (femeie) = " + 0.9*g + " kg");

System.out.println() asigur trecerea la linie nou dup afiarea irului de


caractere introdus ca i argument. Dac ns folosim un singur apel, acelai rezultat
se obine folosind secvena \n:
System.out.println("Gr. (barbat) = " + g + " kg\nGr. (femeie) = " + 0.9*g + " kg");

iruri
Pentru a utiliza un ir, n Java trebuie declarat i apoi realizat alocarea
memoriei necesare.
Exemple fundamentale:
int

a[];

//

Se poate scrie si int [] a;

a = new int[7];
int b[] = {1, 3, 4, 6, 10};

Pentru irul a se va rezerva n memorie o succesiune de 7 locaii. Deoarece


elementele irului a sunt de tip int, fiecare locaie va avea lungimea de 4 octei.
irul b a fost declarat i iniializat n acelai timp. Pentru elementele irului b
se vor rezerva 5 locaii de memorie consecutive.
Pentru referirea elementelor irurilor se folosesc indici.

Astfel, dup

declararea irului a se va putea scrie:


a[0] = 12;
a[2] = 21;
a[3] = a[0] + a[2];

irurile pot avea dou sau chiar mai multe dimensiuni. Exemplu:
int [ ] [ ] c;
c = new int [3] [4];
c[0] [2] = 17;
System.out.println("c(0,2) ="+c[0] [2]);

Lungimea unui ir, indiferent de coninutul acestuia, poate fi obinut folosind


proprietatea .length.

13
Exemplu:
for (i=0; i<a.length; i++)

Clasa String
n Java irurile de caractere sunt obiecte aparinnd clasei String. Declararea
unui ir de caractere poate fi realizat fie scriind:
String unu="Thomas ";

fie ca i n cazul declarrii i iniializrii obiectelor:


String doi;
doi = new String("Jerry");

Un ir de char (declarat char [ ]) poate fi transformat ntr-un obiect aparinnd


clasei String. Exemplu:
char data[] = {'a', 'b', 'c'};
String str = new String(data);

Unirea mai multor obiecte de tip String anterior definite se realizeaz folosind
operatorul '+', astfel:
String trei;
trei=unu+" & " + doi;

// rezultat "Thomas & Jerry"

Se pot defini desigur iruri de iruri. Declaraia String [ ] args care apare
sistematic n lista de parametri ai metodei main() este un bun exemplu.

Literali
n timpul scrierii unui program, programatorul folosete frecvent literali.
Literalii sunt valori aparinnd tipurilor primitive prezentate. Compilatorul analizeaz
aceste valori, le stabilete tipul, le convertete i le memoreaz n locaii din
memorie. De exemplu, n clasa Greutate aprea atribuirea:
h = 178;

14
Compilatorul va asocia literalului "178" tipul int., va face conversia n binar
corespunztoare i va memora rezultatul ntr-o zon din memorie avnd o lungime
de 4 octei. La fel, n expresia greutii:
g = 50.0+0.75*(h-150)+0.25*(v-20);
compilatorul va considera c 50.0, 0.75 i 0.25 sunt double (numere reale n dubl
precizie) iar 150 i 20 sunt int (numere ntregi).

Exemple fundamentale:
Literal

Tipul de dat

178

int

8864L

long

37.266

double

37.266D

double

87.363F

float

26.77e3

double

'c'

char

true

boolean

false

boolean

Operatorii limbajului Java


n definirea unui limbaj, stabilirea operatorilor care pot fi folosii la scrierea
expresiilor i a regulilor lor de utilizare reprezint o etap important. Limbajele de
nivel nalt folosesc un mare numr de operatori i chiar permit extinderea setului de
operatori pentru a putea scrie expresii n care intervin variabile aparinnd tipurilor
structurate (obiecte).

Operatorii matematici din Java


+ - * / % (modulo)
x % y furnizeaz restul mpririi ntregi a lui x la y.

15

Exemplu de utilizare a operatorului '%':

if((an % 4 == 0 && an % 100 !=0) || an % 400 == 0)


System.out.println(an + " este bisect.");
Operatorul % nu se aplic tipurilor float i double.

Operatorul "/" poate provoca trunchiere n cazul operanzilor ntregi.

Evaluarea expresiilor aritmetice se efectueaz de la stnga la dreapta


respectnd ordinea de evaluare normal.

Operatorii de comparare i logici


Operatorii de comparare (relaionali) din Java sunt : > >= < <= == !=
Operatorii de comparare au o prioritate inferioar celor aritmetici :
i < lim + 1 se evalueaz ca i

i < (lim + 1)

O expresiile n care intervine o succesiune de operatori logici && (i) sau o


succesiune de operatori || (sau) sunt evaluate de la stnga la dreapta i evaluarea
expresiei nceteaz cnd se tie deja valoarea de adevr a rezultatului.
&& e mai prioritar ca i || iar ambele sunt mai puin prioritare ca i operatorii
de comparaie.
Operatorul ! (negaie)
if (!corect) . . .

identic cu

if (corect == false) . . .

Conversiile de tip
Cnd

ntr-o

expresie

intervin

operanzi

de

tipuri

diferite,

operanzii

corespunznd unui tip mai restrictiv se convertesc automat spre tipul mai general
astfel nct nu se produce pierdere de informaie.

Dac rezultatul unei expresii este float sau double i este atribuit unei
variabile de tip ntreg, compilatorul va sesiza posibila pierdere de informaie i va
semnala o eroare.

Operatorii de conversie de tip (transtipaj sau cast)

16
(nume-tip) expresie
expresie este convertit n tipul specificat :
x = Math.sqrt((double)n)
alfa = (float)a / j ;

Operatorii de incrementare i de decrementare


++ i

--

n funcie de poziia operatorului fa de variabila incrementat, se realizeaz


pre i post incrementare (decrementare)
int n = 5 ;

x = n++ ;
atribuie 5 lui x

x = ++n ;
atribuie 6 lui x

Operatorii i expresiile de atribuire


Expresia :
i = i + 3;
n care variabila din stnga egalului se repet n dreapta acestuia se mai poate
scrie astfel :
i += 3 ;
+= este n acest caz un operator de atribuire.

n general n Java,
exp1 op= exp2 ;

echivaleaz cu

exp1 = exp1 op (exp2) ;


unde op este + - * / %.

Exemplu fundamental:
x *= y + 1 ;
echivaleaz cu :
x = x * (y + 1) ;
i nu cu
x=x*y+1;

17

Expresiile condiionale
Pentru a calcula expresia z = max(a, b) ;
se poate scrie

if (a > b)
max = a ;
else
max = b ;

Limbajul Java ofer i o alt cale :


max = (a > b) ? a : b ;

Instruciunile limbajului Java

Instruciunea de decidere - if
Ansamblul de instruciuni cuprinse ntre acolade formeaz o instruciune
compus sau un bloc de instruciuni.

Instruciunile din interiorul unui bloc de

instruciuni sunt executate n ordinea n care sunt scrise.

Variante de scriere a instruciunii if


if ( expLogica )
instruciune;

if (expLogica )
{
mai multe instruciuni
}

if (expLogica )
instruciune;
else
instruciune;

if (expLogica )
{
mai multe instruciuni
}
else
{
mai multe instruciuni
}

if (expLogica )
instruciune;

if (expLogica )
{

18
else
{
mai multe instruciuni
}

mai multe instruciuni


}
else
instruciune;

Indentarea (scrierea decalat) instruciunilor sau a blocurilor de


instruciuni din if nu este obligatorie dar are mare importan n nelegerea i
depanarea programului.

Instruciunea while
Instruciunea while permite realizarea unei structuri repetitive (ciclu)
condiionate anterior. Corpul ciclului poate fi executat o dat, de mai multe ori sau
de loc.
Exemplu fundamental:
int contor = 1;
while ( contor <= 3 )
{
System.out.println("Contor = "+contor);
contor = contor + 1; // sau mai bine contor++
}
System.out.println("La revedere!");

Sintaxa instruciunii while este:


while ( condiie )

instruciune

Condiia este o expresie logic.

Sintaxa instructiunii while


while ( condiie )
instruciune;

Instruciunea do

while ( condiie )
{
una sau m.
m.instruciuni
}

19

Pentru programarea unui ciclu poate fi folosit ntotdeauna instruciunea


while. Deoarece while ncepe prin executarea unui test, n cazul n care variabila
testat nu poate primi valori dect n interiorul ciclului, programatorul trebuie s-i dea
la nceput o valoare convenabil pentru a determina intrarea n ciclu. Exacutarea
instruciunilor din corpul ciclului va corecta automat valoarea iniial.
Pentru astfel de cazuri exist ns i o cale mai simpl, respectiv folosirea
instruciunii do.

Exemplu:
g = 9.81;
t = 0;
do
{
d = (g * t * t ) / 2;
System.out.println( t + " " + d);
t = t + 1;
}
while (d <= 500);

Instruciunea for
Instruciunea for este preferat ori de cte ori trebuie realizat un ciclu care
folosete un contor. Ea poate fi ns folosit ns n toate cazurile n care trebuie s
realizm un ciclu, i reprezint o modalitate compact i elegant de scriere a
acestora.
Dac naintea unui ciclu trebuie realizate mai multe iniializri, acestea pot
scrise n for una dup alta, desprite prin virgule:
class Suma
{
public static void main ( String[] args )
{
int [] a = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, sum;
for (i=0,sum = 0; i<a.length; i++)
sum = sum + a[i];
System.out.println("Suma elementelor sirului a este: "+sum);
}
}

20
Oricare dintre cele trei pri ale instruciunii for pot lipsi. Lipsa condiiei de
reluare este echivalent cu a scrie o condiie care este ntotdeauna adevrat.
Ieirea dintr-un astfel de ciclu se poate face folosind instruciunea break.
Exemplu:
for ( ; ; )
{
..
break;
..
}

Executarea instruciunii break provoac o ieire imediat din ciclul for. Ea


poate fi folosit i pentru a iei din ciclurile while sau do.

Instruciunea switch
Instruciunile de ciclare prezentate, while, do i for sunt folosite pentru
realizarea blocurilor de instruciuni a cror execuie ncepe cu prima linie i este
controlat de ctre programator.

Instruciunea switch este folosit tot pentru a

construi un bloc de instruciuni dar punctul de unde ncepe execuia depinde de


valoarea unei expresii avnd valori ntregi.
Sintaxa instruciunii este:

switch (expresie)
{
case constanta_1 : instruciuni
case constanta_2 : instruciuni
...
default : instruciuni;
}

Fiecare dintre punctele de unde poate ncepe execuia blocului este etichetat
printr-o constant avnd valoare ntreag. Dac expresia de testat corespunde
uneia dintre constante, execuia blocului ncepe din punctul indicat de aceasta.
Cazul default este facultativ.

21

Exemplu :
switch (t)
{
case 's' :
rez = Math.sin(Math.PI * x / 180.);
System.out.println("rezultatul este : "+rez);
break;
case 'c' :
rez = Math.cos(Math.PI * x / 180.);
System.out.println("rezultatul este : "+rez);
break;
case 't' :
rez = Math.sin(Math.PI * x / 180.)/Math.cos(3.14159 * x / 180.);
System.out.println("rezultatul este : "+rez);
break;
default:
System.out.println("Caracter incorect!");
}

Ca i n cazul ciclurilor, instruciunea break provoac o ieire imediat din


blocul realizat folosind switch.

Realizarea aplicaiilor complexe


O aplicaie scris n Java const dintr-o clas sau un ansamblu de clase. n
cazul n care aplicia cuprinde mai multe clase, una dintre ele va fi clasa principal,
respectiv va conine metoda static main().
Divizarea unei aplicaii n clase creaz premisa lucrului pe secvene de cod
de dimensiuni reduse, uor de realizat i mai ales de depanat. Fiecare clas este
specializat pe prelucrarea variabilelor clasei (membrii date ai clasei). Metodele
clasei sunt module de mici dimensiuni, fiecare avnd un rol funcional elementar.
Practic dezvoltarea unei clase nseamn dou lucruri:
1. identificarea variabilelor (membrilor date) care vor pstra proprietile
obiectelor care vor fi declarate n continuare i
2. scrierea unui ansamblu complet i coerent de metode care s asigure
crearea i evoluia membrilor date ai clasei.
Pentru a se executa codul dintr-o metod aceasta trebuie apelat. Apelul se
realizeaz de regul din alt metod a aceleiai clase sau a altei clase aparinnd
aplicaiei.

La scrierea apelului metodei, numele acesteia este precedat fie de

numele obiectului ale crui date trebuie prelucrate fie de numele clasei creia i

22
aparine metoda.
parametrii

Al doilea caz se refer la metode care prelucreaz eventual

transmii

momentul

apelului,

ca

cazul

metodelor

care

implementeaz funcii matematice (sin, cos etc.).


Metodele de acest ultim fel sunt declarate folosind declaraia static.
Structura lexical folosit la apelul unei metode poate fi deci fie
obiect.metoda(); fie clas.metod();
Exemple:
p1.translatez(3, 10); // abscisa si ordonata punctului p1 sunt modificate
y = r * Math.sin(x); // sin() este o metod static a clasei Math
k = Integer.parseInt(args[1]); // parseInt() este o met. static a clasei Integer

Vizibilitatea variabilelor
Vizibilitatea unei variabile se definete ca zona din program n care aceasta
este cunoscut deci poate fi accesat. Regulile privind vizibilitatea variabilelor n
Java pot fi reprezentate grafic.

zona de vizib. a
var. clasei

class vizvar {
declaraii variabile membre
public void metoda_1( declaratii parametri)

zona de vizib. a
param. metodei

declaraii variabile locale


zona de vizib. a var.
locale

catch (param. exceptie) {

zona de vizib. a
param. excepiei

}
Din punct de vedere al locului declarrii, o variabil poate fi membr a clasei
(declarat n afara oricrei metode) sau local (declarat n interiorul unei metode,
de obicei la la nceputul acesteia sau la nceputul unui bloc din interiorul acesteia).
Variabilele locale aparinnd unor blocuri separate sunt diferite, chiar dac
poart acelai nume. Se recomand totui folosirea unor nume de variabile distincte
i mai ales sugestive, care s ajute programatorul n urmrirea logicii programului.
Unei variabile membre a clasei i se aloc spaiu n memorie n momentul
crerii unei instane a clasei folosind operatorul new.

23
Variabilele locale exist pe timpul execuiei blocului n care au fost declarate
i i nceteaz existena n momentul ieirii din acesta.

Programarea n Java a aplicaiilor Windows


Cunotinele de programare deja prezentate permit nceperea scrierii de
aplicaii care posed o interfa grafic (n englez GUI, Graphical User Interface).
Sarcina nu este dintre cele mai simple, dar pot fi evideniate dou premise
favorabile:
a. exist un numr important de clase specializate n rezolvarea diferitelor
aspecte care vor aprea i
b. spectaculozitatea aplicaiilor va face relativ uoar depirea dificultilor.
Java Foundation Classes, prescurtat JFC este o colecie de clase specializate
pe realizarea interfeelor grafice ale aplicaiilor Java. Folosind aceast colecie de
clase, realizarea unei interfee grafice presupune:
1. adugarea obiectelor grafice necesare;
2. realizarea adaptrilor care asigur reprezentarea corect a fiecrui obiect
adugat (poziie, dimensiune) i
3. adugarea codului necesar implementrii comportamentului fiecrui
obiect.

Crearea unei aplicaii simple


n NetBeans se va selecta New / Project iar n fereastra urmtoare se va
impune ca tip de proiect General / Java Application.

24

n pasul urmtor se va impune numele i directorul.

Caseta de validare

Create Main Class nu va fi selectat.

n continuare va fi realizat interfaa grafic a noii aplicaii.

n Java

componentele unei interfee grafice sunt obiecte aparinnd unei colecii de clase
(cunoscut sub denumirea Swing). Obiectele grafice pot fi reprezentate sub forma
unei structuri arborescente, rdcina acesteia fiind un container principal.
Containerul principal poate fi un obiect aparinnd uneia dintre clasele urmtoare:
1. JFrame - pentru aplicaii Windows obinuite,
2. JApplet pentru miniaplicaii care pot fi integrate n pagini web sau
3. JDialog pentru ferestre de dialog.
Fiecare container conine un panou (content pane) pe care sunt dispuse
obiecte grafice (controalele Windows) i poate integra eventual o bar cu meniuri
derulante.

Dup crearea proiectului pasul urmtor este crearea ferestrei aplicaiei. n


aplicaiile Windows obinuite fereastra principal este un obiect din clasa JFrame.
n meniul File se va selecta New File / Java GUI Forms./ JFrame Form.

25

n fereastra urmtoare i se va impune numele fiierului.

26
Informaiile din ferestra anterioar indic faptul c mediul va creea o clas
Exemplu, care va fi adugat pachetului exemplu. n Java clasele sunt coninute n
pachete (echivalentul spaiilor de nume din .NET). Pentru clasele proprii aplicaiei
NetBeans ofer varianta alternativ a includerii lor ntr-un pachet implicit (defaultpackage) dar se recomand crearea unui pachet distinct. Pentru pachetul creat
mediul va aduga pe disc un director nou purtnd numele pachetului, facilitnd astfel
accesul la fiierele coninnd clasele aplicaiei i arhivarea acestora.
n cazul claselor derivate din JFrame sau JDialog mediul de dezvoltare va
include n acestea n mod automat metoda main() acestea devenind astfel clase
principale.

Pentru prima clas a aplicaiei, derivat de regul din JFrame este

normal s se procedeze astfel dar n cazul urmtoarelor clase adugate, de tip


JDialog sau JFrame metoda main() din componena acestora va trebui ters.
n exemplul considerat clasa realizat va fi derivat din JFrame i va conine
iniial trei metode: constructorul, metoda initComponents() i metoda principal,
main().
Rezultat:

27

28
Rezultatul va consta n afiarea zonei utile a ferestrei urmtoarei aplicaii.

Se

afieaz de asemenea o bar cu instrumente care va permite comutarea din afiare


interfa grafic - afiare cod.

afiare cod surs

Not: Dac tabul Design nu este vizibil, tracerea la afiarea ferestrei aplicaiei
se poate realiza si din meniul aplicaiei (Wiew / Editors / Design).

Selectarea i plasarea controalelor Windows care compun interfaa se


realizeaz folosind trei ferestre:
1. Palette., care conine componentele Swing care pot fi adugate,
2. Inspector, care afiez structura ierarhic a componentelor incluse i
3. Properties care afieaz proprietile obiectului selectat n fereastra de
editare grafic sau n fereasra Inspector.

29
Dac ferestrele necesare nu sunt afiate se va impune afiarea lor folosind
meniul Window. De exemplu pentru Palette se va selecta Window / Palette.
Pentru aplicaia considerat s-au adugat trei etichete (obiecte din clasa
JLabel), trei casete de text (obiecte din clasa JTextField) denumite h, v i g, o caset
de validare (obiect din clasa JCheckBox) denumit s i dou butoane (JButton).
Pentru schimbarea numelui unui control se selecteaz controlul i se editeaz
numele afiat n fereastra Inspector.

schimbare nume implicit


Ferestrei i se schimb titlul (proprietatea title = Greutatea ideala) i i se
adapteaz dimensiunile prin deplasarea frontierelor cu mouse-ul.
Pentru a aduga metoda care trateaz evenimentul declanat de selectarea
cu mouse-ul a unui buton se selecteaz n meniul contextual afiat la selectarea
butonului opiunea Events / Action / actionPerformed.

30
Pentru butonul Calcul codul metodei va fi:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
double gre;
gre = 50. + 0.75 * (Double.parseDouble(h.getText()) - 150.) +
0.25 * (Double.parseDouble(v.getText()) - 20.);
if(!s.isSelected()) // s neselectat
gre = gre * 0.9;
g.setText(String.valueOf(gre));
}

Pentru butonul Gata codul va fi:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
System.exit(0);
}

Pentru controlul de tip JTextField g s-a modificat proprietatea editable


deoarece coninutul su se stabilete n metoda asociat butonului Calcul.

n acest moment se poate executa aplicaia (butonul

):

31

Metode Java pentru conversia datelor


Datele necesare calculelor i rezultatele obinute sunt de regul coninute n
casete de text (obiecte din clasa JTextField). Perechea de metode ale clasei
JTextField care permit accesul la coninutul casetei de text sunt getText() pentru
preluarea coninutului i setText() pentru impunerea acestuia.
Metoda getText() returneaz un obiect de tip String care trebuie convertit n
vederea obinerii unei valori numerice utilizabile n expresii matematice. Argumentul
metodei setText() este un obiect de tip String, rezultat din conversia unei valori
numerice.

Pentru a realiza conversii, n Java sunt definite clase care mapeaz

tipurile simple, astfel:


Tip simplu

Clas de mapare

byte

Byte

short

Short

int

Integer

long

Long

char

Character

float

Float

double

Double

boolean

Boolean

Fiecare dintre clasele de mapare posed o metod static de conversie din


String ntr-un tip simplu:

String sir = "1235";


int nr;
nr = Integer.parseInt(sir);

Pentru clasele din tabelul de mai sus metodele de conversie sunt


urmtoarele:
-

byte - Byte.parseByte(aString)

short - Short.parseShort(aString)

int - Integer.parseInt(aString)

long - Long.parseLong(aString)

32
-

float - Float.parseFloat(aString)

double - Double.parseDouble(aString)

boolean - Boolean.valueOf(aString).booleanValue();

Conversia invers, dintr-un tip numeric simplu n ir de caractere se poate fie


apelnd metoda String.valueOf(variabila) fie mai simplu, exploatnd modul n care
Java realizeaz concatenarea irurilor de caractere.
Exemplu:

double v = 3.14;
String sir = "" + v;

Deoarece n expresia atribuit variabilei sir primul termen este ir, operatorul
+ va fi considerat ca fiind operator de concatenare iar variabila v va fi automat
convertit n String.

33

Utilizarea controalelor Windows

Casete de text
Casetele de text sunt obiecte aparinnd clasei JTextField. Coinutul unei
casete de text este de regul un obiect de tip String. n timpul executrii programului
coninutul casetei poate fi preluat folosind metoda getText() i poate fi impus folosind
metoda setText(). Proprietile care sunt de obicei impuse sunt:
-

horizontalAlignment, - mod de cadraj al irului de caractere

editable - dac este posibil scrierea n caset sau nu.

Opiune

dezactivat pentru casetele al cror coninut este determinat n


aplicaie;
-

font - fontul utilizat

background - culoarea fundalului

foreground - culoarea scrisului,

text - coninutul iniial al controlului.

Proprietile pot fi modificate prin program, metodele cele mai frecvent


apelate fiind setBackground(), care permite impunerea culorii fundalului i
setForeground(), care impune culoarea textului.

Butoane
Butoanele sunt controale Windows destinate declanrii unei aciuni.
nelegerea modului n care se specific aciunea (metoda) care trebuie s fie
executat la declanarea unui anumit eveniment este posibil doar prin evidenierea
unor particulariti ale modului n care programarea obiectual este implementat n
Java.

Interfee, clase incluse, clase anonime


Evenimentele declanate de aciunile operatorului i la care o aplicaie
Windows poate reaciona sunt diverse.

Pentru integrarea mai uoar a

mecanismului de tratare a lor, creatorii limbajului Java au realizat o grupare a lor pe


categorii. Gruparea metodelor specializate pe tratarea unei categorii de evenimente

34
se realizeaz folosind conceptul de interfa (eng. interface). O interfa poate fi
privit ca fiind o clas mai aparte, care conine un numr de metode abstracte care
trebuie suprascrise n cadrul clasei care o folosete. Suprascrierea unei metode a
unei interfee presupune scrierea unei metode avnd acelai nume cu cel al metodei
corespunztoare din definiia interfeei dar un coninut adaptat aplicaiei. Evident nu
se pot creea obiecte avnd ca tip o interfa n locul unei clase.

Declararea faptului c o clas suprascrie metodele unei interfee (sau ale mai
multor interfee) se realizeaz printr-o directiv implements:
class nume_clas implements interfa_1 [interfa_2 ...]

Not. Limbajul Java nu admite motenirea multipl, respectiv o clas nu poate


avea mai multe superclase. Prin interfee aceast constrngere este ns ocolit, o
clas motenind membrii unei clase i a unui numr oarecare de interfee.

Exemplu :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CelsConv implements ActionListener
{

...

ntr-o aplicaie Java obinuit nceput ca n exemplul precedent vor exista


obligatoriu secvene de cod de tipul:
. . .
butonCalcul.addActionListener(this);
butonGata.addActionListener(this);
. . .

Aa cum deja se tie, obiectul referit prin this este obiectul curent care n
acest mod este indicat ca fiind listener (asculttor). Metoda apelat la producerea
evenimentului (clic pe buton) denumit n programare handler de eveniment, va fi
cea coninut n clasa creia i aparine obiectul declarat ca listener.
Aceasta este modalitatea prin care se "instituie" supravegherea i
interceptarea apsrii butoanelor butonCalcul i butonGata.

35
Interfaa ActionListener, implementat n clasa CelsConv, conine doar o
metod, actionPerformed().

Ea trebuie suprascris n cadrul acestei clase.

Deoarece pot exista mai multe butoane ale cror selectri declaneaz aceeai
metod (n exemplul dat exist dou butoane), metoda actionPerformed() va
implementa un algoritm de identificare a sursei evenimentului.
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == butonCalcul)
{
double tempData = Double.parseDouble(tempCelsius.getText());
int tempFahr = (int)(tempData * 1.8 + 32);
tempCelsius.setText(""+tempFahr);
}
else
System.exit(0);
}

Dac se folosete NetBeans declararea obiectului listener se bazeaz pe


posibilitatea definirii claselor incluse (inner clases) ntr-o clas dat.
n Java o aplicaie care folosete clase incluse are structura:
class ClasaPrinc {
...
class ClasaInclusa {
...
}
...
}

Clasa inclus poate fi declarat oriunde n cadrul clasei exterioare. Dac


declararea clasei incluse s-a realizat n afara metodelor clasei exterioare, din
metodele clasei incluse pot fi accesate variabilele clasei exterioare i invers.
Dac o clas inclus implementeaz o interfa, numele ei poate fi omis
(clasa devine anonim) ajungndu-se la expresii de forma:
numele clasei lipsete, apare doar numele
interfeei (ActionListener)

n metoda suprascris actionPerformed() se apeleaz o


alt metod, jRadioButton1ActionPerformed(evt)

36

Scrierea din exemplul precedent poate induce n eroare dar s ne amintim c


nu pot fi create obiecte aparinnd unei interfee, deci scriind:
new ActionListener() { ...
nu creem un obiect de tip ActionListener ci un obiect aparinnd unei clase interioare
anonime care la rndul ei implementeaz interfaa ActionListener.
n NetBeans scrierea codului care asociaz o metod de tratare unui
eveniment se realizeaz automat.

Utilizatorul poate edita practic doar metoda

apelat

suprascrise

cadrul

metodei

interfeei

implementate,

jRadioButton1ActionPerformed(evt) n exemplul anterior.


n concluzie se poate spune c, dac un obiect al interfeei trebuie s
rspund la o aciune (clic cu mouse-ul de exemplu) NetBeans genereaz pentru
listener un obiect aparinnd unei clase interioare anonime n care sunt suprascrise
metodele unei interfee pe care aceasta o implementeaz.

Metoda aferent

evenimentului interceptat conine un apel la o metod a clasei (handler) a crui


nume este format din numele controlului + numele evenimentului interceptat.
Practic pentru a impune tratarea unui eveniment se selecteaz obiectul care
va declana evenimentul (sursa evenimentului, un buton de exemplu) i folosind
interfaa se va declana scrierea automat a metodei de tratare ntr-unul dintre
urmtoarele moduri:
a. Se folosete meniul contextual (pentru actionPerformed de exemplu)

b. Se selecteaz cmpul din fereastra de proprieti (tabul Events selectat)


din dreptul evenimentului a crui tratare se dorete.
clic

Dac se dorete apelarea altei metode sau se dorete schimbarea numelui


predefinit, se editeaz numele implicit dup care se apas Enter.

37
n continuare se trece la editarea codului metodei, specific aplicaiei.

Exemplu: S se realizeze o aplicaie care transform gradele Celsius n grade


Farenheit i invers.
Soluie:
Dup adugarea unei etichete (JLabel) coninnd irul de caractere
Temperatura i a unei casete de text (JTextField) pentru introducerea valorii i
afiarea rezultatului, se va aduga interfeei un control de tip ButtonGroup i dou
butoane radio (JRadioButton). Controlul de tip buttonGroup va servi la gruparea
butoanelor radio.

Pentru a realiza gruparea, se selecteaz succesiv, cu tasta

Control apsat, cele dou butoane radio i apoi, n fereastra de proprieti, se


selecteaz pentru proprietatea buttonGroup valoarea buttonGroup1, respectiv
obiectul deja adugat.

Proprietatea text a butoanelor radio se modific n "Celsius -> Fahrenheit"


respectiv "Fahrenheit -> Celsius".
Se mai adaug dou butoane (JButton) avnd proprietatea label "Calculeaz"
respectiv "Gata".
Pentru a stabili sensul transformrii se adaug clasei aplicaiei o variabil
denumit sens de tip boolean avnd valoarea true pentru Celsius - Fahrenheit.

38

Folosind proprietatea selected a primului buton Radio se va impune ca la


pornirea aplicaiei acesta s fie selectat.

39
Corespunztor se va interveni n constructorul clasei dnd variabilei sens
valoarea true.

Mai urmeaz s se adauge metodele de tratare a evenimentelor declanate la


selectarea butoanelor.
Pentru primul buton radio codul metodei va fi:

Pentru al doilea buton radio codul va fi:

Butonul "Calculeaz" va declana execuia unei metode care va coine


preluarea valorii din controlul de tip JTextfield, conversia sa din String n double,
calculul noii valori i memorarea acesteia, dup conversie n String, n controlul de
tip JTextField.
Pentru transformare se vor folosi formulele:
Celsius -> Fahrenheit:

v = 9.0 / 5.0 * v + 32.0;

Fahrenheit -> Celsius

v = 5.0 / 9.0 * (v - 32.0);

40
Pentru al doilea buton "Gata", funcia de tratare a evenimentului declanat la
acionarea sa va opri aplicaia.

Rezultat posibil:

Casete de validare (JCheckBox


CheckBox)
Box)

Un control de tip caset de validare (JCheckBox) poate avea dou stri:


selectat sau neselectat. Starea de selectare poate fi stabilit n momentul realizrii
interfeei grafice sau n timpul execuiei aplicaiei, prin apelul metodei setChecked();
Exemplu de utilizare:
Se consider o aplicaie care afieaz trei controale, un control de tip JLabel
i dou de tip JCheckBox, ca n figur.

41

Selectarea butoanelor de tip JCheckBox trebuie s modifice aspectul fontului


folosit la scrierea irului de caractere coninut n JLabel.
Ambelor butoane li se va ataa aceeai funcie de tratare.
Pentru nceput se include metoda ataat implicit primului buton:

Se revine n fereastra de proprieti i i se modific numele:

Apoi se editeaz textul metodei:

Pentru al doilea buton (italic) ataarea aceleiai metode pentru evenimentul


actionPerformed se realizeaz astfel:
-

Mediul

se selecteas cmpul din dreptul evenimentului actionPerformed:

de

italicActionPerformed().

programare

afieaz

automat

numele

metodei,

42

fr a intra n fereastra de editare a clasei (fr a apsa tasta Enter)


se

modific

numele

metodei

(italicActionPerformed

cbActionPerformed) i apoi se apas tasta Enter.

->

43

Controale cu list

Componentele Swing folosite limbajul Java ncepnd cu versiunea 1.2


implementeaz arhitectura Model-View-Controller (MVC). Modelul MVC const n
esen n separarea datelor de reperezentarea lor. Datele sunt coninute ntr-un
obiect (model) asociat unui control Windows care realizeaz reprezentarea lor
(view).

Cea de-a treia component, Controller realizeaz interceptarea i

procesarea evenimentelor.
Controller

Model

View

Aceast abordare st de altfel la baza independenei aplicaiilor Java de


platforma pe care se execut aplicaia.
Dac pentru controale simple obiectul care conine datele este realizat
automat pentru controale complexe, care pot conine un numr mare i variat de
obiecte (JComboBox, JList, JTable, JTree), programatorul poate opta ntre folosirea
unui obiect aparinnd unei clase implicite (DefaultListModel, DefaultTableModel,
DefaultTreeModel) i definirea unei clase proprii, derivat de regul dintr-o clas
abstract predefinit.

Evident complextitatea programrii crete dac nu se

folosete clasa implicit, dar n multe cazuri este singura soluie.


JComboBox
Controlul de tip JComboBox permite selectarea unei valori dintr-o list
predefinit. Definirea listei se realizeaz de obicei n etapa de proiectare a aplicaiei,
coninutul acesteia fiind accesibil prin intermediul proprietii model, Lista poate fi
construit i editat i dinamic, n timpul execuiei, folosind metodele:

44
Tip

Metoda

returnat

Aciune

void

addItem(Object obj)

Adaug un element n list

void

insertItemAt(Object obj, int index)

Insereaz un element n list

Object

getSelectedItem()

Returneaz ob. selectat

int

getSelectedIndex()

Returneaz poz. elem. selectat

void

removeAllItems()

Golete lista

void

removeItem(Object obj)

Suprim prima apariie a obj.

void

removeItemAt(int index)

Suprim el.. de la poziia index

getItemCount()

Returneaz nr. de elemente

int

Exemple:
S se realizeze o aplicaie care afieaz n ferestr o imagine selectat
dintr-o list de imagini.
Pentru rezolvarea problemei se realizeaz o nou aplicaie Windows n
fereastra creia se adaug trei controale: dou de tip JLabel i unul de tip
JComboBox.

Lista asociat controlului de tip JComboBox va fi adugat acionnd butonul


din dreptul proprietii model.

45

Proprietatea selectedItem va fi "Pasare", deci prima intrare n list.


n controlul imagine de tip JLabel va fi adugat imaginea corespunztoare
entitii iniial selectate ("Pasare"). Pentru aceasta va fi ters irul de caractere din
dreptul proprietii text i vor fi impuse dimensiunile controlului n coresponden cu
cele ale imaginilor care urmeaz s fie afiate (proprietile Horizontal Size i
Vertical Size).

Pentru a aduga imaginea care va fi iniial afiat va fi acionat butonul din


dreptul proprietii icon.

46

Pentru a putea funciona mai trebuie doar s se adauge clasei o metod care
s fie apelat la schimbarea elementului din list selectat. Evenimentul generat la
selectarea unui alt element din list este actionPerformed.

47
Formarea numelui imaginii care va fi afiat n controlul imagine se realizeaz
prin alturarea a trei iruri de caractere: "Imagini/" + nume + ".gif". Variabila nume
primete ca valoarea irul de caractere selctat. Rezult deci c n directorul Imagini
trebuie s existe patru fiiere avnd denumirile Pasare.gif,

Pentru ca aplicaia s poat funciona, directorul Imagini trebuie plasat n


directorul aplicaiei.

Observaie: Aplicaia poate fi rescris, n noua variant lista controlului de tip


JComboBox fiind generat n timpul execuiei programului. n acest caz iniializarea
el se va realiza n constructorul clasei.

Dup secvena de iniializare s-a impus poziia iniial selectat (metoda


setSelectedIndex() din clasa JComboBox) i s-a ncrcat n controlul imagine de tip
JLabel imaginea corespunztoare (metoda setIcon()).

48
JListBox
Controlul de tip JListBox permite s se selecteze o valoare sau mai multe
valori dintr-o list predefinit. i n cazul acestui control, definirea listei poate fi
realizat n etapa de proiectare a aplicaiei sau ulterior, n timpul execuiei.
Dac aplicaia se dezvolt folosind NetBeans, obiectul folosit ca model difer
pentru cele dou situaii. n cazul n care lista este definit n momentul proiectrii
aplicaiei mediul va creea un obiect aparinnd unei clase interioare anonime care
implementeaz interfaa AbstractListModel:

Metoda setModel(Object obj) realizeaz asocierea obiectului model, care


conine datele care urmeaz s fie afiate de controlul listaStg din clasa JList.
Metodele getSize() i getElementAt() sunt metode suprascrise ale interfeei
AbstractListModel. Pentru a accesa coninutul obiectului model se apeleaz metoda
getModel(). Astfel pentru a prelua elementul aflat n poziia poz se scrie:

String sir;
sir = (String) listaStg.getModel().getElementAt(poz);

Pentru liste generate dinamic, n timpul execuiei aplicaiei, soluia obinuit


este adugarea la variabilele clasei a unui obiect din clasa DefaultListModel:

private DefaultListModel model_lista;

n constructorul clasei, dup iniializarea tuturor componentelor se va creea


obiectul ldr i apoi va fi asociat controlului prin apelul metodei setModel():

...
initComponents();
model_lista = new DefaultListModel();
lista.setModel(model_lista);
...

49

Principalele metode din clasa DefaultListModel care permit crearea i editarea


listei sunt prezentate n tabelul urmtor.

Tip returnat

Metoda

Aciune

void

add(int index, Object obj)

Adaug obj n poz. index

void

addElement(Object obj)

Adauga obj n list

void

clear()

Golete lista

sau

removeAllElements()
boolean

contains(Object obj)

Ret. true daca obj este in lista

Object

firstElement()

Ret. primul element

Object

getElementAt (int index)

Returneaz el. din poz. index

int[]

getSelectedIndices()

Returneaz irul poziiilor el. selectate

int

indexOf(Object obj)

Ret. poz. n care apare prima dat obj

void

insertElementAt(Object

Insereaz obj n poz. index

obj, int index)


boolean

isEmpty()

Return. true daca lista este vida

void

removeElement(Object

Suprim elem. obj

obj)
void

removeElementAt(int

Suprim elementul din poziia index

index)

Exemplu:
S se realizeze o aplicaie care adaug ntr-o list elemente selectate ntr-o
alt list.
Se presupune c prima list, din stnga, conine ingrediente pentru o pritur.
Ingredientele selectate vor fi adugate n lista din dreapta.

50
Pentru realizarea interfeei s-au adugat ferestrei iniiale dou panouri
(JPanel) avnd proprietatea border setat pe TitleBorder:

n continuare se adaug dou controale de tip JList, listaStg i listaDr i un


buton. Se va observa c fiecare control de tip JList va fi n mod automat inclus ntrun container de tip jScrollPanel. Dac lungimea unei liste va fi aa de mare nct nu
va ncpea n spaiul iniial alocat vor fi afiate automat bare de defilare (scroll).
Pentru a pstra elementele listei din dreapta, gestionat dinamic, se va
aduga clasei variabila ldr aparinnd clasei DefaultListModel:

51

Se va modifica apoi constructorul clasei asfel nct ldr s fie asociat listei din
dreapta, listaDr.

Pentru ca aplicaia s devin funcional mai trebuie ataat o metod de


tratare a evenimentului clic pentru butonul jButton1.

52
Metoda conine preluarea n irul select[] de tip int a indicilor elementelor
selectate n listaStg.

Apoi se golete listaDr (metoda clear()) i se adaug n

obiectul ldr elementele din lista din stnga ale cror poziii au fost memorate n irul
select[]. Pentru aceasta se apeleaz n ciclu metoda addElement(). Preluarea unui
element din lista din stnga se realizeaz apelnd metoda getElement() pentru
obiectul model obinut prin apelul metodei getModel().

JTable
Controlul de tip JTable este folosit pentru afiarea datelor ntr-o form
tabelar. Un obiect de tip JTable realizeaz doar afiarea datelor, acestea fiind
coninute ntr-un obiect asociat (TableModel, de regul un tablou bidimensional).

JTable

TableModel

naintea crerii unui ibiect din clasa JTable este necesar crearea obiectului
care conine datele. Acesta poate aparine unei clase definite de programator, de
regul derivat din AbstractTableModel (clas abstract) sau poate aparine clasei
DefaultTableModel. n NetBeans a doua variant este cea implicit.
n NetBeans adugarea unui obiect din clasa JTable provoac inserarea n
fapt a dou obiecte, un jScrollPanel (container) i un jTable coninut n primul.

a. Utilizarea unei clase anonime derivat din AbstractTableModel


La crearea unei clase derivate din AbstractTableModel trebuie suprascrise
urmtoarele metodele abstracte :
public int getRowCount();
public int getColumnCount();
public Object getValueAt(int row, int column);

53
Evident pot fi suprascrise i metodele care nu sunt abstracte dac este
necesar specializarea modului lor de operare. n exemplul prezentat n continuare a
fost suprascris metoda getColumnName().
Folosirea acestei metode pentru popularea cu date a unui control JTable
presupune:
1. Declararea unui obiect din clasa Vector:
private Vector<String[]> data = new Vector();

2. Popularea cu date a structurii declarate.

Liniile sunt adugate n

constructorul clasei principale, dup apelul initComponents().

data.add(new String[]{"", "Pop Grigore", "Cluj-Napoca"});


data.add(new String[]{"", "Ionescu Paul", "Oradea"});
data.add(new String[]{"", "Popescu Laura", "Bucuresti"});

3. Asocierea la obiectul tabel (JTable) a obiectului care conine datele


tabelului.

Obiectul folosit va aparine unei clase anonime derivat din

AbstractTableModel :

tabel.setModel(new AbstractTableModel() {
String[] colum = new String[]{"Numar", "Nume", "Localitate"};
public int getRowCount() {
return data.size();
}
public int getColumnCount() {
return colum.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return columnIndex == 0 ? "" + (rowIndex + 1) : data.get(rowIndex)[columnIndex];
}
public String getColumnName(int column) {
return colum[column];
}
});

Rezultat:

54

Not: n Java clasa Vector este folosita pentru a creea iruri de lungime
variabil. Lungimea unui Vector poate crete sau scade dup nevoile aplicaiei. n
examplul dat s-au adugat elemente (data.add(...)) s-au extras elemente (data.get())
i s-a folosit lungimea vectorului (data.size()).
n timpul execuiei programului datele pe care acesta le conine pot evolua.
Practic structurii de tip Vector care conine datele i se adauga noi elemente sau i se
suprim elemente. Pentru a determina punerea de acord a reprezentrii grafice cu
modelul se va apela metoda updateUI(). Exemplu :

private void adaugaActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
data.add(new String[]{"", nume.getText(), oras.getText()});
tabel.updateUI();
nume.setText(""); oras.setText("");
}

55

b. Utilizarea clasei DefaultTableModel


n lipsa declaraiei unei clase noi, ca n exemplul precedent, datele unui
control JTable vor fi pstrate ntr-un obiect aparinnd clasei DefaultTableModel.
Configurarea controlului i popularea cu datele iniiale se realizeaz folosind interfaa
mediului de programare.
Dup inserare n fereastra aplicaiei un control JTable este afiat cu un numr
de linii i coloane care poate fi adaptat accesnd proprietatea model.

Dup configurarea controlului din clasa JTable se adaug interfeei aplicaiei


dou controale necesare introducerii datelor : nume din clasa JTextField i fumator
din clasa JCheckBox.

56
Rezultat :

Secvena de cod scris de mediul de programare n metoda initComponents()


este urmtoarea:

Asocierea obiectului care conine valorile (model) s-a realizat prin apelul
metodei setModel(), care are ca parametru un obiect din clasa DefaultTableModel.
Constructorul folosit are doi parametri.

Primul este un tablou bidimensional de

obiecte din clasa Object iar al doilea este un ir de obiecte din clasa String (iruri de
caractere, denumirile nscrise n capul coloanelor). n celulele unui astfel de tablou
pot fi puse obiecte de diferite naturi deoarece n Java clasa Object este rdcina
ntregii ierarhii de clase.
Observaie : n exemplul precedent obiectul folosit ca model nu are nume.
Pentru modificarea datelor din tabel pentru a obine o referin la acest obiect se va
scrie tabel1.getModel().

57
n tabelul urmtor au fost incluse cteva dintre metodele folosite pentru
editarea obiectului model aparinnd clasei DefaultTableModel i asociat unui
JTable.

Tip

Metoda

returnat

Aciune

void

addRow(Object[] obj)

Adaug modelului o linie la sfrit

Object

getValueAt(int linie, int col)

Preia valoarea din poz. (linie, col)

int

getRowCount()

Returneaz nr. de linii

void

insertRow(int linie, Object[] obj)

Insereaz un rnd n poziia linie

void

removeRow(int linie)

Suprim rndul linie

void

setValueAt(Object obj, int linie, Insereaz elementul obj n poziia

void

int col)

(linie, coloan)

setColumnIdentifiers(String [])

impune

numele

scris

capul

coloanelor

Continund exemplul inceput, constructorul clasei principale poate fi scris


astfel :

public Tabeleex2() {
initComponents();
tabel1.getColumn("Fumator").setCellRenderer(new AfisareBool());
tabel1.getColumn("Nr. Crt.").setCellRenderer(new AfisareInt());
tabel1.getColumn("Nr. Crt.").setPreferredWidth(40);
tabel1.getColumn("Numele si prenumele").setPreferredWidth(240);
nr = 1;
}

Dup apelul metodei initComponents() n care se creaz controalele interfeei,


n constructor se apeleaz pentru dou coloane (Nr.Crt i Fumator) metoda
setCellRenderer.

Aceast metod asociaz acestor coloane dou obiecte

aparinnd unor clase specializate n afiarea valorilor din coloanele respective.


Clasa AfisareBool reprezint valoarea logic true sau false din coloana Fumator sub
forma unei casete de validare (JCheckBox):

58

class AfisareBool extends DefaultTableCellRenderer {


JCheckBox cb = new JCheckBox();
@Override
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
cb.setSelected(((Boolean)value).booleanValue()); // impun starea
cb.setHorizontalAlignment(JLabel.CENTER);
return cb;
}
}

Clasa AfisareInt reprezint valoarea ntreag din coloana Nr. Crt. sub forma
unui control JLabel avnd textul centrat pe orizontal:

class AfisareInt extends DefaultTableCellRenderer {


JLabel nr = new JLabel();
@Override
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
nr.setText((String)value);
// impun valoarea
nr.setHorizontalAlignment(JLabel.CENTER);
return nr;
}
}

Ultimele dou linii din constructor apeleaz metoda setPreferredWidth()


pentru a impune limile primelor dou coloane.

Limea ultimei coloane se

determin automat.
Tot n constructor se iniializeaz contorul de linii nr (declarat de tip int).
Metoda asociat butonului etichetat cu Adauga este urmtoarea :

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
Object[] sir = new Object[] {""+nr, nume.getText(), fumator.isSelected()};
DefaultTableModel dt = (DefaultTableModel)tabel1.getModel();
dt.addRow(sir);
nr++;
nume.setText("");
fumator.setSelected(false);
nume.requestFocus();
}

59
Ea iniializeaza variabila sir cu un ir de obiecte folosind valorile din
controalele nume si fumator precum i valoarea contorului nr.
n continuare se preia obiectul model (prin apelul metodei getModel()) al
controlului tabel1 (JTable) i se adaug acestuia irul de obiecte sir.
n final se incrementeaz contorul nr (nr++), i se aduc controalele nume i
fumator la starea iniiala :

nume.setText("");
fumator.setSelected(false);

De asemenea se apeleaz nume.requestFocus(); pentru a specifica nume ca


fiind controlul cruia i se adreseaz urmtoarea intrare de la tastatur.
Rezultat :

Meniuri
Meniurile permit definirea unui set extins de aciuni i selectarea uneia dintre
ele. Pentru a defini meniul unei aplicaii trebuie creat o bar de meniuri (obiect
aparinnd clasei JMenuBar), un ansamblu de meniuri derulante (obiecte de tip
JMenu) i pentru fiecare meniu derulant, un ansamblu de opiuni (obiecte aparinnd
clasei JMenuItem).
Exemplu:

60
Sa se realizeze proiectul DemoMeniu avnd interfaa din imagine.

1. Se adaug proiectului bara cu meniuri derulante:

clic
Se va selecta cu mouse-ul JMenubar i se va realiza adugarea sa printr-un
clic cu mouse-ul n fereastra aplicaiei.
selectat

n continuare se va edita coninutul barei cu meniuri folosind reprezentarea


arborescent afiat prin selectarea tabului Inspector.
2. Se modific numele primului meniu derulant (proprietatea text):

selectat

modificare proprietate text

61
3. Se adaug meniului Imagini opiunile Pasare, Caine, Pisica, Iepure i
Iesire. Efectul selectrii primelor patru intrri va fi schimbarea imaginii afiate n
centrul ferestrei iar ultima opiune va opri aplicaia.

selectat
modificare proprietate text

4. Se adaug barei cu meniuri un al doilea meniu derulant:

62

Rezultat:

Se modific proprietatea text din Menu n Culori:

selectat

5. Celui de-al doilea meniu derulant i se adaug trei opiuni: Albastru, Rosu i
Verde.

Selactarea uneia dintre opiuni va schimba culoarea textului cu care se

afieaz denumirea imaginii.

6. Se adaug aplicaiei dou controale din clasa JLabel. Acestea vor conine
o imagine respectiv denumirea imaginii afiate.

Denumirile controalelor vor fi

schimbate n poza i denumire.

Pentru a afia denumirea imaginii iniiale, proprietatea text a controlului


denumire va fi modificat n "Pasare" i culoarea fontului va fi modificat n albastru
(proprietatea foreground).

63
Pentru controlul poza se va impune un coninut iniial folosind proprietatea
icon , aa cum se vede n continuare.

64
Rezultat:

7. n continuare vor fi definite secvenele de cod care trebuie executate la


selectarea diferitelor opiuni din meniuri.

Pentru a creea metoda care trebuie

executat la selectarea unei opiuni dintr-un meniu derulant se va selecta opiunea


cu un dublu clic n fereastra Inspector:

dublu clic

Pentru ultima opiune din primul meniu derulant (Iesire) se va aduga apelul
metodei exit(0):

65
Pentru prima opiune din meniul Imagini, metoda care trebuie executat este
urmtoarea:

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {


// TODO add your handling code here:
poza.setIcon(new ImageIcon("Imagini/Pasare.gif"));
denumire.setText("Pasare");
}

Pentru celelalte trei metode se va schimba doar numele imaginii referite


(Caine.gif, Pisica.gif i Iepure.gif).

Pentru prima opiune din meniul Culori metoda care trebuie executat este
urmtoarea:

Pentru celelalte dou opiuni culorile impuse vor fi Color.RED respectiv


Color.GREEN.

Ferestre de dialog
n Java ferestrele de dialog sunt controale Windows din clasa JDialog.
Controalele adugate ulterior n fereastra de dialog se adaug controalelor clasei de
baz.

Desenarea n Java
Interfeele aplicaiilor create pn n prezent au inclus de regul un container
din clasa JFrame n care au fost adugate un ansamblu de controale Windows.
Coninutul acestora a fost impus folosind proprietile lor.
Exist ns cazuri n care coninutul unui control Windows este o reprezentare
grafic a unor date ale aplicaiei.

Pentru a face acest lucru posibil este ns

66
necesar declararea unei noi clase, derivat de regul din clasa JPanel n cadrul
creia s fie suprascris metoda n care se realizeaz reprezentarea grafic a
obiectelor clasei. Fereastra unei astfel de aplicaii ar putea deci conine pe lng
controale JPanel obinuite, adugate pentru a grupa controalele Windows destinate
interaciunii cu aplicaia, un obiect aparinnd noii clase i care va conine
reprezentarea grafic a datelor aplicaiei.

Exemplu:
S se realizeze o aplicaie care permite desenarea n centrul unui panou
(control JPanel) a unui dreptunghi sau a unui oval avnd dimensiunile impuse ntr-o
fereastr de dialog.
1.

Se creaz proiectul nou denumit figuri (File / New Project / General / Java
Application):

2. Se adaug proiectului un fiier nou care va conine clasa principal,


derivat din JFrame (File / New File/ Java GUI Forms / JFrame Form) impunnd
pentru Class Name : figuri i pentru Package tot figuri.
3. Se adaug interfeei grafice un Layout Manager.

67

Pentru aplicaia dat s-a ales ca pentru dispunerea componentelor s se


foloseasc Border Layout.

Unui container cruia i s-a ataat acest mod de

dispunere i se pot aduga cinci obiecte grafice dispuse ca n figur.

Specific acestui mod de dispunere este de asemenea faptul c obiectul din


mijloc (Center) se extinde automat la redimensionarea containerului astfel nct s
ocupe tot spaiul disponibil dup ce s-au (re)desenat componentele plasat la nord,
sud, est i vest. n cazul aplicaiei curente n centru va fi plasat controlul care va
conine reprezentarea grafic dorit iar la nord (North) se va plasa un panou
(JPanel) care va conine un grup de dou butoane Radio (etichetate Oval i
Dreptunghi) i dou butoane avnd etichetele Date i Grafic.

Butonul Date

declaneaz afiarea unei ferestre de dialog n care se vor introduce dimensiunile


dreptunghiului de ncadrare a figurii dorite.

68

Adugarea unei ferestre de dialog


Colecia de clase destinat realizrii interfeei unei aplicaii conine dou clase
care permit afiarea unei ferestre de dialog: JOptionPane i JDialog.
JOptionPane permite afiarea a dou tipuri de ferestre de dialog:
a.

fereastr care conine un ir de caractere (un mesaj) i un buton


etichetat cu Ok sau

b.

fereastr care conine un control prin care utilizatorul poate


introduce o valoare i dou butoane, etichetate cu Ok i Cancel.

Cel mai frecvent se folosete prima form, afiarea unei astfel de ferestre fiind
realizat prin apelul metodei statice showMessage(). Exemplu:

JOptionPane.showMessageDialog(f, "Mesajul pentru Dv.: Apasati OK", "Click OK",


JOptionPane.INFORMATION_MESSAGE);

n exemplul dat f este fereastra n cadrul creia va fi afiat caseta de dialog.


Dac aceasta nu trebuie afiat n cadrul unei ferestre, primul argument va fi null.
Pentru aplicaia curent soluia corect este utilizarea unui obiect aparinnd
clasei JDialog. Coninutul unei ferestre de dialog astfel adugate poate fi creeat ca
i cel al ferestrei principale (JFrame) folosind controalele Windows din fereastra
Palette.
Dup adugarea unui control din clasa JDialog i denumit jDialog1, mediul de
programare afieaz suprafaa util a ferestrei noului control.

Pentru a putea

introduce datele necesare s-au adugat dou etichete (JLabel), dou controale din
clasa JTextField redenumite h i v i un buton etichetat Ok care nchide fereastra.

69

Metoda executat la apsarea butonului Ok este:

Metoda setVisible() afieaz sau ascunde o fereastr de dialog.

Pentru

afiarea ferestrei de dialog de exemplu metoda jButton1ActionPerformed va apela


setVisible() cu parametrul true:

Desenarea n Java
Controalele Windows deja utilizate au o geometrie predefinit. Programatorul
poate interveni ntr-o oarecare msur asupra aspectului acestora folosind fereastra
de proprieti (dimensiuni, plasare n cadrul containerului, etichete, fonturi etc) dar nu
le poate desena. Clasele crora le aparin aceste obiecte grafice suprascriu metoda
paint(), n cadrul creia se realizeaz reprezentarea grafic a obiectului. Ori de cte
ori are loc un eveniment care impune redesenarea obiectului (obiectul devine vizibil,

70
containerul n care este dispus se modific, etc.) metoda paint() este apelat n mod
automat.
Aplicaiile care conin reprezentri grafice care trebuie realizate prin program
necesit definirea unei clase noi, derivat de regul din JPanel. n noua clas se va
suprascrie metoda paint(), codul acesteia realiznd reprezentarea dorit. Metoda
paint() va fi apelat automat, ca i n cazul controalelor standard, ori de cte ori este
necesar. Apelul ei direct din program este interzis. Dac este necesar refacerea
reprezentrii grafice ca urmare a modificrii datelor pe baza creia este realizat
reprezentarea, va fi apelat metoda repaint() care va fora redesenarea prin apelul
metodei paint().

Adugarea unei noi clase


Structura unei aplicaii Java presupune fie o alturare de mai multe clase,
fiecare fiind coninut ntr-un fiier distinct, fie realizarea unei singure clase. n a
doua variant eventualele clase care trebuie adugate sunt definite n interiorul
clasei aplicaiei, fiind denumite clase interioare (inner classes).
Prima variant prezint avantajul portabilitii claselor. O clas poate fi uor
ncorporat ntr-o alt aplicaie, de regul fr a trebui modificat. Dac totui se
impun unele adaptri, se va aplica soluia clasic oferit de programarea obiectual,
respectiv definirea unei clase derivate.
n varianta definirii unei clase interioare, metodele definite n noua clas pot
accesa direct variabilele clasei principale. n exemplul considerat, clasa interioar va
putea accesa coninutul controalelor h i v.
n Java o clas interioar poate fi teoretic inclus oriunde.

n aplicaia

considerat clasa interioar va fi plasat nafara oricrei metode, n zona de


declaraii a clasei figuri.
Clasa interioara se va numi panouDesen i este definit astfel:

71
public class panouDesen extends JPanel {
public panouDesen() {
}
public void paint(Graphics g) {
int hh = Integer.parseInt(h.getText());
int vv = Integer.parseInt(v.getText());
g.clearRect(0, 0, getWidth(), getHeight());
int x = getWidth() / 2 - hh / 2;
int y = getHeight() / 2 - vv / 2;
if (jRadioButton1.isSelected()) {
g.drawOval(x, y, hh, vv);
} else {
g.drawRect(x, y, hh, vv);
}
}
}

Erorile privind referine nerezolvate vor fi eliminate selectnd n meniul


contextual opiunea Fix imports:

Mediul va include la nceputul fiierului liniile:


import javax.swing.JPanel;
import java.awt.Graphics;

Dup definirea clasei, n clasa principal, figuri, se va aduga un nou cmp,


supdes:
private panouDesen supdes;
...

72

Pentru crearea obiectului supdes n constructorul clasei figuri, va fi apelat


constructorul clasei panouDesen:

supdes = new panouDesen();

Deoarece la demararea aplicaiei n controalele h i v lipsesc valorile (conin


iruri de caractere vide) sau n timpul funcionrii operatorul poate introduce
caractere nepermise, este indicat cuprinderea liniilor care preiau valorile din
controale n interiorul unui bloc Try-Catch. Aceasta se realizeaz simplu, prin aplelul
opiniii Surround With try-catch din meniul contextual. Practic se selecteaz liniile
care conin apeluri la metoda parseInt() i se selecteaz n meniul contextual
opiunea Surround With try-catch :

Not: n variantele recente ale mediului Netbeans, dup selectarea liniilor


care conin apeluri ale metodei parseInt(), mediul va afia un simbol (un bec galben)
n dreptul ultimei linii din grup. Selectarea cu mouse-ul a simbolului determin
afiarea opiunii Surround with...

73
Dup selectarea variantei Surround with try {... din lista propus, metoda
paint() va ncepe astfel:

public void paint(Graphics g) {


int hh = 0;
int vv = 0;
try {
hh = Integer.parseInt(h.getText());
vv = Integer.parseInt(v.getText());
} catch (NumberFormatException numberFormatException) {
}
g.clearRect(0, 0, getWidth(), getHeight());
...

Mediul a adugat dou linii care iniializeaz cu 0 variabilele locale hh i vv,


astfel nct dac excepia specificat (numberFormatException) se produce,
variabilele hh i vv vor avea totui valori acceptabile.

Metodele folosite la desenare precum i alte metode ale clasei Graphics mai
frecvent utilizate sunt prezentate n tabelul urmtor.

Tip

Metod

returnat
void

clearRect(int x,

int y,

Explicaie
int width,

Umple

dreptunghiul

indicat

prin

coordonate cu culoarea fundalului

int height)

suprafeei pe care se deseneaz (un


JPanel de regul)
void

drawArc(int x, int y, int width, int height,

Deseneaz un arc de cerc sau de

int startAngle, int arcAngle)

elips n dreptunghiul dat prin primele


4 argumente. Centrul arcului este n
centrul dreptunghiului iar startAngle i
arcAngle definesc poz. de start i
mrimea unghiului, n grade.

void

drawImage(Image img,
ImageObserver observer)

int x,

int y,

Include ct se poate dintr-o imagine.


Valoarea ultimului parametru poate fi
null.

74
void

drawLine(int x1, int y1, int x2, int y2)

Deseneaz o linie din punctul (x1, y1)


n punctul (x2, y2) folosind culoarea
curent

void

setColor(Color c)

Impune

culoarea

folosit

pentru

desenare.
void

drawRect(int x,

int y,

int width,

Deseneaz un dreptunghi.

int y,

int width,

Deseneaz un oval sau un cerc.

int height)

void

drawOval(int x,
int height)

void

drawString(String str, int x, int y)

Scrie irul de caractere str ncepand


cu punctul de coord. (x, y)

void

setFont(Font font)

Plasarea

obiectului

Impune fontul folosit n continuare

supdes

fereastra

aplicaiei

poziia

BorderLayout.CENTER impune modificarea constructorului clasei de baz, figuri


astfel:
public figuri() {
initComponents();
supdes = new panouDesen();
supdes.setPreferredSize(new Dimension(500,300));
getContentPane().add(supdes,java.awt.BorderLayout.CENTER);
pack();
}

Secvena de cod executat la apsarea butonului Grafic conine apelul


metodei repaint() pentru obiectul supdes:

Desenarea pe obiectul adugat impune deci rescrierea metodei paint() dar


apelarea ei va fi realizat fie automat, de ctre Windows, dac fereastra a suferit
modificri care necesit redesenarea, fie prin apelul metodei repaint(), din program.
Pentru a evidenia apelarea automat de ctre Windows a metodei paint() se poate

75
pune n comentariu apelul metodei repaint() i, dup introducerea unui set de
dimensuini valide se redimensioneaz fereastra aplicaiei.

Applet-uri
Una dintre caracteristicile limbajului Java este faptul c permite realizarea de
miniaplicaii care pot fi transferate prin Internet i executate n fereastra unui browser
pentru Web. O astfel de miniaplicaie poart numele de applet java.

Fiierul

coninnd miniaplicaia are extensia .class i este rezultatul compilrii miniaplicaiei.


Dac miniaplicaia const din mai multe clase, n urma compilrii vor rezulta mai
multe fiiere .class.

Dac la dezvoltarea miniaplicaiei se utilizeaz NetBeans,

ansamblul de fiiere .class care constituie applet-ul va fi ntegistrat ntr-un


subdirector avnd numele pachetului declarat la crearea aplicaiei care trebuie inclus
n directorul site-ului (de regul n directorul care conine pagina web n care appletul este inclus).
Includerea ntr-o pagin web a unui applet se realizeaz folosind marcajul
<applet> Exemplu:

<applet code="miniap/miniap.class" width=350 height=200></applet>

n exemplul dat subdirectorul miniap care conine applet-ul miniap.class este


nregistrat pe discul serverului n acelai director n care este nregistrat i pagina
web care include applet-ul.
Atributele width i height din marcajul <applet> indic mrimea zonei din
pagin alocat miniaplicaiei.
Exemplu:
Se dorete realizarea sub form de applet a aplicaiei realizate anterior.
Paii realizrii miniaplicaiei sunt urmtorii:
1.

Se realizeaz o nou aplicaie selectnd ca i tip General / Java


Class Library, numele ei fiind mini.

2.

Se adaug aplicaiei un prim fiier alegnd ca tip Java GUI Forms /


JApplet Form.

Numele dat clasei coninute n proiect este figuri.

76

Deoarece unui applet i lipsete metoda main(), pentru a-l rula n NetBeans
se va selecta n meniul contextual afiat la selectarea fiierului care conine applet-ul
opiunea Run File.

Ca i n varianta anterioar, se va realiza interfaa aplicaiei i clasei mini i se


va aduga clasa interioar panouDesen. Apoi aplicaiei i se va aduga variabila
supdes i metoda init, care n cazul unei miniaplicaii Java conine codul coninut n
constructorul clasei aplicaiei va fi modificat astfel:
public void init() {
try {
java.awt.EventQueue.invokeAndWait(new Runnable() {
public void run() {
initComponents();
supdes = new panouDesen();
supdes.setPreferredSize(new Dimension(500, 300));
getContentPane().add(supdes, java.awt.BorderLayout.CENTER);
}
});
} catch (Exception ex) {
ex.printStackTrace();
}
}

77
Pentru testarea applet-ului se poate ncrca ntr-un browser fiierul creat de
NetBeans n directorul build. n exemplul considerat acesta poart numele
figuri.html.

n fiierul figuri.html applet-ul este inclus prin linia:


<APPLET codebase="classes" code="mini/figuri.class" width=500 height=540></APPLET>

Atributul codebase indic numele directorului n care se afl subdirectorul


care conine applet-ul.

78

Conectarea unei aplicaii Java la un server de baze de date


Conectarea unei aplicaii Java la un server de baze de date presupune
copierea ntr-un director a unui driver JDBC (Java Database Connectivity) specific
serverului de baze de date care urmeaz s fie accesat.
n cele ce urmeaz se va presupune c s-a instalat i lansat n execuie
serverul de baze de date MySQL. Acesta poate fi descrcat prin Internet sub forma
pachetului de aplicaii destinat dezvoltrii de site-uri web xamplite, care conine
printre altele serverul de web Apache i serverul de baze de date MySQL.

Pentru pornirea serverului MySQL se lanseaz n execuie mysql_start.bat din


directorul xamplite.

Fereastra afiat n urma lansrii n execuie a serverului MySQL nu trebuie


nchis pe toat durata rulrii aplicaiilor care vor accesa serverul deoarece la
nchiderea ei este oprit i procesul mysqld.exe specific serverului MySQL.

79

Pentru a realiza o aplicaie n Java care acceseaz serverul MySQL trebuie


realizate urmtoarele adaptri:

Se descarc MySQL Connector/J de la adresa :

http://dev.mysql.com/downloads/connector/j/5.0.html.

Acesta este driverul JDBC oficial pentru MySQL. Se dezarhiveaz fiierul


descrcat i din directorul rezultat se copiaz arhiva mysql-connector-java-5.0.6bin.jar ntr-un director care va fi referit ulterior, la crearea aplicaiei. O soluie bun
este

plasarea

fiierului

mysql-connector-java-5.0.6-bin.jar

directorul

xamplite/mysql sau n directorul aplicaiei curente.

Se creaz proiectul noii aplicaii i se adaug acestuia calea spre arhiva


mysql-connector-java-5.0.6-bin.jar folosind intrarea Libraries a arborelui
structural al proiectului :

Rezultat:

80

n continuare se poate scrie aplicaia.

Accesul la tabelele bazei de date

presupune n principiu urmtorii pai:


a. Se ncarc driverul JDBC necesar comunicaiei cu serverul MySQL
folosind apelul:
Class.forName("com.mysql.jdbc.Driver");

b. Se creaz o conexiune (obiect din clasa Connection) folosind metoda


static getConnection() din clasa DriverManager:
con = DriverManager.getConnection("jdbc:mysql//localhost/baza_date", "user", "password");

c. Se creaz un obiect Statement folosind obiectul din clasa Connection creat


la pasul anterior.
cda = con.createStatement();

d. Se creaz o fraz SQL (obiect din clasa String)


e. Se creaz un obiect din clasa ResultSet prin apelul metodei
executeQuery() sau se apeleaz metoda executeUpdate() din clasa Statement
folosind ca argument fraza SQL creat n pasul precedent.

Prima metod este

apelat pentru comenzile SELECT iar a doua pentru comenzi ca INSERT, UPDATE
sau DELETE.
ResultSet rs = stmt.executeQuery(fraza_SQL);

f. Dac s-a trimis serverului o comand SELECT se transfer datele din


rezultat

(ResultSet)

controalele

windows

corespunztoare:

JTextField,

JComboBox, JTable sau JList.

Exemplu fundamental:
S se realizeze o aplicaie care permite introducerea ntr-o baz de date a
raselor de cini.

81

1. Se lanseaz n execuie xampplite i se creaz baza de date rase :

2. n baza de date creat se adaug tabelele :


a. Tabelul tari :

b. Tabelul talie :

82

c. Tabelul scop :

d. Tabelul caine :

Pentru testarea aplicaiei se vor aduga nregistrri n primele 3 tabele create.


Aceste tabele vor servi la crearea listelor unor controale din clasa JComboBox.

3. Se pornete NetBeans, se realizeaz un nou proiect (RaseCaini de tip


General / Java Application) i se realizeaz adaptrile legate de conexiunea la
serverul MySQL.

83

4. Se adaug proiectului un fiier coninnd clasa principal raseCaini


derivat din JFrame :

84

5.

Clasei principale i se adaug dou variabile, conect din clasa

java.sql.Connection i stm din clasa java.sql.Statement :

6.

Se creaz interfata aplicaiei.

Pentru introducerea datelor, aceasta

cuprinde controalele de tip JComboBox comboTara, comboTalia, comboDestinatia i


controlul nume din clasa JtextField.

85

comboTara
comboTalia

comboDestinatia

nume

jButton1

jButton2

7. Se editez constructorul clasei raseCaini pentru a realiza iniializarea


tuturor variabilelor clasei.

Pentru scrierea corect a structurilor try-catch se va scrie coninutul blocului


try i se va creea structura folosind opiunea corespunztoare din meniul contextual.
Exemplu :

86

8. Se adauga proiectului metodele destinate populrii controalelor de tip


JComboBox . iniComboTara(), iniComboTalia(), i iniComboDest().

a. iniComboTara() :

87

b. iniComboTalia() :

c. iniComboDest() :

9. Se adauga proiectului metodele declanate la apsarea butoanelor.


a. Butonul nregistreaz

88

b. Butonul Abandon

Executarea aplicaiei
Aplicaiile din exemplele prezentate au fost lansate n execuie exclusiv din
mediul de programare NetBeans. n procesul de construire a proiectului (Build /
Build Main Project) mediul de programare creaz n directorul \dist un fiier
executabil.

dublu clic

89
Acesta poate fi lansat n execuie ca orice aplicaie Windows, din Windows
Explorer, cu un dublu clic.

Dac lansarea n execuie trebuie realizat dintr-o

fereastr Command, se va introduce comanda:

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