Вы находитесь на странице: 1из 65

Introducere:

Java este un limbaj de programare ini iat de James Arthur Gosling n cadrul firmei Sun Microsystems care este parte component a Oracle Corporation. Java se aseamn mult cu C/C++ dar este un limbaj complet orientat obiect fcnd mai uoar dar i obligatorie programarea orientat obiect. Codul surs, avnd extensia .java, trebuie compilat cu ajutorul compilatorului javac rezultnd un fiier binar .class dar acest fiier nu poate fi direct executat pe ci e nevoie de maina virtual java pentru a-l interpreta. Acest lucru asigur programelor java portabilitatea pe diverse platforme practic un program java scris i compilat pe orice fel de calculator va rula pe orice fel de calculator care are instalat maina virtual java. Faptul c este un limbaj interpretat face rularea programelor un pic mai greoaie i mai consumatoare de timp dar portabilitatea este un atu foarte tentant. Exist dou tipuri de aplica ii java, aplica iile obinuite care sunt rulate direct pe calculator cu ajutorul mainii virtuale java i applet-urile ,aplica ii care se incorporeaz n codul HTML al unui ite i ruleaz pe browserele web. Pentru a compila i rula programe Java trebuie s instalm mai nti maina virtual Java: descrcm i instalm j2re java2 Runtime Environment //probabil c l ave i deja instalat, altfel nu pute i juca jocuri pe Ymessenger i nu v vor merge unele programe descrcm Java Development Kit jdk1.6.xx i dezarhivm folderul plasndu-l ntr-un firector unde dorim. Eu l-am plasat n C:\Program Files\Java\ -deci n directorul de instalare al mainii virtuale Java. Compilatorul nostru se numete javac i se gsete n C:\Program Files\Java\ jdk1.6.0_22\bin --n cazul meu Adugm n variabila de mediu PATH din mediul Windows o nou cale de cutare, o cale ctre compilatorul javac, astfel nct s-l putem folosi n linie de comand. Pentru asta mergem n Start>Control Panel>SystemSe deschide o fereastr noua cu titlul SytemProprietiesApsm tabul Advanced>Environment Variables---Se deschide o alt fereastr unde apar variabilele de mediu>Selectm variabila PATH din fereastra System variables, apsm i adugm C:\Program Files\Java\ jdk1.6.0_22\bin la ea. Variabila Path re ine ci de cutare despr ire prin ; la programe. Atunci cnd specificm n linie de comand >program.exe, terminalul caut program.exe n directorul curent iar dac nu-l gsete l caut in cile de cutare din Path.

OpenBooklet padre_cosmin
http://download.oracle.com/javase/tutorial/java/TOC.html

ETAPELE COMPILRII 1) editm codul surs


TEXT EDITOR [ SalutPlaneta.java ] File | View | Tools | Help public class SalutPlaneta { public static void main(String[] args) { System.out.print(''SalutPlaneta!''); } } editm codul ntr-un editor de text salvm fiierul cu numele clasei extensia .java. Un fier surs Java con ine una sau mai multe clase dar neaprat cel mult o clas public i trebuie salvate cu numele acesteia. una din clasele programului trebuie s con in metoda(func ia) main in cadrul rularii programului, maina Java va cuta clasa cu func ia main si va executa codul nscris n aceata putem crea o surs .java cu mai multe clase n care o clas con ine func ia main, n urma compilrii se vor crea mai multe fiiere .class dar doar una va putea fi rulata, clasa care contine metoda main. De asemenea un fiier java poate con ine doar o singur clas public 2) compilarea efectiv: deshidem terminalul i scriem: $ javac SalutPlaneta.java rezultatul este un fiier .class numit SalutPlaneta.class care nu poate fi rulat direct de ctre sistemul de operare ci trebuie trimis mainii virtuale Java 3) rularea programului n terminal scriem: $ java SalutPlaneta se va afia: SalutPlaneta! Observa ii: comentariile pe un singur rnd se marcheaz cu //acesta este un momentariu comentariile pe mai multe rnduri se scriu ntre /*comentariu*/ Java este un limbaj complet orientat obiect, totul se include n clase chiar dac dorim sa facem doar un program structurat. clasa care con ine func ia main trebuie sa fie publica... public class AppMea{ func ia main trebuie sa fie declarat public, static si de tip void i va primi ca argumente un siruri de caractere: public static void main(String[] args) trimiterea argumentelor in linie de comanda: java AplMea arg1 arg2

Applet sunt aplica ii care se incorporeaz n cod HTML i ruleaz n browsere web nu necesit prezen a unei func ii main Exemplu de applet: import java.awt.Graphics; public class SalutWeb extends java.applet.Applet { public void paint(Graphics g) { g.drawString("Salut, World Wide Web!", 10, 50); } } Etapele utilizrii: scrie codul ntr-un editor de text compileaz codul asemntor unui program java fiierul compilat nu va rula, maina Java va spune ca lipsete func ia main facem o referin la fiierul compilat ntr-un fiier HTML numit SalutWeb.html <html> <head> <title>HelloWeb Applet</title> </head> <body> <h1 align=center>SalutWeb Applet</h1> <center> <applet name="SalutWeb" code="SalutWeb.class" width=250 height=100></applet> </center> </body> </html> punem fiierul html n acelai director cu fiierul binar java al appletului n linia de comand scriem: $ appletviewer SalutWeb.html acum putem deschide fiierul SalutWeb.html cu un browser import java.awt.Graphics; -->spune lui JRE unde s gseasc defini ia clasei public class HelloWeb extends java.applet.Applet { --> extends ofer posibilitatea folosirii propriet ilor clasei Applet(care este predefini ) n clasa definit de noi

!!!JAVA ESTE UN LIMBAJ CASE SENSITIVE!!! TIPURI DE DATE: Tipuri numerice: Tip By i Valori cuprinse byte 1 [-128, 127] short 2 [-32 768, 32 767 ] int 4 [-2 147 483 648, 2 147 483 647] long 8 [-9 223 372 036 854 775 808, 9 223 372 036 854 775 807] float 4 [3.4 x 10-38, 3.4 x 10+38] double 8 [1.7 x 10-308, 1.7 x 10+308] Tipul char char 2 0-:-255 re ine un caracter Unicode16 char a = 'm', b = '\u006d', c = 109; //toate re in caracterul m Caractere Escape: \\ \n \' \" \r \t \f backslash new apostrof ghilimele carriage tab fil line return nou Tipul boolean: boolean 1 true, false

OPERATORI Operatori Aritmetici: operator nume exemplu + plus a=b+c; minus a=b-c; * inmul it a=b*c / impr it a=b/c; //dac a, b, c sunt ntregi, n a se pune ctul mpr irii % modulo a = b%c; //returneaz restul mpr irii Operatori Rela ionali: operator nume mai mic < mai mare > mai mic sau egal <= mai mare sau egal >= testarea egalit ii == diferit != exemplu

Tipul referin : Re ine o adres ctre un obiect, asemntor unui pointer. Operatorul CAST schimb tipul variabilei (tip)variabila int a = (int) 5/2;

Operatori de incrementare / decrementare operator nume exemplu incrementare b = a++; postfixare(valoarea lui a ++ este prima dat atribuit lui b apoi este incrementat) c = ++a; prefixarea(valoarea lui a este prima dat incrementat apoi este atribuit lui c) decrementare b = a--; postfixarea -c = --a; prefixarea Operator de atribuire: var = expresie; Combina ii operator de atribuire-operatori matematici: +=, -=, *=, /=, %=, >>=, <<=, >>>=, &=, ^=, = a +=b; //echiv. cu a = a+b;

Operatori logici: Operator denumire ! nega ie logic && i logic sau logic Operatori logici pe bi i: Operator denumire >> deplasare la dreapta << deplasare la stnga >>> deplasare la dreapta & ^ ~ i pe bi i sau pe bi i sau exclusiv nu pe bi i

exemplu if(!(a==23)) .... if((a==4)&&(b<3)) if((a==4) (b<3)) exemplu a=a>>3 //deplaseaz la dreapta cu 3 pozi ii,
se copiaz bitul de semn la coada bi ilor lui a

ELEMENTE DE PROGRAMARE STRUCTURAT Condi ionala IF: if (expresie) instruc iune; if (expresie) { instruc iuni; } if (expresie) instructiune; else if instructiune; else instructiune; if (expresie) { instruc iuni; } else if(expresie) { instruc iuni } else { instructiuni; }

a=a<<4 //deplaseaz la stnga cu 4 pozi ii


bi ii lui a, nmul ire cu 24

a=a>>>3 //deplaseaz la dreapta cu 3


pozi ii, mpr ire ntreag cu 23, nu se copiaz bitul de semn la dreapta lui a

c=a&b//pune n c bi ii combina i si ai lui a i b c=a b//pune n c bi ii combina i si ai lui a sau b c=a^b//pune n c bi ii combina i si ai lui a xor b c=~a; //dac a=0 atunci c=255

Operatorul condi ional: exp1 : exp2 ? exp2 Dac exp1 este adevrat instruc iunea are ca rezultat exp2 dac nu instruc iunea are ca rezultat exp2 c = a>b:a?b; //dac a>b, c = a; dac a<=b, c=b

Condi ionala Switch Case switch (expresie) { case exp1: case exp2: secven instructiuni; break; secven instruc iuni; break; ....................................................... case expn: secvent instruc iuni; break; default: secvent instruc iuni; } Exemplu: int i =3; switch(i) { case 1 : System.out.println(1); break; case 2 : System.out.println(2); break; case 3 : System.out.println(3); break; default: System.out.println("Nu stiu cat e i"); } Oserva ii: exp1 -:- expn pot fi valori constante de tipul intreg sau char alternativa default este op ional instruc iunea break ne permite s ieim dintr-o condi ional switch case sau din primul ciclu do-while sau for

CICLURI: Ciclul FOR for (expinitializare ; exptest ; expcontinuare) instruc iune; for(i=0; i<100; i++) instructiune for(i=50; i==0; i--) //cu decrementare { secventa instructiuni } for(i=0; i<23; ++i) //cu incrementare prefixata { secventa instructiuni } for(i=0; i<34; i++) for(j=0; j<56; j++) { instructiuni if((j==10)&&(a==5)) break; /*oprete execu ia primului for(for(j=...) */ } Break permite ieirea din cel mai apropiat ciclu dintr-o ciclare complex

Ciclul Do While: Cu testare ini ial: while(expresie) instruc iune; while(expresie) { instructiuni; } Observa ie: dac expresia nu e adevrat din prima, instruc iunile din ciclu nu se execut niciodat Cu testare finala: do instructiune; while(expresie); do { instructiuni; }while(expresie); Observa ie: Instruc iunile se execut cel putin odat Instruc iunea break permite ie irea din cel mai apropiat ciclu
Instruc iunea continue permite trecerea la execu ia urmtorului ciclu srind peste instruc iunile urmtoare din ciclul curent System.out.exit(<cod eroare>) determin ieirea necondi ionata din program

DIVERSE: ; - reprezin nstruc iunea vid i trebuie pus dup fiecare instruc iune. Instruc iunea compus: { instructiune1 ; instructiune2 ; ....... } Permite considerarea mai multor instruc iuni ca una singur NU EXIST GOTO N JAVA :(

VECTORI i MATRICE int [ ] v; echiv. cu int v[ ]; //am declarat o referin ctre un vector cu componente de tip integer int [ ][ ] m; echiv. cu int m[ ][ ]; //am declarat o referin ctre o matrice cu componente intregi v = new int[4]; //am alocat 4 elemente de tip integer la pointerul v m = new int[6][7]; //am alocat 6 * 7 elemente de tip integer la pointerul m int a = v.length(); //pune n a lungimea vectorului v Indecii elementelor vectorilor se afl ntre 0-:-lungime_vector-1 deci vectorul v are urmtoarele elemente: v[0], v[1], ...v[3] Accesarea lui v[4] va da eroare cel mai probabil Indecii elementelor matricelor se afl ntre 0-:-nr_linii-1 respectiv 0-:nr_coloane-1 Vom accesa elementele vectorului v i ale matricei m prin indeci: v[2] = 23; m[3][4] = 345; Alte lucruri utile: Putem declara i aloca spa iu pentru vectori, matrice ;i chiar ini ializa cmpurile acestora printr-o singur linie de cod: int [ ] v = new int[ 3] = {1, 2, 3, 4}; int [ ][ ] m = new int[2][4] = {{2, 3, 4, 5}, {9, 8, 7, 6}} Putem crea matrice cu numere de coloane diferite pentru fiecare linie:

vom crea o clas special pe care o vom include de fiecare dat cnd dorim s introducem ceva de la tastatur import java.io.*; import java.util.*; class cin { static InputStreamReader f = new InputStreamReader(System.in); static BufferedReader temp = new BufferedReader(f); static String linie() { try {return tamp.readLine();} catch(IOException e) {return (Erroare);} } static String Token() { StringTokenizer v = new StringTokenizer(linie()); if(v.hasMoreTokens()) return v.nextToken(); else return ; } } salvm clasa creat mai sus cu denumirea cin.java i o cumpilm cu $ javac cin.java - introducem fiierele cin.java si cin.class n folderul bin unde e plasat compilatorul javac i putem s i folosim avantajele n alte programe: ex.: class program { public static void main(String[ ] args) { String lin = cin.linie();//citete tot irul System.out.println(lin); char ch = lin.charAt(0); /* pune n ch primul caracter din irul lin*/ lin = cin.Token(); /*citete caractere pana la primul caracter spa iu*/ } }

int m[ ][ ] = new int [2][ ]; m[0] = new int[3]; m[1] = new int[5]; INTRRI I IEIRI DE LA CONSOL: Afiarea datelor: System.out.print( expresie ); System.out.println( expresie ); //afieaz i trece la linie nou System.out.print("v["+ i +"]= " + v[i]) //afiare complex Intrare de la consol: - nu mai e o chestie aa de uoar ca afiarea

METODE (FUNC II) Variabile vizibile la nivel de clas: - trebuie precedate la definire de cuvntul cheie static - variabilele numerice sunt ini ializate automat cu 0, cele booleene cu false, cele tip caracter cu codul 0(zero), cele de tip referin cu null Exemplu: public class Clasa1 { static int a, b; public static void main(String[] args) { a = 3; b = 10; System.out.println(a+b); } } - Orice metod ataat clasei de baz va fi precedat de modificatorul static Structura unei metode i apelul ei: static tip nume_functie (tip param1, tip param2, ...) { //.........prelucrare.......... return expresie; } Exemplu: public class Clasa1 { static int suma(int a, int b); {return a+b;} public static void main(String[] argv) { a=3; b=4; System.out.println(suma(a, b)); } } ! Metodele care sunt de orice tip afar de void trebuie s returneze o valoare de tipul respectiv cu care au fost definite valoarea se returneaz utiliznd instruc iunea return. fa de C/C++ dou metode se pot apela una pe alta fr a conta ordinea n care au fost definite n cadrul unei clase

Transmiterea parametrilor: - nr parametrilor formali(cei prezen i n antetul func iei) trebuie s fie egal sau mai mare dect al parametrilor efectivi(cei prezen i n instruc iunea de apel a func iei) - tipul parametrilor formali trebuie s coincid cu tipul parametrilor efectivi - n Java parametrii efectivi se transmit doar prin valoare. Parametrul, chiar dac este variabil, rmne nemodificat Nu se poate trimite dect valoarea unei variabile de la o func ie apelant la o func ie apelat. Variabilele pot fi: - variabile locale n corpul metodelor - parametri n antetul metodelor - date membru definite la nivelul clasei Variabilele declarate la nivel de bloc pot fi vzute doar n blocul respectiv: Ex: for(int i = 0; i<3; i++) ..........// variabila i poate fi vzut doar n cadrul instruc iunilor din ciclul acesta for Dac avem dou variabile cu acelai nume, una dat membru, definit la nivel de clas, i una variabil local a unei metode, n cadrul metodei respective este vizibil doar variabila local Ex: public class Clasa1{ static int a = 3; public static void main(String[] args) { int a = 2; System.out.println(a); //se va printa valoarea 2 } } Parametrii i variabilele locale sunt memorate ntr-o structur de tip stiv. Metodele pot fi suprancrcate dou sau mai multe metode pot avea acelai nume dar pot diferi ca numr de parametri sau ca tip.

CLASE - st la baza programrii orientate obiect; - incorporeaz date membru i metode; - sunt matri e de construc ie pentru obiecte; ClasaPrincipala.java
class Clasa1 { //date membru tip var1, var2; //metode void metoda_Clasa() {....} } public class ClasaPrincipala { // date membru . // medoda principala public static void main(String[] args) { Class1 Obiect; //am declarat o referinta de tipul Clasa1 Obiect = new Clasa1 //am creat un obiect de tipul Clasa1 Obiect.var1 = valoare; /*am atribuit valoare variabilei variabilei var1 din orbiectul a carei referinta este Obiect Obiect.metoda_Clasa(); /*am apelat o metoda dintr-un obiect*/ } }

Constructori: - orice clas are un constructor implicit i are rolul de a aloca memorie pentru obiect; - constructorul este apelat de operatorul new; - putem crea proprii constructori unei clase
class Fractie { //date membru int numarator, numitor; //Constructor 1 Fractie(int x) { numarator = x; } //Constructor 2 Fractie(int x, int y) { numarator = x ; numitor = y ; } //metode void afisare_zecimal() { double f ; if(numitor == 0) return ; else { f = numarator / numitor; System.out.println(f); } } } . public ClasaPrincipala { public static void main(String[] args) { Fractie F1 = new Fractie(2,3), F2 = new Fractie(4); }

folosim comanda $ javac ClasaPrincipala.java #se vor genera 2 fiiere .class Clasa1.class i ClasaPrincipala.class folosim $ java ClasaPrincipala pentru a executa ClasaPrincipala.class constructorul este o metod special a unei clase i are rolul de a aloca memorie pentru obiectul care a fost ini iat de tipul clasei respective operatorul new are rolul de: * apeleaz constructorul clasei respective; * returneaz referin a la care a fost creat obiectul respectiv; apelul unei metode sau a unei variabile dintr-o clas, dac acestea sunt publice, se face prin Obiect.variabila sau Obiect.metoda. datele membru ale unei clase sunt ini ializate implicit cu valoarea 0(pentru tipurile numerice), caracterul cu codul 0(pentru variabilele char), null (pentru variabilele de tip referin ).

} am creat doi constructori(am suprancrcat metodele constructor) primul constructor creeaz un obiect cu un numitorul 0(zero) - pentru obiectele la a cror ini ializare am trimis un singur numr. Frac ia

creat este desigur infinit i programul s-ar ncheia subit n momentul n care am face apelul func iei afisare_zecimal() al doilea constructor se folosete la obiectele la a cror ini ializare am trimis dou numere (Fractie F1 = new Fractie(2,3)) constructorii au ntotdeauna numele clasei din care fac parte; constructorul implicit este apelat n mod transparent(fr a scrie o secven special);

Datele membru statice i metodele statice - i datele si metodele pot fi statice; - static desemneaz c datele sau metodele pot fi accesate pornind de la numele obiectului creat de tipul clasei respective, dar si de la numele clasei nsei; - datele i metodele statice nu sunt memorate de fiecare obiect al clasei respective. Ele sunt memorate o singur dat, n cadrul clasei respective. class Geometric { static double Pi = 3.14159; static double Patrat(double x) { return x* x;} static double Cub(double x) { return x*x*x; } } public class ClasaPrincipala { public static main(String[] args) { int a = 5; double Aria_Cerc = Geometric.Pi * a; double Aria_Cub = Geometric.Cub(3); //........... Geometric Obiect = new Geometric(); double Aria_Patrat = Obiect.Patrat(a); } }

Cuvntul cheie this - se folosete atunci cnd o metod a unei clase are parametri care au acelai nume cu date membru ale clasei. this.variabila va face referin la data membru a clasei. class Complex { double Re, Im; Complex(double Re, double Im) { this.Re = Re; this.Im = Im; /*this.Re si this.Im fac referire la variabilele Re i Im ale clasei i nu la parametrii metodei(in cazul acesta al constructorului)*/ } void afisare() { System.out.println(Re + `` + i `` +Im); } } Matrice i vectori de Obiecte - folosim clasa creata mai sus pentru a ini ializa obiecte. public class ClasaPrincipala { public static void main(String[] args) { Complex[] VObj = new Complex[3]; for(int i = 0; i<3; i++) VObj[i] = new Complex(i+1, i+2); for(int i=0; i<3; i++) VObj[i].afisare(); //*********************** Complex[][] MObj = new Complex[8][5]; MObj[2][3] = new Complex(10, 11); } } !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Dac lucrm n folderul bin putem compila o clas oarecare fr ca ea s con in metoda main(). Fiierul ob inut are extensia .class i se gsete tot n bin, unde se gsete i cel tip .java. Toate clasele din bin care au metoda main() pot utiliza clasa creata de noi fr a o mai declara n vreun fel. Programele java con in un fir de execu ie numit Garbage Collector care elibereaz memoria ocupat de obiectele nereferite.

METODE DE A SCRIE CODUL SURS 1) Scriem toate clasele ntr-un fiier surs ClasaPrincipala.java
class Clasa1 { //.. } public class ClasaPrincipala { //.. public static void main(String[] args) { //.. Class1 obj = new Class1(); } }

$ javac ClasaPrincilala.java i compilatorul va cuta singur fiierele cu clase apelate n main() in ClasaPrincipala. $ java classpath <cale.../...> program #spune mainii java s caute programul program.class n cile specificate din variabila de sistem CLASSPATH. 4) PACHETE - punem codul surs n pachete - e alctuit din unul sau mai multe clase i/sau unu sau mai multe pachete; - clasele care alctuiesc un pachet pot fi regsite n unul sau mai multe fiiere surs; - presupunem c avem dou clase, A i B, fiecare cu cte o metod a) stabilim numele pachetului, ex Pachet1 b) crem un director care va re ine fiierele compilate, ex: <cale>/Pachete c) punem fiierele surs(cu extensia A.java i B.java) n directorul <cale>/Surse A.java B.java package Pachet1; package Pachet1; public class A public class B { { public void metodaA() public void metodaB() {....} {....} } } pentru a preciza c o clas apar ineunui pachet, prima linie a pachetului trebuie s fie package nume_pachet; pentru a avea acces la o clas din afara ei, clasa accesata trebuie s fie public, deci clasa respectiv trebuie declarata cu cuvntul cheie public. La fel trebuie declarate si metodele accesate dintr-o clas d) compilm folosind comenzile de terminal: $ javac d <cale>/Pachete <cale>/Surse/A.java $ javac d <cale>/Pachete <cale>/Surse/B.java n directorul Pachete se creaz automat un subdirector numit Pachet1, e) dorim s crem o clas cu metoda main() pentru programele din pachetul creat mai sus si o salvm n directorul <caleCP>. Prima linie n clasa principal va fi import Pachet1.*;

o singur clas con ine metoda main() salvm cu fiierul cu numele clasei care con ine clasa main plus extensia .java (n cazul de mai sus ClasaPrincipala.java) - compilm cu $ javac ClasaPrincipala.java i vor rezulta attea fiiere .class cte clase avem n codul surs - programul const n toate fiierele .class generate, pentru a-l executa vom forma comanda $ java ClasaPrincipala care va porni execu ia fisierului ClasaPrincilala.class care va accesa celelalte fisiere .class 2) presupunem c avem fiierul surs ClasaPrincipala.java salvat n folderul <cale>/sursa i vrem ca fiierele generate n urma compilrii s fie salvate n <cale2>/compilate. Vom folosi comanda $ javac d <cale2>/compilate <cale>/surse/ClasaPrincipala.java Rularea programului compilat ClasaPrincipala.class din <cale2>/compilate se face cu comanda $ java classpath <cale2>/compilate ClasaPrincipala 3) facem mai multe fiiere, fiecare cu cte o clas Clasa1.java ClasaPrincipala.java class Clasa1 { //.. } public class ClasaPrincipala { //.. public static void main(String[] args) { //.. Class1 obj = new Class1(); } }

dac fiierele surs se afl n acelai folder, folosim comanda

ClasaPrincipala.java import Pachet1.*; public class CalsaPrincipala { public static void main(String[] args) { System.out.println(``Folosirea primului pachet``); A obj1 = new A(); obj1.metodaA(); B obj2 = new B(); obj2.metodaB(); } } f) compilm programul specificnd locul unde gsesc sursa clasei principale si pachetul cu clasele A si B $ javac classpath <cale>/Pachete <caleCP>/ClasaPrincipala.java g) executm programul preciznd folderele care con in clasele $ java classpath <caleCP>;<cale>/Pachete ClasaPrincipala Obs: - clasele ce alctuiesc pachetul trebuie s fie publice,la fel i metodele care sunt apelate de alte clase trebuie s fie publice; - o clas ce alctuiete un pachet trebuie s fie singura clas n fiierul ei surs .java denumit cu numele ei Adugarea de subpachete Putem adauga subpachete la un pachet existent, modalitate util de a ordona logic a claselor. a) presupunem c vrem s crem o clas C care va intra n subpachetul SPachet1 C.java package Pachet1.SPachet1; public class C { public void metodaC() {...} } b) compilm folosind $ javac d <cale>/Pachete C.java

n folderul Pachet1 va aprea pe lng fiierele A.class i B.class i subfolderul SPachet ce va con ine C.class; c) crem o clas, ClasaPrincipala2.java n directorul bin care s utilizeze clasa C ClasaPrincipala2.java import Pachet1.SPachet1.*; class ClasaPrincipala2 { public static void main(String[] args) { C obj = new C(); obj.metodaC(); } } d) compilm ClasaPrincipala2.java cu $ javac classpath <cale>/Pachete ClasaPrincipala2.java e) se creeaz automat ClasaPrincipala2.class n directorul bin dar pentru execu ia ei trebuie s se tie unde se gsete clasa C.class f) executm programul specificnd calea ctre clasa C.class $ java classpath <cale>/Pachete <caleinstal>/j2sdk1.4.2_04/bin ClasaPrincipala2 Obs: import Pachet1.* nu poate fi folosit pentru accesul la un subpachet al pachetului Pachet1 ci numai la clasele din Pachet1, pentru a avea acces la subpachetul SPachet1 trebuie s specificm import Pachet1.SPachet1.*

CLASE INTERIOARE n Java exist posibilitatea de scriere de clase interioare. Clasele interioare pot fi, la fel ca datele membru i ca metodele, statice i nestatice. Clase nestatice - se includ n structura clasei mame care pentru a folosi clasa intern trebuie s con in o referin la un obiect declarat de tipul clasei interne. class CMama { //cream referinta la obiect de tipul clasei interne CInterna ref = new CInterna(); int a = 1; void MetodaMama() { System.out.println(``a=``+a); } class CInterna //clasa interna { int b = 2; void MetodaCInterna() { System.out.println(``Metoda din clasa inclusa``);} } } public class ClasaPrincipala { public static void main(String[] args) { CMama Obj = new CMama(); Obj.MetodaMama(); //apelam metoda clasei interne Obj.ref.MetodaCInterna(); System.out.println(Obj.ref.b); } } Datele i metodele claselor interioare nestatice pot fi accesate i fr a utiliza referin a ctre clasa intern CMama Obj = new CMama(); CMama.CInterna Obj2= Obj.new CInterna (); Obj2.MetodaCInterna();

Clase statice class CMama { int a = 1; void MetodaMama() { System.out.println(``a = ``+a); } static class CInterna { static int b = 2; static void MetodaCInterna() { System.out.println(``Metoda din clasa inclusa``); } } } public class ClasaPrincipala { public static void main(String[] args) { CMama Obj = new CMama(); Obj.MetodaMama(); Obj.CInterna.MetodaCInterna(); System.out.println(Obj.CInterna.b); } } Observa ii referitoare la clasele incluse att statice ct i nestatice: - dac crem un fiier cu dou clase n care una e inclus in alta i l numim CMama.java, dup numele clasei mame, clasa inclus numindu-se CInclusa, atunci in urma compilrii se vor genera dou fiiere .class. Un fiier se va numi CMama.class iar al doilea CMama$CInclusa.class. Deci fiierul .class al clasei interne se compune din numele clasei mame, simbolul $, numele clasei incluse, extensia .class.

CLASE IMPORTANTE PREDEFINITE N JAVA - sunt con inute de pachetul java.lang - nu e necesar folosirea directivei import CLASA Math Metoda Ce calculeaz long abs(long x) modul de ntreg lung double abs(double x) ... int abs(int x) ... float abs(float x) double pow(double a, ab double b) double exp(double x) ex double log(double x) logaritm natural(ln(x)) double sqrt(double x) x double random() numr aleatoriu n intervalul [0; 1) Rotunjiri Aproximri double ceil(double x) cel mai mic ntreg mai mare sau egal cu x(aproximare in avans) double floor(double x) cel mai mic ntreg mai mic sau egal cu x(aproximare n minus) long round(double x) cel mai apropiat ntreg de x int round(float x) ... Func iile max/min double max(double x, max{x, y} double y) float max(float x, float y) ... int max(int x, int y) ... long max(long x, long y) ... float min(float x, float y) min{x, y} int min(int x, int y) ... long min(long x, long y) ... double min(double x, ... double y)

Metoda Func ii trigonometrice double cos(double x) double sin(double x) double tan(double x) double acos(double x) double asin(double x) double atan???? Constante double E double PI

Ce calculeaz cos(x) sin(x) tg(x) tangenta arccos(x) arcsin(x) e = 2.71... = 3.14159...

CLASA String
- un obiect String re ine un ir de caractere - primul element dintr-un string are indexul 0(la fel ca in C/C++) - Clasa con ine 13 constructori dintre care: String(); - ini ializeaz un obiect String care re ine irul vid String s = new String(); //aici intr n ac iune constructorul String() s = ``Ana are mere.``; String (String s); ini ializeaz un obiect String care re ine un ir de caractere dat String s = new String(``Ana are mere``); char[] VectorCaractere = {`A`, `n`, `a`};//ir creat ca vector de caractere dar crend un ir astfel nu vom mai putea folosi func iile de prelucrare irurilor de caractere Copiere vector de caractere string SirCaractere.getChars(pozStart, lung, VectorCaractere, pozFinal); < === >
for (int i = pozStart; i < lung; i++) VectorCaractere[i] = SirCaractere.charAt(i);

................................................................................................... Exist dou metode de a re ine un ir de caractere: 1) irul de caractere e re inut ca o niruire de litere terminat cu caracterul NULL(\0 , cod ASCII 0), 2) Nu folosim caracterul NULL pentru a marca finalul irului dar folosim o structur care s re in numrul de caractere, lungimea irului n QBASIC un ir de caractere era un vector care pe prima pozi ie(index = 0) era re inut numrul de caractere al irului, caracterele erau re inute ncepnd cu pozi ia 1. Acest lucru limita lungimea unui ir la 255 caractere. Java folosete o clas n cadrul una din datele membru re ine lungimea irului.

LUCRUL CU IRURI DE CARACTERE Lungimea unui ir de caractere int length() ntoarce lungimea in caractere a unui ir de caractere int lungime = s.length() Accesarea unui caracter din irul de caractere - in Java NU putem accesa un element al irului de caractere cu s[k] - primul caracter are ns n continuare indicele 0 folosim char charAt(int i) pentru a extrage un caracter din sir char c = s.charAt(2); Compararea irurilor de caractere >> int compareTo (String s) compar irul de caractere re inut de obiectul curent cu irul de caractere re inut de s. Metoda returneaz: o valoare negativ, dac irul retinut de obiectul curent este situat, n ordine lexicografic, naintea irului re inut de obiectul s 0(zero) dac irurile coincid o valoare pozitiv, dac irul re inut de obiectul curent este situat, n ordine lexicografic, dup irul re inut de obiectul s String s1 = new String(``abcd``); String s2 = new String(``abCd``); int var = s1.compareTo(s2); >> int compareToIgnoreCase(String s) la fel ca metoda compareTo doar c este ignorat diferen a dintre literele mari i cele mici - dac n codul de mai sus am fi folosit compareToIgnoreCase, variabila var ar avea valoarea 0. >> boolean eguals(String s) returneaz true dac irurile de caractere re inute de obiectul curent i cel transmis ca parametru sunt identice. boolean var = s1.eguals(String s2) >> boolean equalsIgnoreCase(String s) la fel ca equals doar c ignor diferen a dintre majuscule si minuscule

Subiruri >> boolean startsWith(String s) returneaz true dac irul re inut de s precede irul re inut de obiectul curent >> boolean endsWith(String s) returneaz true dac irul re inut s se afl la sfritul irului re inut de obiectul curent String s = new String(``abcd``); String s1 = new String(``ab``); String s2 = new String(``cd``); System.out.println(s.startsWith(s1)); System.out.println(s.endsWith(s2)); //ambele instruc iuni de afiare vor afia true >> boolean regionMatches(int i1, String s, int i2, int l) compar dou subiruri de lungime l. Primul subir este al obiectului curent i incepe de pe pozi ia i1, al doilea subir este al irului s si incepe de pe pozi ia i2. n caz de egalitate metoda returneaz true, altfel returneaz false. String s1 = new String(``Ana are mere.``); String s2 = new String(``Mara are pere.``); boolean var = s1.regionMatches(2, s2, 3, 6); //valoarea re inut de variabila val va fi true

>> String substring (int index) metoda returneaz subirul irului curent ncepnd cu pozi ia dat de index i terminnd cu ultimul caracter din ir >> String substring (int poz1, int poz2) returneaz subirul irului curent incepnd cu pozi ia poz1 din ir i terminnd cu pozi ia poz2-1. s2 = s1.substring(3); s3 = s1.substring(2, 6);

>> String replace (char c1, char c2) returneaz irul ob inut dac se nlocuiesc in irul re inut de obiectul curent toate apari iile caracterului c1 cu caracterul c2 String s = new String(``mama``); s = s.replace(`m`, `t`); >> String replaceAll(String s1, String s2) metoda returneaz irul ob inut dac se nlocuiesc n irul re inut de obiectul curent toate apari iile subirului s1 cu subirul s2. String s = new String(``Ana are mere, merele sunt dulci.``); s = s.replaceAll(``mere``, ``pere``); irul s va con ine Ana are pere, perele sunt dulci. >> String replaceFirst(String s1, String s2) asemntor cu replaceAll ns nlocuiete doar prima apari ie a lui s1 cu s2 n irul re inut de obiectul curent. >> String trim() ntoarce subirul irului re inut de obiectul curent, subir ob inut prin eliminarea spa iilor de la nceput i de la sfrit. String s = new String(`` xx yy ``); String s1 = s.trim(); //s1 va re ine irul de caractere ``xx yy`` >> int indexOf(String s1) returneaz indicele primei apari ii a subirului s1 n irul re inut de obiectul curent. Dac subirul nu este gsit n irul referit atunci metoda returneaz valoarea -1. CONCATENAREA: irurile se cocateneaz cu operatorul +. String s1 = new String(``Ana are``); String s2 = new String(`` mere.``); String s3 = new String(); s3 = s1 + s2; >> String concat(String s) Concateneaz irul referit cu irul primit ca parametru. String s1 = new String(``Ana are``); String s2 = new String(`` mere.``); s1 = s1.concat(s2); Un alt exemplu este: System.out.println(``Ana are``.concat(`` mere.``));

NUMERIC CONVERSII STRING Conversia string Numeric Toate tipurile numerice (Byte, Integer, Double, Float, Long, Short) prezint cte o metod numit parse* care convertete un ir de caractere ntr-o valoare de acel tip. byte b = Byte.parseByte("123"); short s = Short.parseShort("123"); int i = Integer.parseInt("123"); long l = Long.parseLong("123"); float f = Float.parseFloat("123.4"); double d = Double.parseDouble("123.4e10"); Conversia string Numeric

int i = 13; String s1 = ``Ana avea `` + i + `` ani in acea poza.``; //conversia este fcut automat SAU int i = 123; String s = String.valueOf(i); Fiecare tip numeric are de asemenea o metod toString() String s1 = Integer.toString(1234); String s2 = Byte.toString(123); String s3 = Long.toString(1000000); String s4 = Float.toString(123.4); String s5 = Double.toString(123.4e10); CONVERSIA MAJUSCULE MINUSCULE String toLowerCase() returneaz irul din obiectul referit cu toate literele transformate n minuscule String toUpperCase() returneaz irul din obiectul referit cu toate literele transformate n majuscule METODA split String[] split(String expresie, int limit) caut expresia regulat dat ca parametru n ir i sparge irul n doi vectori de iruri de caractere. Parametrul limit este op ional i specific mrimea maxim a irului returnat. METODA CharSequence subSequence(int pozS, int pozF) returneaz o secven de caractere plasate ntre pozS i pozF-1.

RELUARE- FUNC II IMPORTANTE TRATARE A IRURILOR DE CARACTERE Returnarea de caractere/ subiruri dintr-un ir charAt(index) s.charAt(2) returneaz caracterul aflat pe pozi ia specificat de parametrul index n irul referit String substring (int poz1, int returneaz subirul dintre poz1 i poz2-1 poz2) din irul referit String substring(int poz) returneaz subirul dintre poz1 i sfritul irului referit Cutarea de caractere i subcaractere Returneaz prima(ultima) apari ie a caracterului n ir int indexOf(int ch, int Returneaz prima(ultima) apari ie a fromIndex) caracterului n ir cutnd n aval(amonte)
int indexOf(int ch) int lastIndexOf(int ch)

Compara ii ntre iruri de caractere Se fac n ordinea lexicografic, `b`> `a` > `B`>`A`, ``abcd`` > ``abc`` ``abcd`` > ``abcD`` boolean endsWith(String returneaz true dac irul referit se suffix) termin/ncepe cu irul primit ca boolean startsWith(String parametru prefix) returneaz true dac irul referit con ine subsirul primit ca parametru ncepnd cu pozi ia specificat de offset int compareTo(String compar lexicografic dou iruri de anotherString) caractere. Returneaz 0 egalitate, >0 irul referit este mai mare, <0 irul parametru este mai mare int la fel ca func ia compareTo() doar c compareToIgnoreCase(String ignor diferen a dintre majuscule i str) minuscule boolean equals(Object returneaz true dac irul referit este este anObject) egal cu cel primit ca parametru boolean la fel ca equals doar c ignor diferen a equalsIgnoreCase(String dintre majuscule i minuscule
boolean startsWith(String prefix, int offset)

int lastIndexOf(int ch, int fromIndex) int indexOf(String str) int lastIndexOf(String str) int indexOf(String str, int fromIndex) int lastIndexOf(String str, int fromIndex) boolean contains(CharSequence s)

Returneaz prima(ultima) apari ie a unui subir n irul referit Returneaz prima(ultima) apari ie a unui subir n irul referit cutnd n aval(amonte) returneaz true dac irul con ine secven a de caractere s

anotherString) boolean regionMatches(int toffset, String other, int ooffset, int len)

nlocuirea de caractere i subiruri Returneaz un ir nou n care oldChar e nlocuit cu newChar String replace(CharSequence nlocuiete toate subirurile care se target, CharSequence brodesc cu secven a de caractere target replacement) cu secventa replacement String replaceAll(String nlocuiete toate subirurile regex din regex, String replacement) irul referit cu replacement String replaceFirst(String nlocuiete doar primul subir identic regex, String replacement) cu regex gsit
String replace(char oldChar, char newChar)

testeaz dac regiunea [toffset toffset+len-1] din irul referit este egal cu regiunea [ooffsetooffset+len-1) din irul primit ca parametru boolean parametrul optional ignoreCase specific regionMatches(boolean ignorarea diferen ei dintre minuscule i ignoreCase, int toffset, majuscule String other, int ooffset,
int len) boolean matches(String regex)

testeaz dac irul referit se brodete cu expresia regulat

CLASA StringBuilder
Se aseamn cu clasa String doar c intern obiectele sunt tratate ca secven e de caractere de lungime variabil. Lungimea i capacitatea Clasa StringBuilder con ine o metod length() care returneaz lungimea secven ei de caractere din builder. Fa de stringuri, un string builder con ine o proprietate numit capacity(capacitate) numrul de spa ii care au fost alocate. Metoda capacity() returneaz capacitatea obiectului StringBuilder iar aceasta este ntotdeauna mai mare sau egal cu length i se expandeaz automat dac dorim s punem mai multe caractere in StringBuilder Constructori: Creeaz un stringbuilder gol cu o StringBuilder() capacitate de 16 elemente StringBuilder(CharSequence Creeaz un stringbuilder con innd cs) caracterele con inute de secven a de caractere cs plus nc 16 loca ii pentru secven a de caractere StringBuilder(int Creeaz un stringbuilder gol de initCapacity) capacitate specificat StringBuilder(String s) Creeaz un stringbuilder al crui con inut este preluat dintr-un ir StringBuilder sb = new StringBuilder(); /*creeaz stringbuilder gol de capacitate 16*/ sb.append(``Salut Planeta``); //adaug caractere la stringbuilder Seteaz o nou lungime pentru stringbuilder. Dac nou lungime este mai mic dect lungimea ini ial se pierd caractere din stringbuilder. Dac noua lungime este mai mare atunci se adaug caractere NULL void ensureCapacity(int Asigur faptul c avem o capacitate de cel pu in minCapacity) cea specificat Lungimea stringbuilderului se poate mri cu metodele append(), insert(), setLength() Capacitate i Lungime void setLength(int newLength)

StringBuilder append(boolean b) StringBuilder append(char c) StringBuilder append(char[] str) StringBuilder append(char[] str, int offset, int len) StringBuilder append(double d) StringBuilder append(float f) StringBuilder append(int i) StringBuilder append(long lng) StringBuilder append(Object obj) StringBuilder append(String s) StringBuilder delete(int start, int end) StringBuilder deleteCharAt(int index)
StringBuilder insert(int offset, boolean b) StringBuilder insert(int offset, char c) StringBuilder insert(int offset, char[] str) StringBuilder insert(int index, char[] str, int offset, int len) StringBuilder insert(int offset, double d) StringBuilder insert(int offset, float f) StringBuilder insert(int offset, int i) StringBuilder insert(int offset, long lng) StringBuilder insert(int offset, Object obj) StringBuilder insert(int offset, String s)

Adaug argumentul la stringbuilder. Data e convertit n string nainte de atribuire

terge secven a cuprins ntre pozi iile start i end-1. Metoda deleteCharAt terge caracterul de pe pozi ia primit ca param. Insereaz al doilea argument la stringbuiler. Primul argument specific cte caractere sunt nainte de pozi ia unde va fi plasat noul caracter. Data e convertit n string inainte de atribuire

StringBuilder replace(int start, int nlocuie caracterele specificate in end, String s) stringbuilder void setCharAt(int index, char c) StringBuilder reverse() Inverseaz secven ade caractere din stringbuilder String toString() Returneaz un string ce con ine secven a de caractere din stringbuilder

Clasa StringTokenizer
Se gsete n pachetul java.util i permite extragerea unit ilor lexicale. Acestea se consider separate prin caracterele spa iu, \t, \n, \r. Metode con inute: constructor, creeaz obiectul care StringTokenizer (String s) trateaz irul de caractere referit de s constructor, creaz obiectul care StringTokenizer (String s, String delim) trateaz irul de caractere referit de s, dar token-urile sunt separate de caracterele care alctuiesc delim returneaz true dac irul mai boolean contine token-uri necitite i false n hasMoreTokens() caz contrar returneaz irul de caractere care String nextToken() alctuiesc urmtorul token returneaz numrul de token-uri int countTokens rmase necitite import java.util. *; class Clasa { public static void main(String[] args) { String s = new String(cin.linie()); StringTokenizer t = new StringTokenizer(s); while(t.hasMoreTokens()) System.out.println(t.nextToken()); } }

Clase nfurtoare
Pentru fiecare tip primitiv exist cte o clas nfurtoare. Un obiect al clasei nfurtoare retine o valoare de tipul acela primitiv. int Integer short Short long Long byte Byte char Character double Double boolean Boolean int n = 4; Integer nr = new Integer(n); Double x = new Double(-123.54) int NR = nr.integerValue() //Fiecare obiect de clasa nfurtoare con ine o func ie care returneaz valoarea con inut de obiectul respectiv, denumirile acestora sunt <numeleclasei>Value() ex: integerValue(), shortValue(), longValue(), ... Fiecare clas con ine o metod static de conversie a unui ir de caractere la tipul primitiv respectiv: int parseInt(String s) int nr = Integer.parseInt(``123``) float parseFloat(String s) float nr = Float.parseFloat(``123.65``) double parseDouble(String s) double nr = Double.parseDouble(``321.432``) long parseLong(String s) long l = Long.parseLong(``1000``) byte parseByte(String s) byte x = Byte.parseByte(``123``) Dac conversia nu poae avea loc, programul se ncheie i se genereaz o eroare. Conversia invers se face simplu ncercnd s concatenm numrul cu irul de caractere: String sir = ``Ana are ``+ nr `` mere.`` Clasele nfurtoare con in constantele NaN(not a number) i Inf(infinit). if (Double.isNaN(x/y)) System.out.println(``Operatie nepermisa``)

Parametrii func iei main() pulbic static void main(String[] args)


Este un vector de iruri de caractere primite din linia de comand. Lungimea vectorului se poate afla din program prin args.length() Apelul clasei $ java Clasa Ana mere 12 are Clasa este fisierul executabil Clasa.class rulat de maina virtual java Ana, mere, 12, are sunt iruri de caractere, programul le va face prelucrarea, valorile transmise n linie de comand nu pot fi dect iruri de caractere

Numere mari
Clasa Integer Lucreaz cu ntregi foarte mari Bignteger(String s) constructor. Are rolul de a crea un obiect de tipul BigInteger pornind de la un obiect de tip String are rolul de a converti numrul re inut de obiectul String toString() curent ctre un ir de caractere adun la numrul re inut de obiectul curent BigInteger add numrul re inut de obiectul transmis ca parametru (BigInteger n) scade din numrul re inut de obiectul curent BigInteger numrul re inut de obiectul transmis ca parametru subtract (Biginteger n) nmul ete numrul re inut de obiectul curent cu BigInteger numrul re inut de obiectul transmis ca parametru multiply (Biginteger n) BigInteger divide mpr ire ntreag ntre numrul re inut de obiectul curent i numrul re inut de obiectul a (Biginteger n) crei referin este re inut de n returneaz un obiect care re ine restul mprtirii BigInteger numrului re inut de obiectul curent la numrul remainder obiectului transmis ca parametru (Biginteger n) dac obiectul curent re ine m i obiectul transmis BigInteger pow ca parametru valoarea n, atunci metoda (BigInteger n) n returneaz obiectul care retine m dac obiectul curent re ine m, metoda returneaz BigInteger obiectul m negate() returneaz -1 dac obiectul curent con ine o int signum() valoare negativ, 0, dac con ine zero, 1 daca con ine un numr pozitiv dac obiectul curent re ine m, iar obiectul referit int CompareTo re ine n, atunci metoda returneaz -1 dac m<n, 0 (BigInteger n) daca m=n, 1 daca m>n import java.math*; class Clasa{ public static void main(String[] args){ BigInteger n1 = new BigInteger(``1``); BigInteger n2 = new BigInteger(``2``); for(int i=1; i<=1000; i++) n1 = n1.multiply(n2); System.out.println(n1.toString()); } }

Clasa BigDecimal BigDecimal (String s) BigDecimal (BigInteger val) BigDecimal (double val) BigDecimal abs() String toString() BigDecimal add (BigDecimal n) BigDecimal substract (BigDecimal n)

BigDecimal multiply (BigDecimal n) BigDecimal divide (BigDecimal val, int rotunjire) int scale() BigDecimal setScale(int nrzec) BigDecimal negate() int signum() BigDecimal abs() int compareTo (BigDecimal val)

constructor, Are rolul de a crea un obiect de tip BigDecimal pornind de la irul s constructor. Creeaz un obiect pornind de la un alt obiect de tipul BigInteger constructor. Creeaz un obiect pornind de la o valoare de tipul double returneaz obiectul care retine modulul numrului re inut de obiectul curent returneaz numrul retinut de obiectul curent convertit ctre string returneaz un obiect care retine suma numerelor retinute de obiectul curent i cel transmis ca parametru. Rezultatul va avea numrul maxim de zecimale pe care le au cei doi operanzi returneaz obiectul care retine valoarea rezultat din scderea numerelor re inute de cei doi operanzi (obiectul curent, desczut i obiectul transmis ca parametru, scztor). Numrul de zecimale al rezultatului se ob ine ca la add obiectul care retine produsul numerelor re inute de cei doi operanzi mparte cei doi operanzi . Numrul de zecimale al rezultatului este egal cu numrul de zecimale al demprtitului returneaz numrul de zecimale ale numrului re inut de obiectul curent returneaz un obiect care memoreaz numrul re inut de obiectul curent cu nrzec zecimale returneaz un obiect care retine numarul memorat de obiectul curent, dar care a fost negativ returneaz sgn(x), -1 daca nr e negativ, 0 daca e zero, 1 daca nr e pozitiv returneaza obiectul care re ine modulul numrului memorat de obiectul curent compar numerele re inute de cei doi operanzi. dac obiectul curent re ine m, iar obiectul referit re ine n, atunci metoda returneaz -1 dac m<n, 0 daca m=n, 1 daca m>n

CLASE SPECIALE Clasa VECTOR


Ofer posibilitatea lucrrii cu o structur asemntoare vectorului, dar n plus, ofer posibilitatea adugirii sau tergerii unor elemente din interiorul vectorului. Clasa se gsete n interiorul pachetului java.util. Elementele vectorului sunt referin e ctre obiecte de orice tip dorim, dac dorim s folosim tipuri primitive va trebui s folosim clasele nfurtoare. La baza ierarhiei arborescente a claselor din Java se gsete clasa Object. O variabil de tip referin ctre un obiect al clasei Object poate re ine orice referin ctre un obiect al unei clase descendente. Un element al vectorului poate retine o referin ctre orice alt tip de obiect.

Metode: Vector() void addElement (Object O) Object elementAt (i) Object firstElement() Object lastElement() int size() void insertElementAt (Object O, int i) void removeElementAt (int i) setElementAt (Object O, int i)

constructor ce creeaz un vector fr nici un element(vector vid) adaug la sfritul vectorului un element care re ine o referin ctre un anumit obiect returneaz referin a ctre obiectul re inut de componenta de indice i a vectorului returneaz referin a ctre primul element al vectorului returneaz referin a ctre ultimul element al vectorului returneaz numrul de componente ale vectorului insereaz un obiect n vector pe pozi ia i. Celelalte elemente ale vectorului sunt deplasate ctre dreapta cu o pozi ie. Pozi ia i trebuie s fie cuprins ntre 0 i size()-1 terge un element al vectorului aflat pe pozi ia i. Celelalte elemente ale vectorului sunt deplasate ctre stnga cu o pozi ie. Pozi ia i trebuie s fie cuprins ntre 0 i size()-1 seteaz componenta de indice i s re in o referin ctre un nou obiect. Vechiul obiect a crui pozi ie era re inut de componenta i se pierde. Pozitia i trebuie s fie cuprins ntre 0 i size()-1 terge toate elementele vectorului

void removeAllElements() void removeElement terge componenta care are ca referin un obiect identic cu cel transmis prin parametru. Toate celelalte (Object O) int indexOf(Object O)
componente ale vectorului sunt deplasate ctre stnga ntoarce indicele primei apari ii a obiectului n vector

Exemplu: import java.util.*; class t { public static void main(String[] args) { Vector v = new Vector(); System.out.print(``n=``); int n = Integer.parseInt(cin.Token()); for(int i =0; i<n; i++) { System.out.print(``V[``+i+``]=``); int valoare = Integer.parseInt(cinToken()); v.addElement(new Integer(valoare)); } for(int i=0; i<n; i++) { Integer val = (Integer)v.elementAt(i); System.out.println(val.intValue()); } } } Observa ii referitoare la codul de mai sus: Elementele vectorului sunt referin e ctre obiecte ale clasei Integer. Fiecare obiect al clasei Integer re ine un numr citit. int valoare = Integer.parseInt(cin.Token()); v.addElement(new Integer(valoare)); La citire se returneaz referin a ctre obiectul de tip Integer. Deoarece, de fapt, un element al vectorului re ine o referin ctre un obiect de tip Object, referin a este convertit ctre Integer Integer val = (Integer)v.elementAt(i); Pentru a afia numrul citit, se utilizeaz metoda intValue() a clasei Integer, metid care returneaz valoarea re inut de obiect System.out.println(val.intValue()); Se mai poate scrie: System.out.println((Integer)v.elementAt(i).intValue());

CLASE EXTINSE: Pornind de la o clas se poate crea o alta clas care este o extindere a primei clase. Spunem c a doua clas motenete datele i metodele publice din prima clas. class ClasaParinte { int x, y; } class ClasaFiu extends ClasaParinte { int z; void suma() { System.out.println(``x + y + z = ``x+y+z); } } public class Clasa { public static void main() { ClasaFiu ref = new ClasaFiu(); ref.x = 3; ref.y = 4; ref.z = 5; ref.suma(); } } Observa ii: 1) Folosim cuvntul cheie extends pentru a arta c o clas motenete o alt clas 2) Dac dou metode sau dou date au acelai nume n clasa fiu i cea printe atunci implicit se apeleaz data sau metoda clasei fiu. n cazul in care se dorete apelarea datei, metodei clasei printe, se folosete cuvntul cheie super. super.variabila = valoare; 3) Constructorul subclasei apeleaz constructorul superclasei. Dac avem un constructor cu parametri atunci acesta trebuie apelat explicit altfel se va apela constructorul implicit fr parametri. Deci dac avem o superclas cu constructor avnd parametri prima instruc iune a subclasei trebuie s fie apelul constructorului superclasei.

class ClasaParinte { int a; String sirP; ClasaParinte(int a, String sirP) { this.a = a; this.sirP = new String(sirP); } } class ClassFiu extends ClasaParinte { int b; String sirF; ClassFiu(int a, int b, String sirP, String sirF) { super(a, sirP); this.b = b; this.sirF = new String(sirF) } } public class Clasa { public static void main(String[] args) { ClasaFiu obiect1 = new Clasa(12, 13, ``Ana``, ``mere``); } }

POLIMORFISM Prin polimorfism n elegem posibilitatea ca att superclasa ct i subclasa s aib metode cu acelai nume. Metodele pot fi redefinite. Cazul metodelor nestatice: class C1 { int a = 1; void metoda() {System.out.println(``clasa C1``);} } class C2 extends C1 { static int a = 2; void metoda() {System.out.println(``clasa C2``);} } public class Clasa { public static void main(String[] args) { //Cazul 1 C1 obj1 = new C1(); obj1.metoda(); //Cazul 2 C2 obj2 = new C2(); obj2.metoda(); //Cazul 3 C1 obj3 = new C2(); obj3.metoda(); } } Ambele clase, C1 i C2, au o metod metoda() care face lucruri diferite. Cazul 1 Este apelat C1.metoda() Cazul 2 Este apelat C2.metoda() Cazul 3 Este apelat C2.metoda(). Obiectul este al clasei C2 dar variabila referin ctre el este o referin ctre un obiect de clas C1.

Exist dou posibilit i: A) Tipul referin ei i tipul obiectului coincid(sunt ale superclasei sau ale subclasei). Este apelat metoda de tip comun. Se afieaz variabila care apar ine obiectului de tip comun. B) Tipul referin ei este al superclasei iar tipul obiectului creat este al subclasei <invers nu e cu putin > 1> Dac metoda redefinit este nestatic, Java ia n considerare tipul obiectului creat i deci va fi apelat metoda subclasei. Exemplul codului de mai sus. 2> Dac metodele i datele sunt statice se rescrie codul astfel: class C1 { static int a = 1; static void metoda() {System.out.println(``clasa C1``);} } class C2 extends C1 { static inst a = 2 static void metoda() {System.out.println(``clasa C2``);} } public class Clasa { public static void main(String[] args) { //Cazul 1 C1 obj1 = new C1(); obj1.metoda(); //Cazul 2 C2 obj2 = new C2(); obj2.metoda(); //Cazul 3 C1 obj3 = new C2(); obj3.metoda(); } } De dat asta n Cazul 3 se apeleaz metoda superclasei, clasei C1.

LEGARE Const n apelarea unei metode redefinite pornind de la referin a unui obiect. Legarea este static dac nainte de executarea programului se poate ti care metod este apelat dinamic dac numai n momentul executrii programului se decide care metod s fie apelat. Java permite i legarea dinamic Exemplu de legare dinamica: class C1 { int a = 1; void metoda() {System.out.println(``Clasa C1``);} } class C2 extends C1 { void metoda() {System.out.println(``Clasa C2``);} } public class Clasa { public static void main(String[] args) { C1 obj; int n = Integer.parseInt(cin.Token()); if (n==0) obj = new C1(); else obj = new C2(); obj.metoda(); } }

CLASE ABSTRACTE O clas abstract poate con ine date membru i mai multe metode, unele din aceste date i metode pot fi la rndul lor. Pentru o metod abstract, n superclas se trece doar antetul respectivei metode ele urmnd s fie redefinite n subclase. Clasele, metodele abstracte trebuie precedate de cuvntul abstract. Clasele abstracte nu se pot folosi direct, nu pot fi ini ializate n obiecte ci doar pentru a fi extinse. abstract class C1 { abstract void metoda1(); abstract void metoda2(); void decide(int b) { if(b == 0) metoda1(); else metoda2(); } } class C2 extends C1 { void metoda1() {System.out.println(``Metoda 1``);} void metoda2() {System.out.println(``Metoda 2``);} } public class Clasa { public static void main(String[] args) { C2 obj = new C2(); obj.decide(0); obj.decide(1); } }

INTERFE E Sunt proiecte de clas. O clas poate con ine doar constante i antete de metode. Pentru definirea interfe elor se folosete cuvntul cheie interface n loc de class. Cnd scriem o clas care implementeaz o anumit interfa se folosete cuvntul cheie implements n loc de extends. interface Interfata { int pi = 3.14; float Suprafata(); } class Cerc implements Interfata { int Raza; Cerc(int Raza) {self.Raza = Raza;} public float Suprafata() { return Interfata.pi * Raza*Raza; } } Observa ii: Constantele declarate n interfa se apeleaz cu numele interfe ei urmat de . i numele constantei(Interfata.pi) Constantele pot fi redefinite de date membru n cadrul subclaselor. Putem crea o referin ctre interfa pentru a memora un obiect care implementeaz o subclas. public class Clasa { public static void main(String[] args) { Interfata obj = new Cerc. }} Se poate crea o interfa care s moteneasc i mai multe metode: interfaca A {void metodaA();} interface B {void metodaB();} interface Extrinsa extends A, B {void metodaExt();}

Interfa a extins poate fi folosita pentru a implementa toate metodele interfe elor care au stat la baza extinderii. class ClasaX implements Extinsa { public void metodaA() {System.out.println(``metoda A``);} public void metodaB() {System.out.println(``metoda B``);} } public class Clasa{ public static void main(String[] args) { ClasaX obj = new ClasaX(); obj.metodaA(); obj.metodaB(); }}

n JAVA nu este implementat motenirea multipl dar se poate stipula cu ajutorul interfetelor.
interface A {void metodaA();} class ClasaA implements A {public void metodaA() {System.out.println(``Metoda A``);}} interface B {void metodaB();} class ClasaB implements B {public void metodaB() {System.out.println(``Metoda B``);}} class Mostenitoare implements A,B { public void metodaA() {A obj = new ClasaA(); obj.metodaA();} public void metodaB() {B obj = new ClasaB(); obj.metodaB();} } public class Clasa { public static void main(String[] args) { Mostenitoare obj = new Mostenitoare(); obj.metodaA(); obj.metodaB(); } }

MODIFICATORI Pentru Clase public public class Clasa{...} atunci aceast clas poate fi accesat de orice cod Java care acceseaz pachetul n care se gsete acea clas. Dac modificatorul este absent atunci clasa poate fi accesat doar din pachetul n care se gsete. Clasele publice trebuie scrise n fiiere care le poart numele i au extensia .java. abstract abstract class Clasa{...} marcheaz o clas abstract. Dac modificatorul nu este prezent atunci clasa nu este abstract. final final class Clasa{...} se trece atunci cnd NU se dorete ca respectiva clas s fie extins(derivat, motenit). O clas poate extinde o singur clas dar poate implementa mai multe interfe e(extends, implements), folosim modificatorul final pentru a face ilegale aceste opera ii asupra unei clase. Pentru definirea Datelor Membru: public public int a = 3; data membru poate fi accesat de oricunde este accesibil(inclusiv din afara pachetului) i poate fi motenit protected protected int a = 3; data membru poate fi accesat de codul aflat n acelai pachet i poate fi motenit. Nu poate fi accesat din afara pachetului private private int a = 3; data poate fi accesat dect din clasa din care face parte, Nu poate fi motenit. package are efect n absen a modificatorilor de mai sus. Data poate fi accesata de cod din acelai pachet i poate fi motenit numai de clase ale aceluiai pachet final data membru este considerat constant, nu poate fi modificat static data membru nu este memorat de fiecare obiect al clasei respective Pentru definirea Metodelor: final final void metoda(..) {..} specifica faptul c ntr-o clasderivat, metoda nu poate fi redefinit static static void metoda(..) {..} are ca efect faptul c metoda nu este re inut de fiecare obiect al clasei respective.

EXCEP II: Exemplu de excep ii: introducerea unui caracter diferit de cifr, ., - atunci cnd se dorete introducerea unui numr datele scrise n cmpul de primire nu sunt compatibile cu tipul variabilei ctre care sunt trimise se ncearc scrierea elementului n+1 al unui vector de doar n elemente se ncearc deschiderea unui fiier inexistent Exemplu de tratare a excep iilor class Eroare extends Exception { void afiseaza() { System.out.println(``x nu apartine [1, 10]``); } } public class Clasa { public static int CitireConsola() { int n = Integer.parseInt(cin.Token()); if(n<1 || n>10) throw new Eroare(); else return n; } public static void main(String[] args) { try { int numar = CitireConsola(); System.out.println(numar); } catch (Eroare err) {err.afiseaza();} } } //Observa ii: 1) Clasa Eroare extinde clasa Exception trebuie precizat aceast extensie 2) throws ntoarce referin ctre un obiect al clasei Eroare 3) Secven ele unde pot aprea erori trebuie s se gseasc n instruc iunile subordonate lui try 4) throw returneaz referin a ctre unul din obiectele clauselor trecute dup clauza throws

FIIERE
Sunt abordate ca fluxuri. Flux de intrare = fiier program Flux de ieire = program fiier Trebuie importat pachetul java.io import java.io.*; Fluxuri de intrare (fiier program) Sunt tratate de clasa FileInputStream Sursa este un fiier Destina ia este memoria Metode: constructorul are rolul de a deschide public FileInputStream fiierul al crui nume este dat de (String nume) parametrul de tip String. Dac fisierul throws FileNotFoundExceptiuon nu este gsit se returneaz un obiect al clasei FileNotFoundException citete un octet public int read() throws IOException nchiderea fiierului public void close() throws IOException Exemplu de cod: import java.io.*; public class f { public static void main(String[] args) throws IOException { FileInputStream f = new FileInputStream(``fisier.txt``); int ch = 0; while((ch=f.read())!=-1) System.out.print((char)ch); } } Alt exemplu de cod: import java.io.*; public class f { public static void main(String[] args) { try { FileInputStream f = new FileInpuStream(``C:\\Fisier.txt``); int ch = 0; while((ch=f.read())!=-1) System.out.print((char)ch); } catch(IOException e) { System.out.println(``Fisier negasit``); } } }

Fluxuri de ieire
Sunt tratate de clasa FileOutputStream. Sursa este o variabil int a programului Destina ia este un fiier. Metode: constructorul are rolul de a deschide fisierul al public FileOutputStream crui nume este dat de parametrul de tipul (String name) throws FileNotFoundException String i de a-l pregti pentru scriere scrie un octet public void write(int b) throws IOException nchide fiierul public void close() throws IOException Exemplu de cod care citete un fisier fisIn.txt i l scrie n alt fiier fisOut.txt import java.io.* public class f { public static void main(String[] args) throws IOException { FileInputStream f = new FileInputStream(``fisIn.txt``); FileOutputStream g = new FileOutputStream(``fisOut.txt``); int ch = 0; while((ch = f.read()) ! = -1) g.write(ch); f.close(); g.close(); } } Observa ii: la citirea unui fiier, sfritul fiierului se detecteaz prin faptul c ultimul octet retine -1. la deschiderea fiierului numele fiierului poate con ine i calea ctre el. Dac fiierul se afl n acelai director cu executabilul java, calea nu trebuie specificat neaprat, dac ns fiierul se gsete in alt parte, numele lui trebuie specificat. exemplu de cale complet: C:\\Documents and Settings\\user\\Desktop\\fisier.txt exemplu de cale relativ se formeaz avnd ca punct de plecare directorul curent, directorul unde se afl executabilul \\directorCopil\\directorCopil2\\fisier.txt ..\\fisier.txt fiierul se afl n directorul printe al directorului curent

Fluxuri de caractere
Se utilizeaz pentru a lucra cu fiiere text. Acestea pot con ine una sau mai multe linii. Fluxuri de intrare: Pentru a transforma un flux de octe i ntr-un flux de caractere vom utiliza constructorul clasei InputStreamReader public InputStreamReader clasa FileInputStream extinde clasa InputStream, parametrul in(de tipul (InputStream in)
InputStream) poate fi o referin ctre un obiect al clasei FileInputStream. permite ataarea fluxului de caractere a unei memorii numita buffer. Bufferul permite memorarea mai multor caractere citite ce urmeaz s fie prelucrare. Clasa InputStreamReader extinde clasa Reader deci parametrul in1 poate fi o referin ctre un obiect al clasei InputStreamReader contine metoda readLine() care citete din fiier o ntreag linie de caractere public String readLine() throws IOException

Fluxuri de ieire:
Clasa FileOutputStream extinde clasa OutputStream i creeaz un flux de ieire ctre un fisier al crei nume este transmis ca parametru. Clasa PrintStream creeaz mai multe metode print i constructor public FileOutputStream (String nume) throws FileNotFound constructor al clasei PrintStream public PrintStream Clasa PrintSream con ine metode print i (OutputStream out) println asemntoare celor din System.out.*. Valorile scrise n fiier sunt initial convertite n string. import java.io.*; public class f { public static void main(String[] args) throws IOException { FileOutputStream f = new FileOutputStream(``out.txt``); PrintStream fchar = new PrintStream(f); fchar.println(``O linie``); fchar.println(``Alta linie``); fchar.print(`` Continuare la a doua linie``); fchar.close(); } } INTRARE DE LA TASTATURA
n gestionarea intrrilor de la tastatur se poate utiliza constanta de tip in a clasei System.

public BufferedReader (Reader in1)

BufferedReader

Exemplu de cad care afieaz un ntreg fiier: import java.io.* public class f { public static void main(String[] args) throws IOException { FileInputStream f = new FileInputStream(``fisIn.txt``); InputStreamReader fchar = new InputStreamReader(f); BufferedReader buf = new BufferedReader(fchar); String linie; while((linie=buf.readLine()) != null) System.out.println(linie); fchar.close(); } }

import java.io.* import java.util.*; class cin { static InputStreamReader f = new InputStreamReader(System.in); static BufferedReader tamp = new BufferedReader(f); static String linie() { try {return tamp.readLine();} catch(IOException e) {return (``Eroare``);} } static String Token() { StringTokenizer v = new StringTokenizer(linie()); if(v.hasMoreTokens()) return v.nextToken(); else return `` ``; } }

PROCESE, THREADURI, INTERPROCESARE


Un program reprezint un proces care poate avea unul sau mai multe threaduri(fire de execu ie). Firele de execu ie reprezint buc i din programul principal care se pot executa n paralel. Ele mprtesc acelai spa iu de adrese i imaginea registrelor procesor. 1) Un fir de execu ie este un obiect al unei clase care extinde(motenete) clasa Thread 2) Secven a de instructiuni a acestui fir de execu ie este con inut de metoda run() a clasei 3) Un fir de execu ie se lanseaz utiliznd metoda start() a clasei din instan ierea creia a rezultat firul de execu ie respectiv. start() este motenit din clasa Thread. 4) Un fir poate fi pus n ateptare folosind metoda sleep(long msec) metod motenit din clasa Thread. Aceast metod poate genera o excep ie i trebuie pus sub constructia try. Exemplu simplu: class Fir extends Thread { int i = 0; public void run() { while(i<10) { System.out.println("i="+ i); try { sleep(1000); }catch(Exception e) { } i++; } } } public class Clasa { public static void main(String[] args) { Fir obiectFir = new Fir(); obiectFir.start(); } }

Program cu dou fire de execu ie: class Fir1 extends Thread { public void run() { int i = 0; while(i<10) { System.out.println("i= "+i); i++; } } } class Fir2 extends Thread { public void run() { int j = 0; while(j<10) { System.out.println("j= "+j); j++; } } } public class Clasa { public static void main(String[] args) { Fir1 obiectFir1 = new Fir1(); Fir2 obiectFir2 = new Fir2(); obiectFir1.start(); obiectFir2.start(); } }

CONTROLUL THREADURILOR Firul de execu ie se poate afla n strile: new firul a fost creat dar nu este pornit nc runnable starea de execu ie sau de ateptare sau de ateptare a disponibilit ii unei resurse a sistemului blocked starea de blocare, n care se ateapt accesul la o resurs partajat waiting starea de ateptare la care s-a ajuns datorit apelului unei metode wait() sau join() fr specificarea unei limite de timp time waiting starea de ateptare a trecerii unei anumite perioade la care s-a ajuns prin apelul unei metode sleep(), wait() sau join() n care s-a specificat o durat de timp terminated firul i-a terminat execu ia Fiecrei stri i corespunde un element din tipul enumerare Thread.State. Aceste tipuri sunt: NEW, RUNNABLE, BLOCKED, WAITING, TIME_WAITING, TERMINATED Metode din clasa Thread: static int activeCount() returneaz numrul threadurilor active din grupul firului care a apelat aceast metod returneaz o referin la threadul care se execut static Thread currentThread() afieaz stiva cu apelurile metodelor din threadul stativ void care se execut dumpStack() Copiaz n tabloul dat ca parametru toate static int enumerate threadurile active din grupul cruia i apar ine (Thread[]array) firul ce se execut i din subgrupurile acestuia Returneaz tabelul asociativ dintre threadurile static Map <Thread StackTraceElement[]> neterminate i stiva apelulrilor metodelor getAllStackTraces() Ob ine identificatorul threadului curent long getId() ntoarce numele firului curent String getName() Returneaz prioritatea threadului curent int getPriority() Returneaz un tablou cu elementele din stiva StackTraceElement[] apelurilor metodelor. getStackTrace() Thread.State getState() Ob ine starea curent a firului de execu ie curent ntoarce grupul de fire de execu ie din care face ThreadGroup parte firul curent. getThreadGroup() Returneaz true dac firul care se execut de, ine static boolean holdsLock(Object obj) exclusivitatea asupra obiectului specificat. ntrerupe executia firului curent void intrrerupt()

static boolean interrupted() boolean isAlive() boolean isDaemon() boolean isInterrupted() void join() void join(long msec) void join (long msec, int nsec) void run()

void setDaemon (boolean) void setName (String name) void setPriority (int newPriority) static void sleep (long msec) static void sleep (long msec, long nsec ) void start()

Verific dac firul care se execut a fost ntrerupt. Returneaz true dac este activ Verific dac firul curent este de tip daemon Verific dac firul curent a fost intrerupt Se ateapt ca firul curent s se termine Se ateapt msec milisecunde Se ateapt cel mult msec milisecunde si nsec nanosecunde ca firul s se termine Dac la apelarea constructorului s-a specificat un obiect care implementeaz interfa a Runnable, atunci se apeleaz metoda run() a respectivului obiect. Altfel, metoda nu are nici un efect; eventual, se va redefini metoda n clasele derivate pentru stabilirea corpului de execu ie a threadului Stabilete dac firul curent devine daemon sau nu Schimba numele firului curent cu cel dat ca parametru Modific prioritatea firului de execu ie curent.

Cedeaz executia firului care se execut pentru msec milisecunde. Cedeaz execu ia threadului care se execut pentru msec milisecunde si nsec nanosecunde Pornete execu ia firului, maina virtual va apela metoda run() Threadul care se execut cedeaz execu ia static void yield() Un fir de execu ie terminat nu poate fi repornit. Priorit ile threadurilor: MAX_PRIORITY prioritate maxim MIN_PRIORITY prioritatea cea mai mic NORM_PRIORITY prioritate normal

Excludere mutual, posibilitatea de a bloca un fir ct timp un altul are acces la o dat: public class Clasa { long var=0; public static void main(String[] args) { Controler contrl = new Controler(); ThreadGroup toateFirele = new ThreadGroup("Toate Firele"); Fir objFir1 = new Fir(toateFirele, "FIR-1", contrl, 1); Fir objFir2 = new Fir(toateFirele, "FIR-2", contrl, 2); Fir objFir3 = new Fir(toateFirele, "FIR-3", contrl, 3); objFir1.setPriority(Thread.MIN_PRIORITY); objFir2.setPriority(Thread.MAX_PRIORITY); objFir3.setPriority(Thread.NORM_PRIORITY); System.out.println("-^-^-^-^-Am creat firele de executie, urmeaza sa le pornim----------"); objFir1.start(); objFir2.start(); objFir3.start(); //objFir1.contrl.askFor(); objFir2.contrl.askFor(); objFir3.contrl.askFor(); System.out.println("-^-^-^-^-^-^-^-Am blocat Threadurile-------------"); objFir1.contrl.relinquish(); objFir2.contrl.relinquish(); objFir3.contrl.relinquish(); System.out.println("-^-^-^-^-^-^-^-Am DEblocat Threadurile--------------"); //------------------------------------------------------------int numarFire = toateFirele.activeCount(); Thread fire[] = new Thread[numarFire]; toateFirele.enumerate(fire, true); for(int i=0; i<numarFire; i++) { if(fire[i].getName().equals("FIR-"+(i+1))) System.out.println("Am gasitfirul FIR-"+i); } //------------------------------------------------------------} } class Fir extends Thread { int a=10; public Controler contrl; //In exemplul din carte contrl era private, l-ar fi facut inaccesibil din afara clasei //constructorul clasei

public Fir(ThreadGroup grup, String nume, Controler contrl, int a) { super(grup, nume); //apelul metodei superclasei this.contrl = contrl; this.a = a; } public void run() { System.out.println("Numele meu este:" + this.getName() + " a = "+a); contrl.askFor(); while(a<100) { try { sleep(10); } catch(InterruptedException e) { System.err.println("Eroare n somn la threadul " +this.getName()); } a++; } } } class Controler //extends Object { private boolean inUse = false; public synchronized void askFor() { while(inUse) try { wait(); } catch(InterruptedException e) { System.out.println("Exceptie!"); } inUse = true; } public synchronized void relinquish() { inUse = false; notify(); } }

INTERFE E GRAFICE
O fereastr este un obiect al clasei JFrame i face parte din pachetul javax.swing. Exemplu de program simplu cu interfa grafica:
import javax.swing.*; public class Clasa { public static void main(String[] args) { JFrame fereastra = new JFrame("Titlu Fereastra``); fereastra.setSize(200, 300); fereastra.setLocation(100,400);

fereastra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); fereastra.setVisible(true); } }

Metodele clasei JFrame: JFrame() JFrame (String titlu) void setSize (int w, int h) void setLocation (int x, int y) void setDefaultCloseOperational (int a)

void setResizable(boolean ac) setVisible(boolean x)

contructor constructor cu parametru titlul care va fi afiat n bara de sus a ferestrei stabilete l imea(w) i nl imea(h) a ferestrei stabilete pozi ia unde vafi afiat col ul din stnga sus al ferestrei stabilete ce se ntmpl atunci cnd se nchide fereastra( se apas butonul X)Cea mai impotant constant este EXIT_ON_CLOSE, prin ea se cere nchiderea ferestrei i ncheierea execu iei programului dac parametrul este false nu se poate modifica dimensiunea ferestrei stabilete dac fereastra este vizibil sau nu

Crearea unei clase Ferestre import javax.swing.*; class Fereastra extends JFrame { Fereastra(String Nume, int lat, int inalt, int dreapta, int stanga) { super(Nume); setSize(lat,inalt); setLocation(dreapta, stanga); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } } public class Clasa { public static void main(String[] args) { Fereastra f = new Fereastra("Titlu", 100, 200, 25, 100); } } COMPONENTE: Fereastra trebuie s con in referin ctre o structur special care va re ine la rndul ei referin ele la obiectele ataate ferestrei. Container getContentPane() returneaz o referin ctre containerul ferestrei. Pornind de la aceast referin : adaug o component ferestrei. Component add Toate componentele sunt derivate (Component comp) din clasa Component ataeaz unui container un void setLayout gestionator de pozitie. Un astfel de (LayoutManager guest) gestionator de pozi ie este FlowLayout() setLayout ajut la aranjarea n fereastr a componentelor adugate.

BUTOANE: Butoanele sunt obiecte ale clasei JButton. Pentru a face ceva atunci cnd se apas un buton dar i pentru alte evenimente aprute din interac iunea utilizatorului cu componentele ferestrei n Java exist interfa a ActionListener asculttor de evenimente de tip ActionEvent. Un exemplu de eveniment este apsarea unui buton. Interfa a con ine un singur antet de metod: actionPerformed (ActionEvent e) Deci pentru ca o component s rspund la un eveniment de tipul ActionEvent, trebuie s implementeze clasa ActionListener: 1) Clasa care include componenta(fereastra)s con in clauza: implements ActionListener; 2) S fie implementat metoda actionPerformed() care se execut automat cnd este apsat un buton. Ea con ine codul necesar ac iunii dorite. Clasa ActionEvent con ine metoda: String getActionCommand() care returneaz irul de caractere asociat componentei are a transmis evenimentul. Exemplu de program care la apsarea unui buton va aprea un text n terminal: import java.awt.*; import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener { public Fereastra(String titlu) { super(titlu); setSize(200, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); JButton A = new JButton("Butonul 1"); x.add(A); JButton B = new JButton("Butonul 2"); x.add(B); A.addActionListener(this); B.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getActionCommand().compareTo("Butonul 1")==0) System.out.println("Ati apasat Butonul 1"); else System.out.println("Ati apasat Butonul 2"); } }

public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Fereastra cu 2 Butoane"); } }

Clasa JComponent
Un buton este un obiect al clasei JButton O etichet este un obiect al clasei JLabel Un cmp edit este un obiect al clasei JtextField Toate acestea sunt subclase ale clasei JComponent. Clasa JComponent este descendent a clasei Component. Metodele clasei JComponent: metoda stabilete culoarea de fond a componentei. void setBackground Se observ c parametrul ei este de tip Color (Color c) seteaz culoarea caracterelor(cnd componenta void setForeground con ine text) (Color c) Clasa Color contine anumite constante care indic culoarea metode prin care se poate stabili o culoare. Exemple de constante culori: black, red, white, yellow. O metod important este constructorul Color(float r, float g, float b) prin care se specific o culoare n sistemul RGB selecteaz fontul cu care se scrie. Parametrul este setFont(Font f) un obiect al clasei Font care are constructorul Font(String nume, int still, int marime) nume numele fontului(Arial, Gothic), stil stilul(ITALIC, BOLD, PLAIN). marime marimea scrisului JButton A = new JButton(``Apasa``); A.setBackground(Color.red); A.setFont(new Font(``Arial``, Font.ITALIC+Font.BOLD, 20)); A.setForeground(Color.GREEN); metoda seteaz un ir de caractere care va fi afiat void setToolTipText atunci cnd cursorul mouse-ului sta ioneaz (String text) asupra componentei JButton B = new JButton(``Buton2``); B.setToolTipText(``Eu sunt butonul 2``); Face ca o component s fie activat (v==true) void setEnabled sau nu(v==false). O component dezactivat nu (boolean v) mai rspunde comenzilor i are un aspect specific prin care utilizatorul este anun at de faptul c aceasta este dezactivat dac v==true componenta este vizibil altfel nu void setVisible (boolean v)

Clasa Toolkit Face ca programele scrise n Java s ruleze independent de rezolutia calculatorului. Metodele clasei Toolkit returneaz un obiect Toolkit. Contine public static Toolkit date despre setrile curente getDefaultToolkit() Dimension getScreenSize() returneaz o referin ctre un obiect de tip Dimension care contine lungimea(width) i nl imea(hight) n pizeli a ecranului Exemplu de program care creaz o fereastr care ocup ntreg ecranul
import java.awt.*; import javax.swing.*; class Fereastra extends JFrame { public Fereastra(String titlu) { super(titlu); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Toolkit ec = Toolkit.getDefaultToolkit(); Dimension dim = ec.getScreenSize(); int i = dim.height; int l = dim.width; setSize(dim.width, dim.height); setVisible(true); } } public class Clasa { public static void main(String args[]) { Fereastra fer = new Fereastra("Fereastra pe intregul ecran"); } }

Pozi ionarea Componentelor Pozi ionarea absolut: Pentru a lucra n absen a unui geestionator de pozi ie Container x = getContentPane(); x.setLayout(null); Componentele trebuie dimensionate i pozitionate pentru a putea fi fcute vizibile. Pentru dimensionarea componentelor se utilizeaz urmtoarele metode ale clasei LComponent: pozi ioneaz componenta la coordonatele (x, y) setBounds i o dimensioneaz cu dimensiunile lat(la ime) (int x, int y, int lat, int inal) i inal(nl ime) rolul de pozitionare setLocation(int x, int y) rolul de dimensionare setSize(int lat, int lung) Exemplu de cod care pozi ioneaz i aaz un buton n fereastr: Container x = getContentPane(); x.setLayout(null); JButton A = new JButton(``Exemplu``); A.setBounds(10, 10. 100, 40); Gestiuonarul de pozi ie FlowLayout: Componentele sunt afiate pe linii, n ordinea n care au fost declarate. Pe fiecare linie sunt afiate de la stnga la dreapta attea ct ncap.
import java.awt.*; import javax.swing.*; class Fereastra extends JFrame { public Fereastra(String titlu) { super(titlu); setSize(300, 150); Container x = getContentPane(); x.setLayout(new FlowLayout()); JButton A = new JButton("Buton 1"); x.add(A); JButton B = new JButton("Buton 2"); x.add(B); JButton C = new JButton("Buton 3"); x.add(C); JButton D = new JButton("Buton 4"); x.add(D); JButton E = new JButton("Buton 5"); x.add(E); JButton F = new JButton("Buton 6"); x.add(F); JButton G = new JButton("Buton 7"); x.add(G); setVisible(true); } } public class Clasa { public static void main(String args[]) { Fereastra fer = new Fereastra("Fereastra"); } }

Clasa FlowLayout con ine constante de aliniere pe linie din care mai importante sunt: CENTER, alinierea n centru, LEFT, la stnga, RIGHT, la dreapta. Constructorii clasei FlowLayout: FlowLayout() distan a ntre rnduri i ntre componente pe orizontal este de 5 unit i. Componentele sunt ordonate pe linie la centru. FlowLayout(int aliniere) se cere explicit alinierea ntr-un anumit fel(CENTER, RIGHT, LEFT) FlowLayout(int aliniere, int dist_oriz, int dist_vert) se specific i distan a pe orizontal ntre componente i distan a pe vertical ntre ele. Metod care dimensioneaz componentele i este acceptat de gestionatorul FlowLayout setPreferredSize(Dimension dim) Clasa Dimension are constructorul Dimension(int lat, int inalt) prin care se specific l imea i nl imea componentei. Gestionarul de pozi ie GridLayout Clasa GridLayout aranjeaz componentele n alt modalitate. Suprafa a ferestrei este mpr it n mai multe dreptunghiuri de suprafa egal i n fiecare dreptunghi astfel ob inut se aeaz o component care este de cele mai multe ori extins ca suprafa nct s ocupe ntreaga suprafa a dreptunghiului care i revine. Constructorii clasei GridLayout: GridLayout() dac avem n componente care trebuie aezate, suprafa a ferestrei este mpr it ntr-o singur linie i n coloane. Fiecare component este aezat ntr-un dreptunghi i componentele sunt fr spatiu ntre ele. GridLayout(int nr_linii, int nr_coloane) - suprafa a mpr it n nr_linii x nr_coloane dreptunghiuri. Fiecare dreptunghi retine o component. GridLayout(int nr_linii, int nr_col, int sp_o, int sp_v) se procedeaz ca anterior numai c se trec i spa iile pe orizontal i pe vertical ntre dreptunghiurile generate. Pentru GridLayout nu are nici un efect metoda setPreferredSize().

Gestionatorul de pozi ie BorderLayout Clasa BorderLayout mparte suprafa a ferestrei n 5 pr i: NORTH(Nord), SOUTH(Sud), EAST(Est), WEST(Vest) i CENTER(centru) setLayout(new BorderLayout()); JButton A = new JButton(``Buton 1``); x.add(A, BorderLayout.SOUTH); JButton B = new JButton(``Buton 2``); x.add(B, BorderLayout.NORTH); JButton C = new JButton(``Buton 3``); x.add(C, BorderLayout.WEST); JButton D = new JButton(``Buton 4``); x.add(D, BorderLayout.EAST); JButton E = new JButton(``Buton 5``); x.add(E, BorderLayout.CENTER); Butoanele sunt extinse automat pentru a ocupa tot spa iul neocupat. Gestionarul GridBagLayout
Este o extensie a gestionarului GridLayout(). Se mparte de asemenea suprafa a n dreptunghiuri i fiecare dreptunghi va fi ocupat de o component. Dreptunghiurile sunt aranjate de asemenea pe linii i coloane dar aici propor iile ntre linii si coloane pot diferi i o component poate ocupa mai multe dreptunghiuri. Metode: GridBagLayout()- constructor setConstraints(Component comp, GridBagConstrains cons) metod. Pentru a ti unde se pozitioneaz fiecare component vom scrie pentru fiecare component un set de restric ii care vor fi memorate de ctre un obiect de tipul GridBagConstraints. Constructorul GridBagConstraints(int griddx, int gridy, int gridwhidth, int gridheight, double weight, double weighty, int anchor, int fill, Insets insets, int ipadx, int ipady) gridx, gridy specific dreptunghiul care contine componenta gridwidth, gridheight numrul de dreptunghiuri pe linie, respectiv pe coloan care sunt ocupate de component. weightx, weighty l imea ocupat de dreptunghi pelinie, respectiv coloan. Aceastea nu sunt date in pixeli. Exemplu: presupunem c avem cte dou dreptunghiuri pe linie, daca pentru primul alegem weightx=1 iar pentru al doilea 2 atunci l imea primului dreptunghi este 1/3 din ltimea final iar a celui de-al doilea este de 2/3. anchor se refer la pozitionarea componentei n cadrul dreptunghiului. Valori posibile: CENTER, NORTH, NORTEAST, EAST, SOUTHEAST, SOUTH, SOUTHWEST, WEST, NORTHWEST.

fill se refer la cazul n care componenta ocup mai mult sau mai putin spatiu dect dreptunghiul rezervat ei i dorim s-o ajustm astfel nct s ncap exact. Putem s mrim sau s micorm componenta. Valiri posibile: NONE(nu se ajusteaz), HORIZONTAL(se ajusteaz pe l ime iar nltimea rmne nemodificat), VERTICAL(se ajusteaz pe nl ime dar l imea rmne nemodificat), BOTH(se ajusteaz att l imea ct i nl imea) insets referin la un obiect de tip Insets. Aceasta are rolul de a aduga n fiecare parte a componentei un spatiu exterior(n pixeli). Constructorul este Insets(int sus, int stanga, int jos, int dreapta). O component care are margini exterioare este separat de alt component cel pu in prin acele margini. ipadx, ipady adaug spatiu interior pe orizontal respectiv pe vertical. Dac ipadx ==1 se adaug de fapt un pixel la stnga si un pixel la dreapta. Diferen a ntre spatiul interior i cel exterior este dat de faptul c se presupune c spa iul interior este al componentei, deci pe aceast suprafa componenta rspunde la evenimente.

Gestionarul CardLayout Este special prin faptul c la un moment dat se afieaz o singur component. CardLayout() constructor next(Container parinte) afieaz urmtoarea component. Dac este afiat ultima component,se afieaz din nou prima component last(Container parinte) se afieaz ultima component first (Container parinte) se afieaz prima component addLayout(String name, Component c) - se adaug o component creia i se i atribuie un nume. Exemplu de cod ce genereaz o fereastr cu 3 butoane, la un moment dat numai un buton este vizibil doar c la apsarea unui buton se afieaz urmtorul buton.
import java.awt.*; import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener { CardLayout g = new CardLayout(); Container x = getContentPane(); public Fereastra(String titlu) { super(titlu); setSize(200, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); x.setLayout(g); JButton A = new JButton("Buton 1"); x.add("Buton 1", A); A.addActionListener(this); JButton B = new JButton("Buton 2"); x.add("Buton 2", B); B.addActionListener(this); JButton C = new JButton("Buton 3"); x.add("Buton 3", C); C.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) {g.next(x);} } public class Clasa { public static void main(String args[]) { Fereastra fer = new Fereastra("Fereastra"); } }

public Fereastra(String titlu) { super(titlu); setSize(250, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); GridBagLayout pozitii = new GridBagLayout(); JLabel et = new JLabel("Nume"); JTextField txt = new JTextField(15); JButton bt = new JButton("Buton 1"); Container x = getContentPane(); //pozitionam eticheta GridBagConstraints p_et = new GridBagConstraints(0,0,1,1,1,2,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0); pozitii.setConstraints(et, p_et); //pozitionare editBox GridBagConstraints p_txt = new GridBagConstraints(1,0,1,1,4,2,GridBagConstraints.EAST,GridBagConstraints.NO NE, new Insets(0,0,0,0), 0,0); pozitii.setConstraints(txt, p_txt); //pozitionarea butonului GridBagConstraints p_bt = new GridBagConstraints(0,1,2,1,1,1,GridBagConstraints.CENTER,GridBagConstraints. NONE, new Insets(0,0,0,0), 0,0); pozitii.setConstraints(bt, p_bt); x.setLayout(pozitii); x.add(et); x.add(txt); x.add(bt); setVisible(true); }

PRINCIPALELE COMPONENTE BUTOANE: Sunt obiecte ale clasei JButton. Metode ale clasei JButton: constructor 1, creeaz un buton fr text i JButton() fr imagine asociat constructor2, creeaz ce are pe el textul dat JButton(String text) ca parametru constructor 3, creeaz un buton ce are pe el JButton(Icon icon) o iconi JButton(String text, Icon constructor 4 cu text si iconi icon) seteaz pozi ia pe vertical a textului n setVerticalTextPosition raport cu imaginea(iconi a) din interiorul (constanta) cmpului butonului. constanta=JButton.TOP(deasupra) =JButton.BOTTOM(dedesubt) =JButton.CENTER(n centru) setHorizontalTextPosition seteaz pozi ia pe orizontal a textului n raport cu imaginea(iconi a) din interiorul (constanta) cmpului butonului. constanta=JButton.LEFT(stanga) =JButton.RIGHT(dreapta) =JButton.CENTER(n centru) Exemplu de ini ializare a unui buton cu iconi i text ataat: Icon icon = new ImageIcon(``cale\\imagine.gif``); JButton A = new JButton(``Buton 1``, icon); A.setVerticalTextPosition(JButton.TOP); A.setHorizontalTextPosition(JButton.CENTER);

ETICHETE (LABEL) Se utilizeaz pentru a afia texte i imagini cu rol explicativ pentru alte controlere. Sunt obiecte ale clasei JLabel. Metode ale clasei JLabel: se utilizeaz pentru a afia un ir de JLabel(String S) caractere constructor 2 se utilizeaz pentru a JLabel(Icon image) afia o imagine constructor 3 ce ini ializeaz o etichet JLabel(String text, Icon cu text i imagine ataat icon, int horizontalAlignment) se folosete pentru setarea aranjrii setVerticalTextPosition(c) setHorizontalTextPosition(c) textului pe orizontal i vertical pentru setVerticalTextPosition c = JLabel.TOP JLabel.BOTTOM JLabel.CENTER pentru setHorizontalTextPosition c = JLabel.LEFT JLabel.RIGHT JLabel.CENTER Container x = getContentPane(); x.setLayout(new GridLayout); Icon icon = new ImageIcon(``cale\\imagine.giff``); JLabel A = new JLabel(``Aceasta e o eticheta``, icon, JLabel.CENTER); A.setHorizontalTextPosition(JLabel.CENTER); A.setVerticalTextPosition(JLabel.TOP); x.add(A);

PANOURI JPanel Sunt obiecte ale clasei JPanel. constructor, obiectul rezultat are JPanel() gestionatorul de pozi ionare FlowLayout() constructor, obiectul rezultat are JPanel gestionatorul de pozi ie transmis ca (LayoutManagement layout) parametru seteaz gestionatorul de pozi ionare setLayout (LayoutManagement layout) adaug o component obiectului panel add(Component c) import java.awt.*; import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener { JPanel panou; public Fereastra(String titlu) { super(titlu); setSize(300, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); panou = new JPanel(); JButton A = new JButton("Rosu"); panou.add(A); A.addActionListener(this); JButton B = new JButton("Galbel"); panou.add(B); B.addActionListener(this); JButton C = new JButton("Albastru"); panou.add(C); C.addActionListener(this); x.add(panou); setVisible(true); } public void actionPerformed(ActionEvent e) { String culoare = e.getActionCommand(); if(culoare.compareTo("Rosu")==0) panou.setBackground(Color.red); else if (culoare.compareTo("Albastru")==0) panou.setBackground(Color.blue);

else panou.setBackground(Color.yellow); } } public class Clasa { public static void main(String[] args) {
Fereastra fer = new Fereastra("Fereastra cu panel(panou)");

} } CMPURI TEXT JTextField Se folosete pentru ca utilizatorul s inroduc date de la tastatur. creeaz un edit vid n care se pot introduce JTextField(int nr) nr caractere creeaz un edit ce con ine textul specificat, JTextField textul se poate terge i in locul lui poate fi (String s) scris altceva creeaz un edit care initial afieaz un ir de JTextField caractere i care are o lime suficient (String S, int nr) pentru a afia simultan un numr de nr caractere returneaz irul de caractere re inut de edit String getText() la un moment dat are rolul de a determina ca editul s con in void setText irul de caractere specificat (String s) import java.awt.*; import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener { JTextField etxt; public Fereastra(String titlu) { super(titlu); setSize(300, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); JLabel et = new JLabel("Introduceti Text:");

x.add(et); etxt = new JTextField(15); x.add(etxt); JButton buton = new JButton("Introducere"); x.add(buton); buton.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) {System.out.println(etxt.getText());} } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Exemplu de camp text"); } } COMBOBOX-URI JComboBox Sunt obiecte ale clasei JComboBox, liste din care utilizatorul poate selecta o anumit op iune. constructor JComboBox() adaug listei o op iune. Cum clasa void addItem(Object s) Object este la baza ierarhiei de clase Java, parametrul efectiv poate fi o referin ctre orice obiect inclusiv ctre unul de tipul String Object getSelectedItem() returneaz irul de caractere corespunztor op iunii selectate returneaz numrul de op iuni int getItemCount() returneaz indexul op iunii selectate int getSelectedIndex() returneaz obiectul re inut de item-ul Object getItemAt(int de indice ind(dac trebuie s obtinem ind) un obiect de tipul String atunci convertim prin operatorul de conversie String)

import java.awt.*; import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener { JComboBox lista; public Fereastra(String titlu) { super(titlu); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); JLabel et = new JLabel("Selectati materia preferata:"); x.add(et); lista = new JComboBox(); lista.addItem("Matematica"); lista.addItem("Informatica"); lista.addItem("Fizica"); lista.addItem("Alta materie"); x.add(lista); JButton buton = new JButton("Ce am selectat"); x.add(buton); buton.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) {System.out.println(lista.getSelectedItem());} } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Exemplu de lista"); } }

BUTOANE CHECK JCheckBox Sunt obiecte ale clasei JCheckBox. JCheckBox(String s) creeaz un buton radio de validare care contine sirul de caractere transmis ca parametru creeaz un buton de validare care con ine JCheckBox irul de caractere transmis ca parametru i (String s, boolean v) care este marcat sau nu n functie de valoarea(true sau false) retinut de v creeaz un buton de validare care con ine JCheckBox irul de caractere transmis ca parametru i o (String s, Icon f) imagine returneaz true dac butonul a fost selectat boolean isSelected() i false in caz contrar returneaz irul de caractere re inut de buton String getText()
import java.awt.*; import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener { JCheckBox b1, b2, b3, b4; public Fereastra(String titlu) { super(titlu); setSize(150, 200); Container x = getContentPane(); x.setLayout(new FlowLayout(FlowLayout.LEFT)); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel et = new JLabel("Selectati"); x.add(et); b1 = new JCheckBox("Matematica"); x.add(b1); b2 = new JCheckBox("Informatica"); x.add(b2); b3 = new JCheckBox("Fizica"); x.add(b3); b4 = new JCheckBox("Chimie"); x.add(b4); JButton buton = new JButton("Ce-am selectat"); x.add(buton); buton.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) { if (b1.isSelected()) System.out.println("Matematica"); if (b2.isSelected()) System.out.println("Informatica"); if (b3.isSelected()) System.out.println("Fizica"); if (b4.isSelected()) System.out.println("Chimie");

} } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Fereastra cu but Radio"); } }

BUTOANE RADIO JRadioButton Sunt obiecte ale clasei JRadioButton. Negrupate se comport ca i butoanele checkbox doar c au form rotund. Butoanele pot fi grupate, pot fi tratate ca un ntreg, la un moment dat numai un buton poate fi selectat. Pentru a grupa butoanele se folosete un obiect al clasei ButtonGroup. constructor ButtonGroup() adaug un buton grupului. Clasa void add(AbstractButton b) AbstractButton este superclas pentru JButton, JRadioButton, JCheckBox returneaz un pointer la grupul de butoane Enumeration getElements() returneaz numrul de butoane din grup int getButtonCount()
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.util.*; class Fereastra extends JFrame implements ActionListener { ButtonGroup grup; public Fereastra(String titlu) { super(titlu); setSize(150, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout(FlowLayout.LEFT)); JLabel et = new JLabel("Selectati"); x.add(et);
JRadioButton b1 = new JRadioButton("Matematica"); x.add(b1); JRadioButton b2 = new JRadioButton("Informatica"); x.add(b2); JRadioButton b3 = new JRadioButton("Fizica"); x.add(b3); JRadioButton b4 = new JRadioButton("Chimie"); x.add(b4);

JButton buton = new JButton("Ce-am selectat?"); x.add(buton); buton.addActionListener(this); grup = new ButtonGroup(); grup.add(b1); grup.add(b2);

grup.add(b3); grup.add(b4); setVisible(true); }


public void actionPerformed(ActionEvent e) { Enumeration Enum = grup.getElements(); while(Enum.hasMoreElements()) { JRadioButton b = (JRadioButton)Enum.nextElement(); if(b.isSelected()) System.out.println(b.getText()); } }

} public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Validare"); } }

MENIURI Se construiesc prin utilizarea obiectelor mai multor clase Clasa JMeniuBar obiectele acestei clase se utilizeaz pentru a ob ine meniuri clasice, aflate n partea de sus a ferestrei. Metode importante: JMenuBar() constructor add(JMenu) adaug meniului componente de tip JMenu Clasa JMenu obiectele acestei clase au rolul de a nscrie n meniu anumite op iuni, care la rndul lor pot con ine alte op iuni Metode importante: JMenu(String s) constructor. Obiectul afieaz irul s add(JMenuItem meniu) adaug o component de tipul JMenuItem add(Component c) adaug o alt component(derivat din tipul Component) Clasa JMenuItem arat ca o op iune i are rolul unui buton, adic selectat, conduce la o anumit ac iune. Metode importante: JMenuItem(String s)-constructor, op iunea afieaz irul s JMenuItem(Icon ic) constructor, op iunea afieaz o mic imagine JMenuItem(String s, Icon ic) constructor , op iunea afieaz un ir de caractere i o mic imagine

import java.awt.*; import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener { TextArea t; public Fereastra(String titlu) { super(titlu); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Bara de meniu JMenuBar bara = new JMenuBar(); //Creez meniul principal JMenu meniu1 = new JMenu("Operatii 1"); bara.add(meniu1); JMenu meniu2 = new JMenu("Operatii 2"); bara.add(meniu2); //adauga itemi pentru fiecare optiune din meniul principal JMenuItem item11 = new JMenuItem("OP 11"); item11.addActionListener(this); meniu1.add(item11); JMenuItem item12 = new JMenuItem("OP 12"); item12.addActionListener(this); meniu1.add(item12); JMenuItem item21 = new JMenuItem("OP 21"); item21.addActionListener(this); meniu2.add(item21); setJMenuBar(bara); Container x = getContentPane(); x.setLayout(new GridLayout()); setVisible(true); } public void actionPerformed(ActionEvent e) { System.out.println(e.getActionCommand()); } } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Fereastra cu meniu"); }}

Observa ii: 1) Meniurile pot con ine i submeniuri. Pentru aceasta, unei componente de tip JMenu i se adaug pe lng componente de tipul JMenuItem o alt component de tipul JMenu creia i se adaug la rndul ei componente de tipul JMenuItem //submeniuri JMenu altele = new JMenu(``Altele``); meniu1.add(altele); JMenuItem item131 = new JMenuItem(``OP 131``); altele.add(item131); item131.addActionListener(this); JMenuItem item132 = new JMenuItem(``OP 132``); altele.add(item132); item132.addActionListener(this); 2) Anumite op iuni de din meniuri sunt nzestrate cu acceleratori(shortcut-uri de meniu) prin care o anumit comand se poate ob ine fie din meniu, fie dintr-o combina ie de taste void setAccelerator(KeyStroke keyStroke) are rolul de a invoca ac iunea specific acestuia atunci cnd utilizatorul a apsat fie o tast fie o combina ie de taste pentru o tast: static KeyStroke getKeyStroke(char keyChar); pentru mai multe taste: static KeyStroke getKeyStroke(int keyCode, int modifiers); tastele pentru aceast metod se obtin: - primul parametru este o constant a clasei KeyEvent. Exemplu de constante: static int VK_1(tasta1), VK_F1(tasta F1), VK_V(tasta V) - al doilea parametru esteo constant a clasei ActionEvent. Exemple SHIFT_MASK(cod 1), CTRL_MASK(codul 1), META_MASK(codul 4), ALT_MASK(cod 8)
Exemplu dac dorim apsarea ALT+2 pentru actionarea Operatii2/OP 21 JMenuItem item21 = new JMenuItem(``OP 21``); item21.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_2, ActionEvent.ALT_MASK)); item21.addActionListener(this); pentru tastele CTRL+ALT+2 getKeyStroke(KeyEvent.VK_2, ActionEvent.ALT_MASK+ActionEvent.CTRL_MASK); 3) se pot aduga si butoane unui meniu JButton but = new JButton(``text``); meniu1.add(but);

CASETE: Se utilizeaz clasa JOptionPane care con ine casete clasice pentru afiarea acestor tipuri de cutii. Cutii de dialog de intrare creeaz i afieaz n centru ecranului o pubic static String cutie de dialog care afieaz mesajul trimis showInputDialog ca parametru. Dac utilizatorul apas (Object mess) Cancel se returneaz pointerul null
try{ String intr = JOptionPane.showInputDialog(``a=``); if(intr.length()==0) System.out.println(``Intr vida``); else System.out.println(intr); } catch(NullPointerException exc) {System.out.println(``S-a apasat Cancel``);}

public static String showInputDialog (Object mes, Object val)

public static String showInputDialog (Component par, Object mes)

public static String showInputDialog (Component par, Object mes, Object val)

la fel ca mai sus, numai c edit-ul memoreaz de la nceput valoarea transmis de la al doilea parametru(valoarea ini ial) exemplu cu valoarea ini ial 0 String intr = JOptionPane.showInputDialog (``a=``,``0``); ca mai sus numai c afieaz o cutie de dialog care are o component printe. Ex Afiarea se face cu ajutorul clasei care descrie fereastra principal String intr=JOptionPane.showInputDialog(this, ``a=``); camai sus numai c se afieaz o cutie de dialog n care edit-ul re ine si o valoare ini ial

Cutii de afiare a mesajelor Afieaz cutii de dialog pentru transmiterea mesajelor cu rezultate sau erori. public static void showMessageDialog(Component par, Object mes) afieaz o cutie de dialog cu un mesaj dorit. iint a=123; JOptionPane.showMessageDialog(this, ``a=``+5);

Cutii de dialog de confirmare Are 3 butoane: Yes, No, Cancel. public static int showConfirmDialog(Component par, Object mes); Returneaz un ntreg a crui valoare este dat de butonul pe care-l apas utilizatorul: 0 Yes, 1 No, 2 Cancel. Ex: a = 25; int rasp = JOptionPane.showConfirmDialog(this, ``5x5 = ``+a+``?``); System.out.println(rasp); Cutii de dialog cu op iuni: Permit selectarea unui set de butoane i schimbarea numelui lor. public static int showOptionDialog(Component f_par, Object mesaj, String titlu, int tip_optiune, int tip_mesaj, Icon icon, Object[] vect, Object buton_selectat_initial) Component f_par fereastra printe; Object mesaj sirul de caractere care apare afiat n cutie String titlu titlu ferestrei. int tip_optiune se alege una din op iunile urmtoare pentru a preciza tipul butoanelor(DFAULT_OPTION, YES_NO_OPTION, YES_NO_CANCEL_OPTION, OK_CANCEL_OPTION) int tip_mesaj are ca efect selectarea unei imagini care apare n cutie. Poate avea valorile: ERROR_MESSAGE, INFORMATON_MESSAGE, WARNING_MESSAGE, QUESTION_MESSAGE Icon icon icon-ul ferestrei Object[] vect vector de obiecte cu numele butoanelor Object buton_selectat_initial butonul care este selectat ini ial Exemplu de program n care se genereaz o fereastr cu un buton dup care, la apsarea respectivului buton se genereaz o alt fereastr cu 3 butoane, la apsarea unui buton se genereaz alt fereastr care spune ce buton a fost apsat. import java.awt.*; import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener { public Fereastra(String titlu) { super(titlu); setSize(200, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container x = getContentPane(); x.setLayout(new FlowLayout()); JButton A = new JButton("Apasa"); x.add(A); A.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) { Object[] butoane = {"Buton 1", "Buton 2", "Buton 3"}; int n = JOptionPane.showOptionDialog(this, "Apasati un buton", "Test showOptionDialog", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, butoane, butoane[2]); if(n==0) JOptionPane.showMessageDialog(this, "buton 1"); else if(n==1) JOptionPane.showMessageDialog(this, "buton 2"); else JOptionPane.showMessageDialog(this, "buton 3"); } } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Fereastra cu buton"); } }

SPA IU DE INTRODUS TEXT JTextArea


Permite utilizatorului s introduc text pe mai multe linii. Nu permite schimbarea fontului i mrimii odat selectat. Metode: constructor JTextArea() adaug la sfritul irului retinut de component void append un alt ir (String s) insereaz n text ncepnd de la pozitie un ir de void insert caractere. Dac pozi ie e mai mare dect (String s, int pozitie) indicele ultimului caracter, inserarea se face la sfritul sirului nlocuiete irul dintre indicii start i end cu void replaceRange (String str, int start, int irul transmis ca parametru. Dac ultimul parametru este vid, se terge ntregul text end) seteaz fontul utilizat setFont(Font f) returneaz irul de caractere con inut de String getText() component inclusiv caracterele newline pune irul S n TextArea String setText (String s) seteaz culoarea de fond a suprafe ei care void setBackGround afieaz literele (Color c) returneaz irul de caractere selectat String getSelectedText() selecteaz ntreg textul re inut de component void selectAll() returneaz indicele primului caracter selectat int getSelectionStart() returneaz indicele ultimului caracter select. int getSelectionEnd() dac v==true seteaz obiectul ca textul scris fr void setLineWrap newline(un paragraf) s se afieze pe mai multe (boolean v) rnduri cnd nu ncape n l ime. dac v==false for eaz afiarea paragrafului pe o singur linie chiar dac nu incape tot Obiectele JTextArea se afieaz pe fereastr prin intermediul obiectelor de tipul JScrollPane care permit ataarea de bare de scroll JScrollPane = panou = new JScrollPane(t); panou.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ ALWAYS); panou.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLL BAR_ALWAYS);

import java.io.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener { JTextArea t; public Fereastra(String titlu) { super(titlu); setSize(200, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new GridLayout()); JMenuBar bara = new JMenuBar(); JMenu meniu1 = new JMenu("File"); bara.add(meniu1); JMenuItem item11 = new JMenuItem("Open"); item11.addActionListener(this); meniu1.add(item11); JMenuItem item12 = new JMenuItem("Open"); item12.addActionListener(this); meniu1.add(item12); setJMenuBar(bara); t = new JTextArea(); t.setLineWrap(true); JScrollPane panou = new JScrollPane(t); panou.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROL LBAR_ALWAYS); panou.setVerticalScrollBarPolicy(JScrollPane.HORIZONTAL_SCR OLLBAR_ALWAYS); x.add(panou); setVisible(true); } void scriuFisier() throws IOException { FileOutputStream f = new FileOutputStream("text.txt"); PrintStream fchar = new PrintStream(f); StringTokenizer tok = new StringTokenizer(t.getText(), "\n"); while(tok.hasMoreTokens()) fchar.println(tok.nextToken()); fchar.close(); } void citFisier() throws IOException { FileInputStream f = new FileInputStream("text.txt"); InputStreamReader fchar = new InputStreamReader(f); BufferedReader buf = new BufferedReader(fchar); t.setText(""); String linie; while((linie=buf.readLine())!=null) t.append(linie+"\n"); } public void actionPerformed(ActionEvent e) { if(e.getActionCommand().compareTo("Save")==0) //Daca s-a selectat Save

{try {scriuFisier();} catch (Exception excp) {} } else //Daca s-a selectat Open {try {citFisier();} catch (Exception excp) {} } } } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Fereastra cu TextArea"); } }

bara.setValue(i); bara.setString(""+i/10+"%"); try {sleep(10);} catch(Exception e) {} } } } class Fereastra extends JFrame implements ActionListener { JProgressBar bara; AcBara t; public Fereastra(String titlu) { super(titlu); setSize(200, 100); Container x = getContentPane(); x.setLayout(new FlowLayout()); JButton A = new JButton("Start"); x.add(A); A.addActionListener(this); bara = new JProgressBar(); bara.setMinimum(0); bara.setMaximum(1000); bara.setStringPainted(true); x.add(bara); setVisible(true); } public void actionPerformed(ActionEvent e) { if(t==null) {t=new AcBara(); t.ref(bara); t.start();} } } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Bara de progres"); WindowListener t = new Evfer(); fer.addWindowListener(t); } }

BARA DE PROGRES JProgressBar Se utilizeaz atunci cnd programul efectueaz anumite opera ii consumatoare de timp i utilizatorul trebuie informat asupra timpului ramas pentru executarea respectivei opera ii. constructor JProgressBar() void setMinimum memoreaz valoarea la care componenta indic faptul c nu s-a efectuat nimic (int a) void setMaximum memoreaz valoarea la care componenta indic faptul c opera ia este terminat (int b) seteaz valoarea pe care o retine componenta void setValue la un moment dat. a<=c<=b (int c) dac primete ca parametru true, seteaz bara void ca s afieze un ir de caractere setStringPainted (boolean b) seteaz irul de caractere care va fi afiat de void setString bar. Evident, trebuie ca s fi fost executat (String s) metoda anterioar cu parametru true. Folosete threaduri,
import java.awt.*; import java.awt.event.*; import javax.swing.*; class AcBara extends Thread { JProgressBar bara; void ref(JProgressBar bara) { this.bara = bara; } public void run() { for(int i=0; i<=1000; i++) {

LISTE JSpinner Sunt liste speciale n care o valoare se poate selecta cu ajutorul unor sge i. Metode: constructor, SpinnerModel este o interfa JSpinner (SpinnerModel model) componenta ca afia valoarea setat. void setValue Patametrul este de tipul Object, clas care (Object value) st la baza ierarhiei de clase din Java. Parametrul poate primi o referin ctre orice obiect Exemplu de cod n care Object value este un ntreg s = new JSpinner(m); s.setValue(new Integer(5)); returneaz valoarea selectat de utilizator. Object getValue() valoarea selectat este de tip Object. Pentru a o transforma ntr-un ntreg procedm astfel: int k = ((Integer)s.getValue()).intValue(); SpinnerNumberModel implementare a interfetei SpinnerModel. Constructorul seteaz o plaj de valori (int v_init, int v_min, curpins ntre v_min i v_max. O valoare int v-max, int pas) care va fi afiat initial de component(v_init) i pasul de afiare al valorilor(pas) import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener { JSpinner s; public Fereastra(String titlu) { super(titlu); setSize(200, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); SpinnerNumberModel m = new SpinnerNumberModel(0, -10, 10, 1); s = new JSpinner(m); x.add(s); JButton A = new JButton("Ce-am selectat"); x.add(A); A.addActionListener(this);

setVisible(true); } public void actionPerformed(ActionEvent e) {System.out.println(((Integer) s.getValue()).intValue());} } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("JSpinner"); } }

CUTII DE TIPUL OPEN / SAVE


Se utilizeaz pentru a ncrca sau salva date le dintr-un/ntr-un fiier. constructor JFileChooser() afieaz o cutie de dialog de tipul Open. int showOpenDialog Valoarea returnat este 0 dac s-a apsat (Component fer_parinte) butonul Open sau este 1 dac s-a apsat butonul Close. Rolul este ca atunci cnd a fost selectat un fiier i s-a apsat Open, obiectul JFileChooser s con in date despre fiierul selectat. afieaz o cutie de dialog de tipul Save. int showSaveDialog Valoarea returnat este 0 dac s-a apsat (Component fer_parinte) Save si 1 dac s-a apsat Cancel. showOpenDialog si showSaveDialog nu salveaz si nu deschid fiiere ci doar returneaz informa ii despre fiier returneaz date despre fiierul deshis cu cele File getSelectedFile() dou func ii de mai sus. void addChoosableFileFilter adaug un filtru cutiilor de tipul Open i Save (Filter x); seteaz cutia astfel nct sse deschid ntrsetCurrentDirectory(File f) un anumit folder

Metodele clasei File: constructor File() construiete un obiect care con ine numele unui File(String name) fisier boolean isDirectory() returneaz true dac fiierul re inut de obiect este folder(folderele sunt fiiere speciale) sau false n caz contrar returneaz numele fiierului String getName() returneaz numele ntreg al fiierului,inclusiv String getPath() calea ctre el Clasa FileFilter i metodele ei: Este abtract i pentru a crea un filtru este necesar s rescriem dou metode ale sale: trebuie s returneze un sir de caractere care va fi public String afiat de lista File of Type, list con inut de getDescription() cutiile Open i Save public boolean accept returneaz true pentru un fiier care, fie are o extensie dorit, fie este de tip folder, altfel (File f) returneaz false. Dac metoda returneaz true, fiierul este aflat de cutiile Open/Save, altfel acesta nu este afiat Exemplu de program de afisare a unei cutii de tipul Save/Open
import java.io.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; class Filter extends javax.swing.filechooser.FileFilter { //redefinirea celor doua functii pentru filtru public boolean accept(File f) { if(f.isDirectory()) {return true;} String nume_fis = f.getName(); return nume_fis.endsWith(".java") || nume_fis.endsWith(".txt"); } public String getDescription() { return "*.java"+" "+"*.txt"; } } class Fereastra extends JFrame implements ActionListener { public Fereastra(String titlu) { super(titlu); setSize(200, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Container x = getContentPane(); x.setLayout(new FlowLayout()); JButton A = new JButton("Open"); x.add(A); JButton B = new JButton("Save"); x.add(B); setVisible(true); } public void actionPerformed(ActionEvent e) { if(e.getActionCommand().compareTo("Open")==0) //daca am apasat Open { JFileChooser c_op = new JFileChooser(); c_op.addChoosableFileFilter(new Filter()); int valRet = c_op.showOpenDialog(this); if (valRet==0) { File f = c_op.getSelectedFile(); System.out.println(f.getPath()); } } else //daca am apasat Save { JFileChooser c_save = new JFileChooser(); c_save.addChoosableFileFilter(new Filter()); int valRet = c_save.showSaveDialog(this); if(valRet==0) { File f = c_save.getSelectedFile(); System.out.println(f.getPath()); } } } } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Open/Save"); } }

Exemplu de program editor de text siplificat cu meniu File cu dou op iuni Save i Open:
import java.io.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; class Filtre extends javax.swing.filechooser.FileFilter { public boolean accept(File f) { if(f.isDirectory()) {return true;} String nume_fis = f.getName(); return nume_fis.endsWith(".java") || nume_fis.endsWith(".txt"); } public String getDescriptor() {return "*.java"+" "+"*.txt";} } class Fereastra extends JFrame implements ActionListener { JTextArea t; public Fereastra(String titlu) { super(titlu); setSize(200, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new GridLayout()); JMenuBar bara = new JMenuBar(); JMenu meniu1 = new JMenu("File"); bara.add(meniu1); JMenuItem item11 = new JMenuItem("Open"); item11.addActionListener(this); meniu1.add(item11); JMenuItem item12 = new JMenuItem("Save"); item12.addActionListener(this); meniu1.add(item12); setJMenuBar(bara); t = new JTextArea(); t.setLineWrap(true); JScrollPane panou = new JScrollPane(t); panou.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROL LBAR_ALWAYS); panou.setVerticalScrollBarPolicy(JScrollPane.HORIZONTAL_SCR OLLBAR_ALWAYS); x.add(panou); setVisible(true); } void scriuFisier(String nume) throws IOException { FileOutputStream f = new FileOutputStream(nume); PrintStream fchar = new PrintStream(f); StringTokenizer tok = new StringTokenizer(t.getText(), "\n"); while(tok.hasMoreTokens()) fchar.println(tok.nextToken()); fchar.close(); }

void citFisier(String nume) throws IOException { FileInputStream f = new FileInputStream(nume); InputStreamReader fchar = new InputStreamReader(f); BufferedReader buf = new BufferedReader(fchar); t.setText(""); String linie; while((linie=buf.readLine())!=null) t.append(linie+"\n"); } public void actionPerformed(ActionEvent e) { if(e.getActionCommand().compareTo("Open")==0) { JFileChooser c_op = new JFileChooser(); c_op.addChoosableFileFilter(new Filtre()); int valRet = c_op.showOpenDialog(this); if(valRet==0) { File f = c_op.getSelectedFile(); { try{citFisier(f.getPath()); } catch(Exception excp) {} } } } else { JFileChooser c_save = new JFileChooser(); c_save.addChoosableFileFilter(new Filtre()); int valRet = c_save.showSaveDialog(this); if(valRet==0) { File f=c_save.getSelectedFile(); { try {scriuFisier(f.getPath());} catch (Exception excp) {} } } } } } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("JNotepad"); } }

COMPONENTE DE TIP JToolBar


JToolBar() JToolBar (int orientare) constructor, creeaz o bar de unelte pozi ionat orizontal creeaz o bar de unelte orientat fie orizontal, orientarea va avea valoarea JToolBar.HORIZONTAL, fie vertical, orientarea va avea valoarea JToolBar.VERTICAL. Diferen a de orientare afecteaz modul n care sunt aezate pe ea diferitele componente(pe orizontal sau pe vertical) adaug o component adaug un separator(spa iu liber) ntre componente

COMPONENTE DE TIPUL JTable Se pot crea tabele.


JTable (Object[][] celule, Object[] cap_t) public void setPreferredScrollableViewportSize (Dimension dim) JTableHeader getTableHeader() Object getValueAt (int linie, int coloana) void setValueAt (Object ref, int linie, int coloana) JTable (int n_linii, int n_coloane) constructor. Celule este o matrice de referin e ctre obiectele afiate de celulele tabelului iar cap_t este un vector de referin e ctre obiectele afiate de capul de tabel. are rolul de a preciza dimensiunea tabelului i faptul c aceasta trebuie s con in scroll vertical. returneaz o referin ctre capul de tabel ntoarce o referin ctre obiectul memorat de celula specificata memoreaz referin a ctre obiect n celula specificat constructor al tabelului n care se creeaz un tabel cu n_linii i n_coloane. Liniile i coloanele se memoreaza de la 0

Component add (Component comp) void addSeparator()

import java.awt.*; import javax.swing.*; class Fereastra extends JFrame { public Fereastra(String titlu) { super(titlu); setSize(600,100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); JToolBar bara = new JToolBar(); bara.setBackground(Color.red); bara.setLayout(new FlowLayout(FlowLayout.LEFT)); JPanel panou = new JPanel(); panou.setBackground(Color.yellow); JComboBox lista = new JComboBox(); x.setLayout(new BorderLayout()); x.add(bara, BorderLayout.NORTH); x.add(bara, BorderLayout.CENTER); JButton A = new JButton("Buton 1"); bara.add(A); A.setPreferredSize(new Dimension(70, 30)); JButton B = new JButton("Buton 2"); B.setPreferredSize(new Dimension(70, 30)); bara.add(B); bara.addSeparator(); lista.addItem("Optiunea 1"); lista.addItem("Optiunea 2"); bara.add(lista); lista.setPreferredSize(new Dimension(100, 30)); setVisible(true); }} public class Clasa{ public static void main(String args[]) { Fereastra fer = new Fereastra("Bara cu unelte"); }}

import java.awt.*; import javax.swing.*; import javax.swing.table.*; import java.awt.event.*; class Fereastra extends JFrame implements ActionListener { JTable tabel; public Fereastra(String titlu) { super(titlu); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); tabel = new JTable(3, 4); JScrollPane panou = new JScrollPane(tabel);
tabel.setPreferredScrollableViewportSize(new Dimension(200, 3));

x.add(panou); JButton A = new JButton("Afiseaza"); x.add(A); A.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) { if(tabel.getCellEditor() != null) tabel.getCellEditor().stopCellEditing(); for(int i=0; i<2; i++) for(int j=0; j<4; j++) System.out.println(i+" "+j+" "+tabel.getValueAt(i, j));

} } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Tabel"); } } returneaz o referin ctre un obiect dac o celul a Table CellEditor tabelului este sub editare i null n caz contrar. Este o getCellEditor() interfa i contine antetul metodei stopCellEditing() care are rol de a stopa editarea i memorarea datelor introduse in tabel TableColumnModel este o interfa implementat de TableColumnModel clasa DfaultTableColumnModel. getColumnModel() returneaz o referin ctre un obiect TableColumn. TableColumn Un astfel de obiect con ine toate atributele unei getColumn(int i) coloane a tabelului: void setHeaderValue(Object ob) seteaz obiectul afiat de coloana respectiv setPreferredWidth(int lat) seteaz l imea coloanei setResizable(boolean v) v=true atunci marginile celulelor se pot modifica, v=false nu se pot modifica seteaz culoarea liniilor care separ celulele tabelului void setGridColor (Color c) seteaz nl imea liniilor tabelului(n pixeli) void setRowHeight (int h) seteaz culoarea cu care se va scrie in linia selectat void setSelectionForeground (Color c) seteaz spa iile ntre linii i coloane. Nu afecteaz setIntercellSpacing liniile separatoare dintre celule. Primul parametru (Dimension dim) pentru dim este pentru linii iar al doilea pentru coloane v = false atunci nu sunt trasate liniile orizontale ale void setShowHorizontalLines tabelului (boolean v) setShowGrid(boolean v) v=false atunci nu sunt afiate liniile orizontale i verticale ale tabelului

CLASA Container ADUGIRI Fereastra aplica iei re ine componentele grafice ataate folosind o variabil vector in care fiecare componenta asa va retine referin e ctre componente grafice. Cnd atam ferestrei componente grafice, mai nti declarm o referin la un obiect al clasei Container i o ini ializm cu adresa obiectului de tip container al ferestrei returnat de metoda clasei JFrame numit getContentPane(). Container x = getContentPane(); adaug o component containerului. Component add Componenta poate fi oricare (Component c) returneaza numrul componentelor re inute de int getComponentCount() container returneaz referin a la componenta de indice i. Component Clasa Component mai contine metodele: getComponent(i) void setName(String name) unei componente i se ataeaz un alt nume String getName() returneaz numele metodei dat prin setName() returneaz un vector de referin e catre Component[] componente getComponents() import java.awt.*; import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener { Container x; JPanel panou; public Fereastra(String titlu) { super(titlu); setSize(300, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); x=getContentPane(); x.setLayout(new FlowLayout()); //Adaugam elemente pe fereastra si panou JButton A = new JButton("Componente"); A.setName("Buton A"); x.add(A); JLabel et = new JLabel("O eticheta"); et.setName("Etichete et"); x.add(et); JTextField txt = new JTextField(20); txt.setName("edit-ul txt"); x.add(txt); panou = new JPanel(new FlowLayout()); panou.setName("panelul"); JButton B = new JButton("Buton pe panou"); B.setName("Buton pe panou"); panou.add(B); JLabel et1 = new JLabel("Eticheta pe panou"); et1.setName("Eticheta pe panou"); panou.add(et1); x.add(panou); A.addActionListener(this);

setVisible(true); } public void actionPerformed(ActionEvent e) { int nr_comp = x.getComponentCount(); System.out.println("Nr componente in fereastra = "+nr_comp); //afiseaza numele componentelor de pe fereastra for(int i=0; i<nr_comp; i++) { Component c = x.getComponent(i); System.out.println(c.getName()); } Component[] vect = panou.getComponents(); System.out.println("Nr comp atasate panoului="+vect.length); //afisez numele componentelor de pe panou for(int i=0; i<vect.length; i++) { Component c = vect[i]; System.out.println(c.getName()); } } } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Fereastra cu diverse componente"); } }

CUTII DE DIALOG Crearea cutiilor de dialoc cu elemente personalizate. O cutie de dialog poate fi afiat n mai multe feluri: A. Modal dup afiarea cutiei nu mai putem actiona asupra ferestrei din care aceasta a fost lansat B, Nemodal - dei cutia este afiat, putem ac iona i asupra componentelor re inute de cutie dar i asupra componentelor din fereastra din care aceasta a fost lansat. Cutia de dialog propriu-zis se ob ine ca instantiere a unei clase derivate din clasa JDialog. Clasa JDialog con ine constructorul: JDialog(Dialog fer_parinte, String titlu, boolean modal) prin care se specific fereastra printe(fereastra care con ine comanda care a lansat-o). Titlul ferestrei i un parametru de tip boolean, care dac re ine true, afiarea va fi modal, iar dac retine false, afiarea va fi nemodal. Clasele JDialog i JWindow au o superclas comun Window. Deci putem construi cutia la fel cum am construit fereastra principal. Fereastra Modal dup afiare cutiei nu mai putem ac iona asupra ferestrei din care aceasta a fost lansat Fereastra Nemodal Dei cutia este afiat, putem ac iona i asupra componentelor re inute de cutie, dar i asupra componentelor din fereastra din care aceasta a fost lansat, Cutiile de dialog sunt obiecte ale clasei JDialog. JDialog(Dialog fer_parinte, string titlu, boolean modal) fer_parintefereastra parinte(fereastra care con ine comanda pe care am lansat-o), titlutitlul ferestrei, modal==true(afiarea e modal)==false(afiarea este nemodal) Clasele JDialog i JWindow au o superclas comun(Window).
import java.awt.*; import java.awt.event.*; import javax.swing.*; class Dial extends JDialog implements ActionListener { //constructia cutiei de dialog JButton buton = new JButton("Inchide cutia"); JTextField txt = new JTextField(10); Container y; String sir = txt.getText(); Dial(JFrame parinte, String mesaj, boolean modal) { super(parinte, mesaj, modal); y = getContentPane(); setSize(200, 200); y.setLayout(new FlowLayout()); y.add(buton); buton.addActionListener(this); setVisible(true); }

public void actionPerformed(ActionEvent e) { setVisible(false); } } class Fereastra extends JFrame implements ActionListener { Dial cutie = null; public Fereastra(String titlu) { super(titlu); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); JButton A = new JButton("Afiseaza cutia"); x.add(A); A.addActionListener(this); JButton B = new JButton("Ce-am citit?"); x.add(B); B.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) { //Daca a fost apasat butonul "Afiseaza cutia" if(e.getActionCommand().compareTo("Afiseaza cutia")==0) //daca cutia nu a fost afisata if(cutie==null) cutie = new Dial(this, "Cutie de dialog", true); //daca cutia a fost afisata else cutie.setVisible(true); else //daca a fost apasat butonul "Ce-am citit?" if(cutie!=null) { //recuperez containerul cutiei Container t = cutie.y; //recuperez referinta catre edit JTextField com = (JTextField)t.getComponent(1); //recuperez continutul editului JOptionPane.showMessageDialog(this, com.getText()); } //daca vreau sa vad ce-am scris fara sa fi afisat cutia else JOptionPane.showMessageDialog(this, "Mai intai afiseaza cutia de dialog"); } } public class Clasa {public static void main(String[] args) {Fereastra fer = new Fereastra("Fereastra din care apelez cutia"); }}

Observa ii A nchide o fereastr nseamn a o faceinvizibil(setVizible(false)). A deschide o fereastr, deja creat, care a fost nchis nseamn a o face vizibil(setVizible(true)). Cutie nemodal import java.awt.*; import java.awt.event.*; import javax.swing.*; class Dial extends JDialog implements ActionListener { Container y; JFrame frs; Dial(JFrame parinte, String mesaj, boolean modal) { super(parinte, mesaj, modal); y = getContentPane(); frs = parinte; setSize(100, 100); y.setLayout(new FlowLayout()); JButton b1 = new JButton("Rosu"); y.add(b1); b1.addActionListener(this); JButton b2 = new JButton("Galben"); y.add(b2); b2.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) { Container z = frs.getContentPane(); if(e.getActionCommand().compareTo("Rosu")==0) z.setBackground(Color.red); else z.setBackground(Color.yellow); } } class Fereastra extends JFrame implements ActionListener { Dial cutie = null; public Fereastra(String titlu) { super(titlu); setSize(150, 100); Container x = getContentPane(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

x.setLayout(new FlowLayout()); JButton A = new JButton("Seteaza culoarea"); x.add(A); A.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) { if(cutie == null) cutie = new Dial(this, "Seteaza culoare", false); else cutie.setVisible(true); } } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Culori"); } }

CLASA GRAPHICS Pentru a afia imagini va trebui sa extindem clasa Canvas. Clasa Canvas con ine o metod numit paint(Graphics ecr) care primete o referin ctre un obiect al clasei Graphics i se pornete automat cnd componenta respectiv este afiat. Clasa Image: Clasa Image con ine: Referin ctre un obiect de tip Image. Un astfeld e obiect poate re ine o imagine citit. Referin a este utilizat n metoda paint() pentru a afia imaginea respectiv Constructor, care citete imaginea, stabilete mrimea componentei(setSize()) i culoarea de fundal(setBackground()). Pentru citirea imaginii se utilizeaz metoda clasei Toolkit numit getImage(): Image getImage(String fisier) unde parametrul reprezint calea ctre fiierul respectiv Metoda paint() redefinit, pentru a avea succes. Metoda deseneaz imaginea i folosete metoda drawImage() a clasei Graphics drawImage(image im, int a, int b, int latime, int inaltime, this) a,b coordonatele relative(fa de col ul din stnga-sus al componentei care afieaz imaginea), latimea, inaltimea ltimea si nl imea dreptunghiului care con ine imaginea, this obiectul curent(cel al clasei Image) Observa ii: - metoda poate redimensiona imaginea citit(prin valorile pentru latime i nl ime) Exemplu de program care ncarc o imagine:
import java.awt.*; import java.awt.event.*; import javax.swing.*; class Imagine extends Canvas { Image im; Imagine() { Toolkit ec = Toolkit.getDefaultToolkit(); im = ec.getImage("Imagine.jpg"); setSize(300, 300); setBackground(Color.YELLOW); } public void paint(Graphics ecr) { ecr.drawImage(im, 50, 50, 200, 200, this); } }

class Fereastra extends JFrame { Imagine p = new Imagine(); public Fereastra(String titlu) { super(titlu); setSize(150, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); x.add(p); setVisible(true); } } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Imagine"); } }

GRAFIC SIMPL
Tot n func ia paint() se apeleaz metodele: deseneaz o linie ntre punctele (x1, y1)drawLine (x2, y2) (int x1, int y1, int x2, int y2) deseneaz un dreptunghi pentru care drawRect(int x, int y, int col ul din stnga sus are coordonatele(x, latime, int inaltime) y) i de l ime i nl ime date drawRoundRect(int x, int y, deseneaz un drepotunghi cu coltirile int latimea, int inaltimea, int rotunjite lat, int inal) deseneaz un dreptunghi colorat pe void fillRect(int x, int y, int interior latime, int inaltime) void fillRoundRect(int x, int deseneaz un dreptunghi plin cu y, int latime, int inaltime, int col urile rotunjite lat, inat inal) deseneaz un poligon care are nr vrfuri. void drawPoly(int[] x, int[] Coordonatele x ale punctelor se gsesc y, int nr) n vectorul x, iar coordonatele y se gasesc n vectorul y ecr.setColor(Color.black); int[] X = {10, 100, 25, 80}; int[] Y = {10, 100, 25, 80}; ecr.drawPolygon(X,Y,4); void fillPolygon(int[] X, int[] deseneaz un poligon colorat pe interior, param asemanatori drawPoly Y, int nr) la fel ca drawPoly doar c ultimul punct void drawPolyline(int[] X, nu se unete cu primul int[] Y, int nr) deseneaz un oval.x, y col irile din void drawOval(int x, int y, stnga sus ale dreptunghiului int latime, int inal ime) circumscris de oval. La imea si inal imea sunt l imea i nal iema acelui dreptunghi la fel ca masi sus doar c ovalul este fillOval(int x, int y, int colorat pe interior latime, int inaltime) traseaz un arc. Arcul este o portiune drawArc(int x, int y, int dintr-un oval i primii 4 parametri sunt latime, int inaltime, int u1, ai ovalului cruia i apar ine arcul. int u2) Ultimii doi parametri sunt:> unghiul de unde pornete arcul i numrul de grade al arcului

Scrierea :
void setFont(Font f) void setColor(Color c) drawString (String str, int x, int y) seteaz fontul seteaz culoarea textului scrie pe ecran un ir de caractere. irul este scris cu font-ul i culoarea setate mai nainte. x, y reprezint coordonatele snga sus ale irului de caractere public void paint(Graphics ecr) { Font f = new Font(``Arial``, Font.ITALIC+Font.BOLD, 11); ecr.setFont(f); ecr.setColor(Color.red); ecr.drawString(``Un exemplu de scriere``, 20, 30); ecr.setColor(Color.black); Font f1 = new Font(``CourierNew``, Font.BOLD, 14); ecr.setFont(f1); ecr.drawString(``Scriu cu alta culoare si alt font``, 20, 50); }

fillArc(int x, int y, int latime, int inaltime, int u1, int u2) drawImage(image im, int a, int b, int latime, int inaltime, this)

traseaz un sector de oval colorat a, b coordonatele relative(fata de componenta creata, vezi setSize()) ale col ilui din stnga sus i ale dreptunghiului care con ine imaginea latime, inaltime ltimea i nl imea dreptunghiului care con ine imaginea this obiectul curent(cel al clasei Imagine)

Clasa Ellipse2D.Float Ellipse2D.Float(float x, float y, float la ime, float inal ine) deseneaz o elips Clasa Arc2D.Float Arc2D.Float(float x, float y, float latime, float inaltime, float start, float nr, int type) construiete un arc. Primii 4 parametri se refer la elipsa creia i apar ine arcul, start este unghiul de pornire, nr este numrul de grade al arcului, type este o constant care determin modul n care arat arcul. Tipuri de arce:

Clasa Graphics 2D import java.awt.geom.*;


Clasa Graphics2D motenete clasa Graphics. Metodele de mai jos se introduc n metoda paint() public void paint(Graphics ecr1) { Graphics2D ecr = (Graphics2D) ecr; ecr.setColor(Color.red); } Metode de desenat: deseneaz obiectul fr a-l umple cu draw(Shape S) culoare sau gradient. deseneaz obiectul umplut cu o fill(Shape S) culoare(gradient sau textur) Clasa Line2D.float Line2D.Float(float x1, float y1, float x2, float y2); construiete o linie care unete punctele de coodronate (x1, y1) i (x2, y2) ecr.setColor(Color.red); Line2D.Float linie = new Line2D.Float(10, 10, 100, 100); ecr.draw(linie); Clasa Rectangle2D.Float Rectangle2D.Float(float x, float y, float latime, float inaltime) contruiete un dreptunghi. Col ul din stnga sus are coordonatele (x, y) iar l imea i nl imea sunt specificate de urmtorii param. ecr.setColor(Color.red); Rectangle2D.Float drept = new Rectangle2D.Float(10, 10, 50, 50); ecr.fill(drept);

Clasa GeneralPath: se utilizeaz pentru trasarea unei linii frnte sau n particular, pentru trasarea unui poligon. Metode: GeneralPath() constructor moveTo(float x, float y) mut cursorul imaginar n putnctul de coordonate (x, y) lineTo(float x, float y) traseaz o dreapt ntre punctul n care se gsete cursorul imaginar i cel de coordonate transmise ca parametru closePath() traseaz dreapta care nchide linia frnt(se creaz un poligon) GeneralPath cale = new GeneralPath(0, 0); cale.moveTo(5, 5); cale.lineTo(100, 100); cale.lineTo(150, 10); cale.closePath(); ecr.draw(cale);

Stabilirea modului de trasare a liniilor


Grosimea liniei poate fi mai mare sau egal cu 1 pixel. Se utilizeaz metoda setStroke() a clasei Graphics2D. void setStroke(Stroke s) Parametrul este tip Stroke care este o interfa implementat de clasa BasicStroke. Clasa BasicStroke are mai mul i constructori: BasicStroke(float la ime) seteaz ltimea liniilor(n pixeli); BasicStroke(float la ime, int cap, int join) seteaz l imea liniilor(ltime), modul n care arat capetele segmentelor (cap) i modul n care acestea sunt unite(join). Pentru ultimii doi parametri, apelul metodei se realizeaz utiliznd constantele clasei BasicStroke.
class Imagine extends Canvas{ Imagine(); { setSize(300, 300); } public void paint(Graphics ecr1){ Graphics2D ecr = (Graphics2D) ecr1; ecr.setColor(Color red); BasicStroke c = new BasicStroke(10, BasicStroke.CAP_ROUND, BasicStroke.JOIN_BEVEL); ecr.setStroke(c); GeneralPath cale = new GeneralPath(0, 0); cale.moveTo(5, 5); cale.lineTo(75, 75); cale.lineTo(150, 5); ecr.draw(cale); } }

Clasa BufferedImage
Pentru pstrarea desenelor n memorie folosim clasa BufferedImage. Afiarea desenului se face n pain() cu drawImage(). Metode: BufferedImage(int latime, int inaltime, int imageType) constructor. Ultimul parametru primete o constan a clasei BufferedImage i semnific un anumit tip de imagine cu o anumit culoare de fond. Graphics2D createGraphics() returneaz o referin ctre obiect de tip Graphics2D cu ajutorul cruia putem desena o imagine retinut de obiectul de tip BufferedImage ImageProducer getSource() returneaz imaginea retinut de obiect. Avem nevoie i de o metod a clasei Toolkit: Image createImage(ImageProducer buf) creeaz un obiect de tip Image pornind de la o implementare a interfetei ImageProducer.
import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.geom.*; import java.awt.image.BufferedImage; class Imagine extends Canvas{ Image im; BufferedImage imag_a; Graphics2D gr; Imagine() { imag_a = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB); gr = imag_a.createGraphics(); Line2D.Float linie = new Line2D.Float(10, 10, 100, 100); gr.draw(linie); im = Toolkit.getDefaultToolkit().createImage(imag_a.getSource()); setSize(300, 300); setBackground(Color.WHITE); } public void paint(Graphics ecr) { ecr.drawImage(im, 0, 0, this); }} class Fereastra extends JFrame{ Imagine p = new Imagine(); public Fereastra(String titlu) { super(titlu); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); x.add(p); setVisible(true); }} public class Clasa{ public static void main(String[] args) { Fereastra Fer = new Fereastra("Imagine ascunsa"); }}

Gradient
Trecerea treptat de la o culoare la alta. setPaint(Paint p) Paint este o interfa implementat de mai multe clase. Pentru a stabili un gradient vom utiliza clasa GradientPaint. GradientPaint(float x1, float y1, Color c1, float x2, float y2, Color c2, boolean cyclic) (x1, y1) punctul n care vom avea culoare c1 n (x2, y2) vom avea culoare c2, ntre aceste puncte se face tranzi ia dac tranzi ia este aciclic(cyclic==false). Dac cyclic==true, n ambele puncte vom avea aceeai culoare c1, iar la mijlocul distan ei vom avea distan a c2
class Imagine extends Canvas { Imagine() { setSize(300, 300); } public void paint(Graphics ecr1){ Graphics2D ecr=(Graphics2D) ecr1; GradientPaint g = new GradientPaint(50, 50, Color.YELLOW, 100, 100, Color.Black, false); ecr.setPaint(g); Rectangle2D.Float drept = new Rectangle2D.Float(50, 50, 100, 100); ecr.fill(drept); } }

Texturi Se folosesc metodele clasei TexturePaint: TexturePaint(BufferedImage buf, Rectangle drept) Ambii parametri
sunt de tip referin de obiect. import java.awt.*; import javax.swing.*; import java.awt.geom.*; import java.awt.image.BufferedImage; class Imagine extends Canvas { Imagine() {setSize(300, 300);} public void paint(Graphics ecr1) { Graphics2D ecr = (Graphics2D) ecr1; BufferedImage buf = new BufferedImage(50, 50, BufferedImage.TYPE_INT_RGB); Graphics2D model = buf.createGraphics(); model.setColor(Color.red); Ellipse2D.Float el = new Ellipse2D.Float(0, 0, 50, 50); model.fill(el); Rectangle r = new Rectangle(50, 50); TexturePaint tp = new TexturePaint(buf, r); ecr.setPaint(tp); ecr.fillRect(0, 0, 300, 300); }} class Fereastra extends Jframe { Imagine p = new Imagine(); public Fereastra(String titlu) { super(titlu); setSize(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); x.add(p); setVisible(true); }} public class Clasa { public static void main(String[] args) { Fereastra Fer = new Fereastra("Imagine"); }}

Dreptunghiuri 3D
Clasa Graphics2D permite crearea de forme n relief: draw3DRect(int x, int y, int latime, int inaltime, boolean raised) deseneaz un dreptunghi fill3DRect(int x, int y, int latime, int inaltime, boolean raised) deseneaz un dreptunghi plin cu culoare Parametrul raised primete valori booleane(true dreptunghiul este ridicat, false dreptunghiul este cobort).
class Imagine extends Canvas { Imagine() {setSize(300, 300);} public void pain(Graphics ecr1) { Graphics2D ecr = (Graphics2D) ecr1; ecr.setColor(Color.red); for(int i=0; i<=10; i++) ecr.draw3DRect(50-i,20-i,80+2*i,30+2*i, true); for(int i=0; i<=10; i++) ecr.draw3DRect(200-i,20-i,80+2*i,30+2*i, false); }}

Redefinirea sistemului de coordonate n clasa Graphics2D se poate lucra n alt sistem de coordonate. translate(int x1, int y1) are rolul ca, dup executarea ei, originea spa iului de coordonate al utilizatorului s aib originea n punctul de coodronate(x1, y1) rotate(double alfa) rotete spa iul de coordonate n sens invers trigonometric(sensul acelor de ceasornic cu unghiul transmis ca parametru). Unghiul alpha trebuie s fie exprimat n radiani. de acum spa iul utilizatorului este cel ob inut n urma rota iei.
public void paint(Graphics ecr1) { Graphics2D ecr = (Graphics2D) ecr1; ecr.setColor(Color.red); ecr.setStroke(new BasicStroke(4)); Line2D.Float linie = new Line2D.Float(0,0,100,100); ecr.draw(linie); ecr.translate(0, 25); ecr.draw(linie); ecr.rotate(Math.PI/4); ecr.draw(linie); Rectangle2D.Float drept = new Rectangle2D.Float(100, 10, 50, 50); ecr.fill(drept); }

Evenimente
Evenimente de tip Action Sunt evenimente produse de: JButton(apsarea unui buton), JComboBox(atunci cnd se opereaz o selec ie n list), JTextField(atunci cnd se scrie n edit i se tasteaz Enter), JCheckBox, JRadioButton(atunci cnd se bifeaz sau se debifeaz butonul respectiv), JMenuItem(atunci cnd se selecteaz op iunea respectiv). Pentru a capta aceste evenimente, fereastra care contine aceste componente trebuie s implementeze interfa a ActionListener. Aceasta con ine antetul metodei void actionPerformed(ActionEvent e) metod prin care se programeaz ac iunea care trebuie ntreprins, dac evenimentul s-a produs. String getActionCommand() returneaz un ir de caractere dup care se poate identifica componenta care a transmis evenimentul. Astfel, n cazul butoanelor, se returneaz irul afiat pe ele, n cazul editului, se returneaz irul ComboBoxChanged, iar n cazul componentelor de tip JMenuItem, se returneaz irul afiat de component. void addActionListener(ActionListener l) se adaug componenta gestionatorului curent. Componentele care trebuie s reactioneze la un eveniment trebuie adugate cu addActionListener.
import java.awt.*; import java.awt.event.*; import javax.swing.*; class Fereastra extends JFrame implements ActionListener{ JButton A; JComboBox lista; JTextField t; JCheckBox b; JRadioButton c; public Fereastra(String titlu) { super(titlu); setSize(200, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); //Crearea si adaugarea unui buton A = new JButton("Buton 1"); x.add(A); A.addActionListener(this); //Crearea si adaugarea unei liste lista = new JComboBox(); lista.addItem("Optiunea 1"); lista.addItem("Optiunea 2"); x.add(lista);

lista.addActionListener(this); //Crearea si adaugarea unui Edit t = new JTextField(10); x.add(t); t.addActionListener(this); //crearea si adaugarea unui JCheckBox b = new JCheckBox("Bifeaza"); x.add(b); b.addActionListener(this); //crearea si adaugarea unui JRadioButton c = new JRadioButton("Radio"); x.add(c); c.addActionListener(this); setVisible(true); } public void actionPerformed(ActionEvent e) { System.out.println(e.getActionCommand()); //Tratarea apasarii butonului if(e.getActionCommand() == "Button 1") {/*cod care ruleaza cand butonul 1 e apasat*/} //Tratarea selectarii unei optiuni din ComboBox else if(e.getActionCommand() == "comboBoxChanged") { if(lista.getSelectedItem() == "Optiunea 1") {/*cod pentru cazul in care a fost selectata optiunea 1*/} else if(lista.getSelectedItem() == "Optiunea 2") {/*cod pentru cazul in care a fost selectata optiunea 1*/} } /*Textul din JTextField se poate citi cu t.getText() apasarea Tastei Enter dupa ce am scris ceva in JTextField face ca textul scris sa fie trimis ca eveniment*/ //Tratarea apasarii JCheckBox else if(b.isSelected()) {/*cod care ruleaza atunci cnd checkbox-ul e setat*/} } } public class Clasa{ public static void main(String[] args) { Fereastra fer = new Fereastra("Test ActionEvent"); } }

Evenimente de tipul MouseEvent Sunt generate de actiunile executate cu mouse-ul. Componenta care recep ioneaz astfel de evenimente trebuie s implementeze una sau ambele intferfe e prezentate mai jos: Interfa a MouseListener con ine antetele metodelor de mai jos care se execut cnd se ntlnete un eveniment al mouseului: mouseClicked(MouseEvent e) se execut atunci cnd se efectueaz click pe suprafa a componentei mouseEntered(MouseEvent e) se execut atunci cnd cursorul mouse-ului ajunge pe suprafa a grafic a componentei mouseExited(MouseEvent e) se execut atunci cnd cursorul mouse-ului prsete suprafa a grafic a componentei mousePressed(MouseEvent e) se execut atunci cnd am apsat butonul mouse-ului mouseReleased(MouseEvent e) se execut atunci cnd s-a eliberat butonul mouse-ului Interfa a MouseMotionListener con iene antetele: MouseDragged() metoda se execut n mod continuu, ct timp am apsat un buton al mouseu-lui i deplasm cursorul(ca la opera ia Drag and Drop) MouseMoved(MouseEvent e) se execut n mod continu, ct timp cursorul mouse-ului se plimb pe suprafa a componentei Clasa MouseEvent mai con ine i metodele: getX() returneaz coordonata x a cursorului grafic getY() returneaz coordonata y a cursorului grafic Ambele coordonate sunt relative la col ul stnga-sus al componentei. Pentru implementarea de asculttori de evenimente de mouse se utilizeaz metodele: void addMouseListener(MouseListener l) pentru asculttorul MouseListener void addMouseMotionListener(MouseMotionListener l) pentru asculttorul MouseMotionListener import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.image.*; class Imagine extends Canvas implements MouseListener, MouseMotionListener { Imagine() {

setSize(200, 200); setBackground(Color.RED); this.addMouseListener(this); this.addMouseMotionListener(this); } public void mouseClicked(MouseEvent e) {System.out.println("MouseClicked");} public void mouseEntered(MouseEvent e) {System.out.println("MouseEntered");} public void mouseExited(MouseEvent e) {System.out.println("MouseExited");} public void mousePressed(MouseEvent e) {System.out.println("MousePressed");} public void mouseReleased(MouseEvent e) {System.out.println("MouseReleased");} public void mouseDragged(MouseEvent e) {System.out.println("MouseDragged");} public void mouseMoved(MouseEvent e) {System.out.println("MouseMoved");} } class Fereastra extends JFrame { Imagine p = new Imagine(); public Fereastra(String titlu) { super(titlu); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); x.add(p); setVisible(true); } } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Evenimente Mouse"); } }

Program de desenat cu ajutorul mouse-ului import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.awt.image.*; class Imagine extends Canvas implements MouseListener, MouseMotionListener { Imagine im; BufferedImage desen; Graphics gr; int pozvX, pozvY, poznX, poznY; Imagine() { desen = new BufferedImage(200, 200, BufferedImage.TYPE_INT_RGB); gr = desen.createGraphics(); im = Toolkit.getDefaultToolkit().createImage(desen.getSource()); setSize(200, 200); this.addMouseListener(this); this.addMouseMotionListener(this); } public void paint(Graphics ecr) {ecr.drawImage(im, 0, 0, this);} public void update(Graphics ecr) {paint(ecr);} public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {pozvX=e.getX(); pozvY=e.getY();} public void mouseRelease(MouseEvent e) {} public void mouseDragged(MouseEvent e) { poznX = e.getX(); poznY = e.getY(); gr.drawLine(pozvX, pozvY, poznX, poznY); pozvX = poznX; pozvY = poznY; im = Toolkit.getDefaultToolkit().createImage(desen.getSource()); repaint(); }

public void mouseMoved(MouseEvent e) {} } class Fereastra extends JFrame { Imagine p = new Imagine(); public Fereastra(String titlu) { super(titlu); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); x.add(p); setVisible(true); } } public class Clasa { public static void main(String[] args) {Fereastra fer = new Fereastra("Simplu Paint");} } ///////!!!!!!!!!!!!!!!!!!!Nu mi-a func ionat!!!!!!!!!!!

Evenimente de tipul FocusEvent


O component are focus dac este pregtit s primeasc date sau comenzi de la tastatur. Un buton are focus dac apare ca selectat(con ine pe suprafa a lui un dreptunghi care marcheaz acest fapt). - o component primete focus dac se execut click pe suprafa a ei - pentru ca focus-ul s apar in componentei urmtoare se apas tasta Tab. - se poate programa ca o anumit component s primeasc focus-ul cu func ia: void requestFocus() apar ine clasei Component. - pentru a rspune la evenimente, se implementeaz interfa a FocusListener cu metodele: void focusGained(FocusEvent e) metoda se ruleaz atunci cnd o component primete focus-ul void focusLost(FocusEvent e) metoda se ruleaz atunci cnd o component pierde focus-ul Ambele metode con in un parametru de tip FocusEvent. Component getComponent() este o metod a clasei FocusEvent care returneaz o referin la componenta care a recep ionat evenimentul.
import java.awt.*; import javax.swing.*; import java.awt.event.*; class Fereastra extends JFrame implements FocusListener, ActionListener{ JTextField txt; public Fereastra(String titlu) { super(titlu); setSize(200, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); JButton A = new JButton("Buton 1"); x.add(A); A.setName("Buton 1"); A.addFocusListener(this); A.addActionListener(this); JButton B = new JButton("Buton 2"); x.add(B); B.addFocusListener(this); B.setName("Buton 2"); txt = new JTextField(10); txt.setName("Edit"); txt.addFocusListener(this); x.add(txt); setVisible(true); } public void focusGained(FocusEvent e) {System.out.println(e.getComponent().getName());} public void focusLost(FocusEvent e) {} public void actionPerformed(ActionEvent e) {System.out.println("blank sau click");} } public class Clasa{ public static void main(String[] args) { Fereastra fer = new Fereastra("Evenimente Focus"); }}

Focus cu validare Cnd un edit pierde focus-ul, n metoda focusLost() se scrie secven a de validare. Dac data introdus este incorect, se afieaz mesajul corespunztor is e redirec ioneaz focus-ul ctre edit. Astfel nu se poate prsi opera ioa de editare pn nu am introdus o valoare corect.
import java.awt.*; import javax.swing.*; import java.awt.event.*; class Fereastra extends JFrame implements FocusListener { JTextField txt; public Fereastra(String titlu) { super(titlu); setSize(200, 100); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); x.setLayout(new FlowLayout()); JButton A = new JButton("Apasa"); x.add(A); txt = new JTextField(10); txt.addFocusListener(this); x.add(txt); setVisible(true); } public void focusGained(FocusEvent e) {} public void focusLost(FocusEvent e) { String t = txt.getText(); try {double x = Double.parseDouble(txt.getText()); System.out.println(t);} catch(Exception ex) {System.out.println("Numar eronat"); txt.requestFocus();} } } public class Clasa { public static void main(String[] args) { Fereastra fer = new Fereastra("Evenimente Focus"); } }

//Nu putem prsi editarea textbox-ului pana nu am introdus un numrcorect.

Evenimente de selectare a itemilor:


Apar asupra componentelor de tipul JCheckBox i JComboBox. Se pot trata in mod direct, imediat ce selectarea a fost implementat. trebuie utilizat interfa a ItemListener care con ine o singur metod. void itemStateChanged(ItemEvent e) metod care se apeleaz de cte ori se produce o deselectare sau o selectare. Dac ntr-o list a fost ini ial o alt op iune, se deselecteaz acea op iune i apoi se selecteaz op iunea nou. Parametrul func iei este de tipul ItemEvent. int getStateChange() returneaz o valoare de tip int corespunztoare uneia din cele dou posibilit ide generare a evenimentului(deselectarea sau selectarea). Cele dou valori sunt SELECTED i DESELECTED(constante ale clasei ItemEvent). Componente care transmit astfel de evenimente con in metoda addItemListener(ItemListener e).
import java.awt.*; import javax.swing.*; import java.awt.event.*; class AsLista implements ItemListener{ JComboBox lista; AsLista(JComboBox lista) {this.lista = lista;} public void itemStateChanged(ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED) System.out.println(lista.getSelectedItem()); } } class Fereastra extends JFrame{ JComboBox lista; JSpinner s; public Fereastra(String titlu) { super(titlu); setSize(200, 200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container x = getContentPane(); lista = new JComboBox(); x.setLayout(new FlowLayout()); lista.addItem("Optiunea 1"); lista.addItem("Optiunea 2"); lista.addItem("Optiunea 3"); lista.addItem("Optiunea 4"); x.add(lista); AsLista as = new AsLista(lista); lista.addItemListener(as); setVisible(true); } } public class Clasa{ public static void main(String[] args) { Fereastra fer = new Fereastra("ItemListener"); } }

Evenimente pentru fereastr


Obiectele de tip JFrame pot transmite urmtoarele evenimente: WINDOWS_ACTIVATED se produce atunci cnd fereastra devine activ. Acest eveniment se poate ntmpla atunci cnd fereastra a fost afiat pentru prima dat, atunci cnd dup minimizarea ei revine la dimensiunea ini ial sau atunci cnd a fost activat o alt fereastr dup care s-a revenit la fereastra studiat. WINDOW_OPENED se produce atunci cnd este deschis fereastra. WINDOW_DEACTIVATED se priduce cnd fereastra devine inactiv. Evenimentul se poate ntmpla atunci cnd am activat o alt fereastr sau atunci cnd am minimizat-o. WINDOW_CLOSING se priduce atunci cnd se nchide fereastra WINDOW_ICONIFIED se produce atunci cnd am minimizat fereastra WINDOW_DEICONIFIED se produce atunci cnd se execut click pe fereastra minimizat WINDOW_CLOSED se produce dup ce fereastra a fost nchis Interfa a WindowListener con ine antetul unei metode care trebuie apelat. Lista de antete din WindowListener: public void windowOpened(WindowEvent e) public void windowClosing(WindowEvent e) public void windowClosed(WindowEvent e) public void windowIconified(WindowEvent e) public void windowDeiconified(WindowEvent e) public void windowActivated(WindowEvent e) public void windowDeactivated(WindowEvent e) Metoda void addWindowListener(WindowEvent e) din clasa JFrame are rolul de a asocia ferestrei asculttorul de evenimente. import javax.swing.*; import java.awt.event.*; class InchidF extends Evfer{ public void windowClosing(WindowEvent e) { System.out.println("WINDOW_CLOSING"); System.exit(0); } public void windowOpened(WindowEvent e) {System.out.println("WINDOW_OPENED");} public void windowActivated(WindowEvent e) {System.out.println("WINDOW_ACTIVATED");} public void windowDeactivated(WindowEvent e) {System.out.println("WINDOW_DEACTIVATED");} public void windowIconified(WindowEvent e) {System.out.println("WINDOW_ICONIFIED");} public void windowDeiconified(WindowEvent e) {System.out.println("WINDOW_DEICONIFIED");} } public class Clasa{ public static void main(String[] args) { JFrame fp = new JFrame("Fereastra care se inchide"); WindowListener t = new InchidF(); fp.addWindowListener(t); fp.setSize(200, 300); fp.setVisible(true); }}

APPLET-URI
Un applet este o fereastr java care se ataeaz unei pagini HTML asemntor unei imagini. Se va utiliza clasa JApplet. Pentru ca un calculator s reuleze un applet trebuie ca el s aib instalat maina java i browserul s o gseasc. Msurile de securitate impun ca: - appleturile s nu citeasc fiiere - appleturile nu au voie s apeleze programe aflate pe sistemul utilizatorului

Crearea i executarea appleturilor


ExApplet.java File | Edit | View | Help import java.awt.*; import javax.swing.*; import java.awt.event.*; public class ExApplet extends JApplet implements ActionListener{ public void init() { Container x = getContentPane(); x.setLayout(new FlowLayout()); JButton A = new JButton("ok"); A.addActionListener(this); x.add(A); } public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(this, "Ca la fereastra clasica"); } }

compilam si apoi introducem in pagina html

Arhive Java i atributele elementului Applet Cnd se utilizeaz mai multe clase i alte tipuri de fiiere, imagini ntr-o pagin web se creaz arhive care vor fi folosite de clasa care e ncrcat de pagina web. n Java, arhivele se creaz cu programul jar. jar cf nume_arhiva f1 f2 ... fn creeaz o arhiv din fiierele f1,.., fn. Dac avem dou fiiere .class rezultate n urma compilrii, ExApplet.class si Buton.class, formm o arhiv Arh.jar din cele dou astfel: jar cf Arh.jar ExApplet.class Buton.class i le importm ntr-un fiier HTML astfel: <html> <body> <applet code=``ExApplet.class`` archive=``Arh.jar`` width=300 height=300> </body> </html> Atributele tag-ului Applet: *code numele fiierului care con ine clasa ce extinde JApplet; * height, width nl imea i l imea dreptunghiului care afieaz appletul * archive numele fiierului care con ine resursele utilizate de applet(clase, fisiere de diverse tipuri: imagini, sunete...) * allign alinierea appletului n pagin(left la stnga, right la dreapta, top n partea de sus) * hspace, vspace spa iul, n pixeli, care trebuie pstrat ntre dreptunghiul care ncadreaz appletul i text sau alte componente aflate pe pagina Web. Redefinirea unor metode ale appletului: void init() este prima metod care se apeleaz atunci cnd definim un applet. Redefinit, ea poate con ine cod care dorim s se execute la nceput. Se execut o singur dat. void start() se apeleaz atunci cnd appletul devine activm, dar i n alte situa ii, de exemplu, atunci cnd a fost prsit pagina web i se revine asupra ei. void stop() se apeleaz atunci cnd se oprete appletul sau cnd a fost prsit pagina web care-l contine void paint(Graphics ecr) se apeleaz de cte ori este cazul. Prin ea se deseneaz componenta. Este apelat dup metodele init() i start() void update(Grpahics ecr) are corpul void i nu mai e nevoie de rescrierea ei pentru eliminarea plpirii. Opera ia de tergere a imaginii anterioare trebuie fcut de utilizator.

PaginaWeb.html File | Edit | View | Help <html> <body> <applet code = "ExApplet.class" width=300 height=300> </body> </html>

import java.awt.*; import javax.swing.*; public class ExApplet extends JApplet { public void init() {JOptionPane.showMessageDialog(this, ``Init``);} public void start() {JOptionPane.showMessageDialog(this, Start);} public void paint(Graphics g) {setBackground(Color.RED);} } Afiarea imaginilor. Clasa URL Pentru a afia o imagine, ea trebuie transferat pe site. Ca appletul s aib acces la imagine, el trebuie s con in un obiect URL. URL(String s) un s reprezint adresa url a imaginii.Deoarece imaginea s-ar putea s nu fie la adresa respectiv, crearea obiectului trebuie fcut cu try. Pentru a citi imaginea, se utilizeaz metoda de mai jos a clasei JApplet: Image getImage(URL adr) metoda returneaz imaginea Pentru a afia imaginea, se utilizeaz metoda drawImage() a clasei Graphics. Pentru a putea folosi appletul cu dimensiuni diferite se utilizeaz dou metode ale clasei JApplet: int getWidth() returneaz l imea dreptunghiului care con ine applet-ul int getHeight() returneaz nl imea dreptunghiului care con ine appletul import java.awt.*; import javax.swing.*; import java.net.*; public class ExApplet extends JApplet { Image im; int w, h; URL x; public void init() { try{x=new URL(``http://www..../imagine.jpg``);} catch(Exception e) {JOptionPane.showMessageDialog(this, ``Imagine?``);} im=getImage(x); w=getWidth(); h=getHeight(); } } public void paint(Graphics ecr) {ecr.drawImage(im, 0, 0, w, h, this);}

Redarea sunetelor
Un applet poate reda sunete. Fiierele audio pot fi de tipul .au, .aiff, .wav. Ini ial fiierul este transferat pe site. Pentru a lucra cu sunete se utilizeaz interfa a AudioClip care se gsete n java.applet i contine antetele: void play() red sunetele din fiier o singur dat void loot() red sunetele din fisier in mod continuu void stop() oprete redarea sunetelor din fiier. n cazul n care nu se utilizeaz acest metod, sunetele se redau i dup ce vizitatorul prsete pagina care con ine appletul. AudioClip getAudioClip(URL url) returneaz un obiect AudioClip(o implementarea interfe ei) import java.awt.*; import javax.swing.*; import java.net.*; import java.applet.*; public class Clasa extends JApplet { URL adr; AudioClip muzica; public void init() { try{adr=new URL(``..cale/fisaudio.au``);} catch(Exception e) {} muzica = getAudioClip(adr); } public void paint(Graphics ecr) {setBackground(Color.Red);} public void start() {muzica.loop();} public void stop() {muzica.stop();} }

Intrri de la consol:
cin.java File | Edit | View | Help import java.io.*; import java.util.*; class cin { static InputStreamReader f = new InputStreamReader(System.in); static BufferedReader tamp = new BufferedReader(f); static String linie() { try{return tamp.readLine();} catch(IOException e) {return("Eroare citire");} } static String Token() { StringTokenizer v = new StringTokenizer(linie()); if(v.hasMoreTokens()) return v.nextToken(); else return ""; } } salvm fisierul cu numele cin.java compilm introducem fisierul cin.java i cin.class n folderul bin al mediul de dezvoltare java: ...\ Java\jdk1.6.0_22\bin sau n folderul n care se afl clasa care apeleaz metodele clasei cin. folosim n programele noastre: Clasa.java File | Edit | View | Help public class Clasa { public static void main(String[] args) { String sir = cin.linie(); System.out.println(sir); } } -

Bibliografie: 1) Bazele programrii n JAVA, Ed. L&S Info-Mat, Tudor Sorin, Vlad Hu eanu 2) Atac la JAVA, Ed. Teora, Kathy Sierra, Bert Bates 3) Java, de la 0 la expert, Ed.Polirom, tefan Tanas, Cristian Olaru, tefan Andrei 4) http://java.com/en/download/index.jsp 5) http://www.oracle.com/technetwork/java/javase/downloads/inde x.html 6) http://www.oracle.com/technetwork/java/javase/downloads/inde x.html 7) http://jdk6.java.net/ 8) http://www.apl.jhu.edu/~hall/java/Documentation.html 9) http://download.oracle.com/javase/tutorial/java/TOC.html 10)

cin.linie() citete toat linia introdus de la consol cin.Token() citete primul cuvnt din linia introdus de la tastatur (pn ntlnete caracterul spa iu)

Вам также может понравиться