Sunteți pe pagina 1din 108

UNIVRSITATEA TITU MAIORESCU FACULTATEA DE INFORMATICA

PROIECTAREA INTERFEELOR GRAFICE

Mironela Prnu

- 2010 -

Tematica
Modulul I. JAVA. GENERALITATI Modulul II. GRAPHIC USER INTERFACE. COMPONENTELE PACHETULUI SWING Modulul III. UTILIZARE NETBEANS Modulul IV. LUCRU CA BAZE DE DATE IN JAVA Modulul V. APPLET-URI. Modulul VI. JAVA SERVER PAGES (JSP) Modulul VII. ALTE APLICATII Bibliografie Modele bilete examen 51 78 88 96 100 105 107 4 12

Nota final care se va acorda fiecrui student va conine urmtoarele componente n procentele menionate: - colocviu final 60% - lucrari practice/ proiect, etc. 30% (fiecare student, va realiza un PROJECT care va cuprinde minim 15 aplicatii practice, selectate din cele 7 module ale suportului de curs. Aplicatiile vor fi //comentate si personalizate. - teme de control 10% (la alegere, se va rezolva, un studiu de caz, de la cele 8 adrese web-enumerate mai jos. Explicarea modului de lucru, se va face intr-un document de forma nume_student.pdf)
1. 2. 3. 4. 5. 6. 7. 8. http://netbeans.org/kb/docs/java/quickstart-gui.html http://netbeans.org/kb/docs/java/gui-db.html http://netbeans.org/kb/docs/java/gui-db-custom.html http://netbeans.org/kb/docs/web/applets.html http://netbeans.org/kb/docs/web/security-webapps.html http://netbeans.org/kb/docs/web/mysql-webapp.html http://netbeans.org/kb/docs/web/jsf20-intro.html http://netbeans.org/kb/docs/web/jsf20-support.html

MODULUL I

JAVA. GENERALITI
Java este un mediu de programare ce ofer utilizatorului cadrul necesar i uneltele necesare pentru dezvoltarea aplicaiilor Java. Java este o tehnologie ce ofer suport dezvoltrii de aplicaii distribuite, independente de platform. Programele Java pot rula pe diferite tipuri de platforme, cu condiia ca pe aceste platforme s fie instalat o main virtual Java deasupra platformei respective. Avantajul limbajului Java, comparativ cu alte limbaje de programare este conexiunea strns cu tehnologia Internet. Tehnologia Java se concretizeaz ntr-un portofoliu de produse concepute pornind de la ideea c acelai software trebuie s ruleze pe sisteme i dispozitive diferite. Produsele sunt organizate dup urmtoarea structur: Nucleu/Aplicaii desktop J2SE ( Java 2 Platform Standard Edition ) Suport enterprise/Server J2EE ( Java 2 Platform Enterprise Edition ) Suport pentru dispozitive mobile J2ME ( Java 2 Platform Micro Edition ) Suport pentru Servicii WEB si suport XML Alte tehnologii Nucleu/Aplicaii desktop J2SE ( Java 2 Standard Edition ) J2SE pune la dispoziia programatorilor un mediu complet pentru dezvoltarea aplicaiilor desktop i constituie baza pentru J2EE. Nucleul Conine limbajul Java, i mediul de execuie pentru aplicaii. Utilizat mpreun cu componentele desktop furnizeaz suport pentru toat gama de aplicaii i applet-uri independente de paltform; Aplicaii desktop Cuprind biblioteci de clase pentru crearea componentelor reutilizabile, precum i a aplicaiilor cu interfa grafic; Suport enterprise/Server J2EE ( Java 2 Platform Enterprise Edition ) Definete standarde pentru dezvoltarea aplicaiilor bazate pe componente, n cadrul unei arhitecturi multinivel. Suport pentru dispozitive mobile J2ME ( Java 2 Platform Micro Edition ) Pune la dispoziie un mediu de aplicaie ce se adreseaz necesitilor specifice domeniului telefoniei mobile, i altor dispozitive mobile. Include maini virtuale i un set de 4

interfee de programare a aplicaiilor definite n cadrul comunitii Java, precum i de experi ai fabricanilor renumii de dispozitive. Suport pentru Servicii WEB Serviciile WEB reprezint aplicaii orientate WEB care folosesc standardele deshise XML i protocoale de transport pentru schimbul de informaii cu aplicaii client sau alte servicii WEB. Suportul se concretizeaz n interfee de programare a aplicaiilor i instrumente pentru dezvoltarea de servicii WEB interoperabile i aplicaii client. Interschimbul de date se realizeaz datorit faptului c acestea sunt reprezentate n standardul XML. Suport XML - Extensible Markup Language (XML), reprezint un standard deschis, interoperabil i bazat pe text pentru reprezentarea datelor. De asemenea constituie un element esenial n dezvoltarea de servicii WEB, dup cum s-a artat mai sus.

Descrierea tehnologiilor Java


Java Foundation Classes (JFC) Reprezint un ansamblu de biblioteci de clase distribuite ca parte integrant din platforma Java 2, ediia standard (J2SE), ce ofer suport pentru construirea de interfee grafice utilizator, pentru aplicaii client ce ruleaz pe platformele Microsoft Windows, Linux i MacOS. JavaBeans Aceast tehnologie specific arhitectura componentelor J2SE. Componentele reprezint programe reutilizabile, ce se dezvolt i asambleaz cu uurin pentru a crea produse complexe. JDBC ( Java Database Conectivity ) Se constituie ntr-o interfa de programare a aplicaiilor cu baze de date relaionale, pentru o mare varietate de furnizori. Ofer suport i pentru prelucrarea surselor de date tabulare, ca de exemplu foi de calcul, i fiierelor text. Accesul la bazele de date se realizeaz prin drivere specifice fiecrui furnizor. Java RMI Java Remote Method Invocation ) Permite programatorilor dezvoltarea de aplicaii distribuite n cadrul crora metodele obiectelor aflate la distan pot fi invocate de pe alte maini virtuale. Pentru transfer se folosete mecanismul de serializare. JAI ( Java Advanced Imaging ) 5

Ofer un set de interfee bazate pe un model de programare avansat pentru manipularea facil a imaginilor. JAAS ( Java Authentication And Authorization Service ) Set de interfee de programare a aplicaiilor care permit impunerea autorizrii utilizatorilor i controlul accesului acestora. Implementeaz varianta Java a cadrului standard PAM ( Pluggable Authentication Module) i suport autentificare bazat pe user. JCA ( Java Communications API ) Se utilizeaz n cadrul aplicaiilor cu suport de comunicaie independent de platform prin fax, voice-mail i smart-cards. JCE ( Java Cryptography Extension ) Se constituie ntr-un set de pachete ce ofer un cadru pentru implementarea criptrii, generrii de chei i a algoritmilor de autentificare a mesajelor. Sunt implementate cifruri sincrone, asincrone, la nivel de bloc i la nivel de flux. De asemenea se ofer suport pentru obiecte sigilate i fluxuri securizate. JMX ( Java Management Extensions ) Cuprinde un set de instrumente pentru dezvoltarea de soluii distribuite, dinamice i modulare pentru gestiunea i monitorizarea dispozitivelor, aplicaiilor i reelelor orientate pe servicii. JMF ( Java Media Framework ) Permite exploatarea de ctre aplicaii a resurselor multimedia, ntr-o manier specific tehnologiei Java. Ofer faciliti pentru captur, redare, codificare i decodificare n i din multiple formate. JNDI ( Java Naming And Directory Interface ) nzestreaz aplicaiile bazate pe tehnologia Java cu o interfa unificat pentru multiple servicii de nume i directoare. JSSE ( Java Secure Socket Extension ) Pachet ce gestioneaz securitatea comunicaiilor pe Internet. Reprezint versiunea Java pentru protocoalele SSL ( Secure Sockets Layer ) i TLS ( Transport Layer Security ). nglobeaz funcionalitate pentru criptarea datelor, autentificare la nivel de server, integritatea mesajelor i opional autentificare la nivel client. JAXP( Java API for XML Processing ) Permite aplicaiilor citirea i transformarea documentelor XML independent de o anumit implementare de procesare. JAXR ( Java API for XML Registries ) 6

Ofer o modalitate uniform de folosire a nregistrrilor bazate pe standarde deschise( ca de exemplu ebXML ) sau a specificaiilor de cosoriu ( UDDI ). Java Mail Pune la dispoziie un cadru independent de platform i protocol pentru dezvoltarea aplicaiilor pentru trimiterea de mesaje prin pot electronic. JMS ( Java Message Service ) - reprezint un standard de mesaje ce permite componentelor de aplicaie J2EE s creeze, s trimit, s primeasc i s citeasc mesaje. Permite comunicarea n mediu distribuit prin cuplare slab i n mod asincron. Java Servlet Implementeaz un mecanism simplu i consistent pentru extinderea funcionalitii unui server WEB, pentru accesarea sistemelor de afaceri existente. Este de fapt o aplicaie ce se execut pe server la cererea unui client, cu un scop bine precizat. JSP ( Java Server Pages ) - tehnologie reprezint varianta Java pentru gestionarea paginilor WEB cu coninut dinamic. Permite dezvoltarea rapid a aplicaiilor independente de server i platform. J2EE Connector - tehnologie Java pentru problema interconectrii ntre variate servere de aplicaii i sistemele informatice de ntreprindere EIS Enterprise Information Systems. SAAJ ( SOAP with Attachments API for Java ) Pune la dispoziie un standard de trimitere a documentelor XML prin Internet. J2EE Transactions Simplific programarea aplicaiilor pentru gestiunea tranzaciilor distribuite. Suportul pentru tranzaciile distribuite este implementat prin dou specificaii JTA ( Java Transaction API ) i JTS ( Java Transaction Service ). JMI ( Java Metadata Intarface ) Aceast specificaie permite implementarea unei infrastructuri dinamice i independente de platform pentru gestiunea crerii, stocrii, accesrii, descoperirii i schimbului de metadate. Se bazeaz pe specificaia MOF ( Meta Object Facility ) definit de OMG ( Object Management Group ), un standard industrial aprobat pentru gestiunea metadatelor. Standardul MOF const ntr-un set de artefacte de modelare de baz, descrise prin UML. Modelele pentru metadate ( metamodele ) pot fi construite din aceste blocuri de baz. JMI definete i interfeele Java standard pentru pentru aceste componente de modelare, facilitnd astfel descoperirea i accesarea metadatelor ntr-o manier independent de platform. Descoperirea, interogarea sau accesarea

metadatelor se realizeaz att la momentul proiectrii ct i la momentul execuiei. Semantica oricrui sistem modelat poate fi complet descoperit i manipulat.

Caracteristici ale limbajului Java Caracteristicile limbajului Java care l-au fcut i-l fac un limbaj de succes pe piaa actual de software sunt prezentate in continuare: Simplitate Limbajul Java prezint concepte fundamentale care sunt deosebit de simple. Programarea Java se poate nva n cteva sptmni. Prile redundante din alte limbaje au fost ndeprtate i s-au pstrat doar prile strict necesare. Tot n vederea simplitii, tehnologia Java conine aa numitul Garbage Colector, care face ca programatorul s nu mai aib grija dezalocrii zonelor de memorie anterior alocate. Pentru cunosctorii limbajului C++ acest lucru nseamn c nu mai e nevoie de delete dup new. Orientat pe obiecte Limbajul Java , spre deosebire de C/C++, este n ntregime orientat pe obiecte. Nu exist o aplicaie n care s nu existe cel puin un obiect, o clas. n Java, orice, cu excepia ctorva tipuri de date fundamentale, este un obiect. Tehnologia programrii orientate pe obiecte (OOP Object Oriented Programming) este singura care satisface cerinele actuale ale dezvoltrii software. Robust Se mrete gradul de siguran al codului. Sunt dou nivele de verificare pentru mrirea gradului de siguran: unul la compilare (prezent n marea majoritate a limbajelor) i unul n timpul rularii. Ca urmare un program este mai puin supus erorilor. Securitatea ntr-o lume n care calculatoarele nu mai pot exista ca eniti solitare, fr a fi conectate n reea, problema securitii este una din cele mai stringente. Problema care se pune este aceea a existenei unui nivel de securitate n cadrul limbajului.Unul din principalele avantaje ale limbajului Java care l-au fcut att de popular este gradul de securitate. Programele Java sunt fcute s ruleze n sisteme distribuite, i calculatoarele pe care ele lucreaz nu pot fi sigure de proveniena programelor. Dinamic Java este un limbaj dinamic prin faptul c multe decizii privind evoluia programului se iau n momentul rulrii, la runtime. Datorit faptului c multe din aplicaiile Java sunt preluate de pe Internet sub forma de applet-uri chiar n momentul execuiei lor, deci din reea, aceste programe pot fi actualizate s fac fa noilor cerine, utilizatorul dispunnd n orice moment de cea mai nou variant. Independent de platform Unul din marile avantaje ale limbajului Java este independena de platform. Se impunea aceast independen de platform, innd cont de ideea de lucru n medii distribuite. De fapt un program Java lucreaz pe o singur main: maina virtual Java ( Java Virtual Machine- JVM ). Ca urmare a utilizrii emulatorului un program Java poate rula pe orice platform pentru care exist un emulator Java. Partea negativ este c folosirea emulatorului duce la marirea timpului de execuie. Soluia este compilarea just-in-time (JIT) care transform ntregul program Java n program main nainte de execuia lui.

Compilatoarele just-in-time lucreaz ca i interpretoarele doar c conversia nu se face la nivel de instruciune ci la nivel de program, crescnd considerabil viteza de execuie a programului Java. Suport pentru multithreading Multithreading-ul este cel care permite ca un program s execute mai multe sacini aparent n acelai timp, utiliznd mai multe fire de execuie (thread-uri). Java ofer suport multithreading la nivel de limbaj deci la cel mai jos nivel (clasa Thread) oferindu-i utilizatorului posibilitatea de a crea un nou fir de execuie ca i cum ar creea oricare alt obiect. Mai mult, Java permite comunicarea ntre firele de execuie precum i sincronizara lor. Interconexiunea cu browsere WWW Acesta este unul din avantajele care a facut limbajul Java aa de popular. Multe din firmele care dezvolt browsere WWW au implementat maina virtual Java n interiorul acestor browsere. Amintim cele mai utilizate browsere care suport Java: Netscape Navigator al firmei Netscape i Internet Explorer al firmei Microsoft. Avnd n vedere aceste caracteristici, Java s-a conturat ca un limbaj performant, care s-a impus n lumea informaticii.

Pachetul JDK La baza dezvoltrii unui program Java st mediul de dezvoltare pus la dispoziie de firma Sun. Acesta este Java Developers Kit (JDK-ul) i trebuie considerat ca mediu de referin n programarea Java. Mediul JDK conine pe de o parte o serie de biblioteci de clase Java necesare scrierii unui program i pe de o parte un set de utilitare necesare compilrii, testrii, execuiei i documentrii unei aplicaii Java. O clas, un fiier bytecode cu extensia .class, reprezint unitatea fundamental a unui program executabil Java. O bibliotec de clase cuprinde o serie de clase ce au un numitor comun. O astfel de bibliotec este cunoscut n java sub numele de package. JDK-ul conine cteva package-uri fundamentale, package-uri care conin clase fr de care nu se pot dezvolta aplicaii Java. Package-urile Java incluse n JDK formeaz principalul API- Application Programming Interface. Orice alt mediu care poate executa aplicaii Java diferit de mediul JDK trebuie s includ acest API. Pe lng aceste pachete fundamentale, utilizatorul poate folosi i altele dezvoltate chiar de el. Trebuie ns s se asigure c aceste pachete adiionale sunt disponibile i pe platforma pe care aplicaia se execut, nu numai unde aceasta a fost creat.

Cuvntul cheie import este folosit pentru a face cunoscut utilizarea unei clase dintru-un package sau a unui ntreg package.
9

Exemplu: import java.sql.*; import java.awt.Graphics; import java.applet.*; Un package este o colecie de clase i interfee Java ntre care exist o relaie de asociere. Prin utilizarea conceptului de package, Java ofer un mecanism de mamagement al identifiactorilor (numelor) care se pot atribui claselor (name spaces). Printr-un package Java se pot rezolva eventualele conflicte ce pot aprea datorit existenei a dou clase cu acelai nume. Astfel dac avem clasa Rectangle din package-ul java.awt , putem avea aceeai clas Rectangle din pachetul myPackage. Dac n program dorim s utilizm clasa Rectangle din java.awt atunci se specific aceasta prin import java.awt

Principalele package-uri din Java API


package java.applet Pachetul conine clasele necesare dezvoltrii unui applet (program Java ce se execut n cadrul unui browser WWW) package java.awt., java.awt.event, package javax.swing; Pachete ce se folosesc n dezvoltarea interfeelor grafice de comunicare cu utilizatorul i dezvoltarea aplicaiilor ce implic grafic package java.beans Conine clase necesare implementrii tehnologiei Java Beans, o tehnologie orientat pe crearea unor componente ce pot fi reutilizate. package java.io Pachetul include clasele necesare lucrului cu stream-uri package java.lang Conine clasele fundamentale fr de care un program Java nu poate exista. package java.math Este utilizat pentru lucrul cu funcii matematice package java.net Pachetul conine clasele necesare programrii n reea package java.rmi Pachet utilizat pentru creearea unor aplicaii Java ce lucreaz n sisteme distribuite (RMI Remote Method Invocation). Uureaz apelul unor metode din obiecte disponibile pe diferite computere ce sunt conectate n reea. package java.security Pachet ce privete asigurarea unui mecanism de securitate al sistemului software dezvoltat.
10

package java.sql Pachetul se folosete n vederea lucrului cu bazele de date. package java.text Pachetul este utilizat pentru lucrul cu texte. package java.util Ofer suport pentru lucrul cu liste, vectori, dicionare, informaii legate de dat i timp. Pe lng Java API pachetul JDK pune la dispoziia programatorului o serie de unelte necesare dezvoltrii, testrii, analizei i documentrii programelor Java. Dintre acestea amintim: javac- Java Language Compiler Acesta este compilatorul java care realizeaz transformarea surselor text scrise n limbaj de programare Java n codul executabil pe maina virtual Java ( JVM ), n bytecodes, in clase java (fiiere cu extensia .class). Fiierul surs (text limbaj Java) cu extensia .java se transmite ca i paramentru n programul javac. javac HelloJava.java

java Java Interpreter Acesta este interpetorul Java care execut programele Java (bytecodes, fiiere class) . Prin lansarea n execuie a acestui utilitar se pornete de fapt JVM. Programul emuleaz JVM convertind instruciunile JVM n instruciuni ale mainii reale. Este util n execuia aplicaiilor Java standalone nu i a applet-urilor. Are ca paramentru numele fiierului rezultat n urma compilrii. java HelloJava jre Java Runtime Interpreter Este similar cu interpretorul java dar este o variant mai simplificat jre HelloJava jdb Java Language Debugger Este unealta utilizat pentru depanarea programelor Java javah Java Header Este utilizat pentru a permite programelor scrise n limbajul Java s comunice cu programele scrise n limbajul C. Cu javah se creeaz fiiere header C i fiiere stub C necesare pentru a reliza aceast conexiune. javadoc Java Document

11

Cu acest instrument se genereaz documenia programelor Java n format html. Documentarea se face pe baza comentariilor din program. Programul javadoc se aplic asupra fiierelor surs .java javadoc HelloJava.java appletviewer Utilitarul este utilizat pentru testarea appleturilor. Programul lanseaz n execuie o main virtual Java. Este un browser minimal de WWW care suport toate caracteristicile Java ale mediului jdk din care provine.

MODULU II GRAPHIC USER INTERFACE. COMPONENTELE PACHETULUI SWING


n proiectarea interfeelor cu utilizatorul exist numeroase abordri, clasificate dup diferite criterii. n funcie de aspectul principal luat n considerare n dezvoltarea interfeei exist dou direcii de proiectare foarte utilizate: proiectarea centrat pe sarcini i proiectarea centrat pe utilizator. A. Proiectarea centrat pe sarcini (task centred interface design) e structurat n jurul unui set de sarcini specifice pe care utilizatorul trebuie s le ndeplineasc cu sistemul respectiv. Aceste sarcini sunt selectate nc de la nceputul etapei de proiectare i apoi sunt folosite pentru stabilirea diferitelor detalii legate de proiectare, pentru a ajuta n luarea deciziilor de proiectare precum i pentru evaluarea proiectrii pe msura dezvoltrii ei. B. Proiectarea centrat pe utilizator (user-centred interface design) se bazeaz pe nelegerea domeniului de munc a utilizatorilor finali vizai i a modului n care acetia interacioneaz cu calculatorul i urmrete s faciliteze aciunile oamenilor. Compararea celor doua metode de proiectare: Proiectarea centrat pe sarcini Software-ul este proiectat conform scopurilor productorului, nu ale utilizatorului; Atenia este direcionat spre tehnologie i uurina implementrii, 12 Proiectarea centrat pe utilizator Software-ul trebuie s mulumeasc, s menajeze, s ajute utilizatorul, proiectarea bazndu-se pe abilitile i nevoile reale ale utilizatorului, pe context, funcii, sarcini;

nu spre eficiena utilizatorului (ergonomia aciunilor lui); Software-ul este focalizat pe caracteristici (feature-centric software), unele niciodat utilizate; Software-ul devine mamut, incontrolabil

Proiectarea se realizeaz avnd n vedere cerinele utilizatorului, nu cele ale productorului; Nu trebuie s se utilizeze un limbaj obscur, neneles de utilizator; Software-ul abuzeaz de elementele grafice ale interfeei (meniuri, ferestre, icon-uri, etc.)

Moduri de comunicare om - calculator prin intermediul interfetelor


Modurile de comunicare pot fi clasice, prin intermediul dispozitivelor tradiionale precum tastatura, monitorul, mouse-ul, boxele audio, joystick-ul, etc. O alt modalitate este prin limbaj natural prin recunoaterea textului, vocii i a gesturilor. Un mod mai rapid de comunicare ntre utilizator i computerul su i-a fcut simit prezena o dat cu apariia meniurilor. Meniurile pot avea diverse forme, dimensiuni i stiluri. Primul tip de interfa care utilizeaz meniul avea la baz o aplicaie al crei rezultat era un meniul ale crui opiuni ocupau ntregul ecran. A aprut nevoia prezentrii ntr-un mod mai estetic i practic a opiunilor i astfel s-a ajuns la o anumit grafic. Interfaa pe baz de bar de meniuri sau bar de aciune dispus n partea superioar a ecranului sau a ferestrei cuprinde un set de aciuni principale ce direcioneaz utilizatorul ctre alte poteniale opiuni din submeniuri cu deschidere n jos, n lateral sau mixt, n cascad. O caracteristic a acestor meniuri este dinamicitatea; se pot prezenta ntr-un mod diferit (tipul fontului, culoarea) anumite aciuni care nu sunt momentan disponibile. Cel mai recent stil l constituie meniurile pop-up sau meniurile de context, deoarece coninutul depinde de contextul sarcinii pe care o are de ndeplinit utilizatorul. Aceste meniuri conin un set de aciuni frecvente care sunt disponibile i din bara de meniu. Meniurile reprezint un mod practic de a transforma viziunea designer-ului sistemului ntr-o sum de elemente pe care utilizatorul le poate vedea, nelege i folosi. Meniurile furnizeaz o reprezentare vizual a structurii sistemului sau a aplicaiei i opiunile pe care le are utilizatorul n fiecare moment. Interfeele viitoare au potenialul de a furniza utilizatorului un spaiu virtual care s-i permit un mod de comunicare mai flexibil, mai natural cu mediul computaional sau cu ali utilizatori, furniznd intrri i primind rspunsuri, folosind echilibrat toate simurile 13

disponibile i canalele de comunicare, n timp ce resursele umane i cele ale sistemului sunt optimizate. Un design bun al interfeei presupune o ncrcare ct mai redus a memoriei utilizatorului. Fa de interfeele iniiale (DOS), interfeele grafice au avantajul de a furniza informaii i indicaii ntr-un mod grafic, prin elemente care au semnificaie pentru utilizator i care completeaz astfel limitrile memoriei umane. Unul dintre principalele elemente ale interfeelor grafice l constituie meniurile, a cror utilizare poate fi criteriul de baz n acceptarea sau respingerea unei interfee. Prezentarea dinamic a opiunilor potrivite pentru o anumit aciune i sublinierea celor disponibile permit utilizatorilor explorarea interfeei respective i astfel identificarea relaiilor dintre obiecte i aciuni, care constituie un prim pas n procesul de nvare. O alt caracteristic a interfeelor grafice este aceea c furnizeaz un feedback vizual pentru a completa lipsurile caracteristice memoriei umane de exemplu, dac indicatorul mouse-ului se gsete pe o opiune din bara de meniu, apare o zon de informare de tip text, care descrie aciunea ce va rezulta n urma alegerii acelei opiuni. Acest tip de informare este de ajutor pentru acomodarea cu o interfa i elimin necesitatea memorrii de ctre utilizator a unor informaii n plus. Interaciunea utilizatorului cu interfaa grafic Tehnicile de interaciune specifice interfeelor grafice presupun att utilizarea tastaturii, ct i a instrumentelor de indicare (a poziiei pe ecran) pentru a putea manipula informaiile prezentate n interfa. O alt caracteristic important a interfeelor grafice este aceea c permite realizarea de link-uri. Se pot realiza astfel documente compuse din alte documente, trecerea dintr-unul n altul fiind uor de realizat i foarte rapid. Se poate vorbi i despre semantica interfeelor grafice: fiecare buton de control, icon, animaiile i sunetele trebuie s aib o semnificaie pentru utilizator, pentru ca acesta s i ating scopul. Folosirea corect a elementelor de mai sus trebuie s aib ca rspuns din partea utilizatorilor anumite corelaii ntre elementele grafice din interfa i aciuni reale i, n plus, elementele prezentate ntr-un mod similar trebuie s aib un efect similar pentru ca adaptarea utilizatorului la modul de lucru s se fac cu eficien maxim.

Aplicatiile de sine statatoare se impart, dupa tipul interfetei cu utilizatorul in: a. Aplicatii de consola. Gen de interfata orientata pe caracter precum interfata sistemului de operare dos, sau interfata la livel de consola din UNIX.
14

b. Aplicatii grafice (interfata grafica de tip fereastra). Aceste interfete folosesc GUI (Graphic User Interface).
Interfaa grafic cu utilizatorul (GUI), se refer la toate tipurile de comunicare vizual ntre un program i utilizatorii si. Aceasta este o particularizare a interfeei cu utilizatorul (UI), prin care vom nelege conceptul generic de interaciune ntre un program i utilizatorii si. TEHNOLOGIA JFC (SWING)
Tehnologia JFC (Java Foundation Classes) grupeaz un asamblu de faciliti pentru construirea de interfee grafice i interactivitate n cadrul aplicaiilor Java. Prima versiune a bibliotecilor de clase a fost lansat n cadrul conferinei JavaOne, n anul 1997. Caracteristicile tehnologiei JFC Caracteristic Componente GUI Swing Suport pentru aspect Descriere Componente GUI: Ferestre, dialoguri, meniuri, butoane, liste etc. Componentele grafice pot avea acelai aspect, independent de platform, sau aspecte corespunztoare anumitor platfome Inputul de la utilizator poate fi obinut prin cititoare de ecran i monitoare Braille. Permite ncorporarea elementelor de grafic 2D, text, imagine n Grafic 2D aplicaii i applet-uri. De asemenea, include suport performant pentru imprimare. Suport Drag-and-Drop Extinde aceast facilitate, realiznd comunicarea ntre aplicaiile Java i cele native. Permite dezvoltarea aplicaiilor ce prelucreaz text ce conine caractere corespunztoare diferitelor limbi.

Suport pentru accesibilitate

Internaionalizare

"Swing" reprezint numele de cod al proiectului care a dezvoltat noile componente. Neoficial, este frecvent folosit pentru a desemna JFC.

Biblioteca de clase care ofer servicii grafice se numete java.awt, AWT fiind prescurtarea de la Abstract Window Toolkit i este pachetul care care a suferit cele mai multe modificri n trecerea de la o versiune JDK la alta.

Structura de clase din Swing este asemntoare cu cea din AWT, n sensul c toate componentele interfeei grafice sunt derivate dintrun singur printe numit JComponent (care este derivat din clasa AWT Container).
15

Pachetul de clase Swing reprezint soluia furnizat de Sun pentru crearea unor interfee utilizator grafice complet portabile pe orice platform. n Swing, toate numele claselor ncep cu litera J, i atunci cnd este posibil, numele este acelai cu cel al clasei AWT pe care o nlocuiete. n principiu, crearea unei aplicaii grafice presupune urmtoarele lucruri: - crearea unei suprafete de afiare (jFrame)cum ar fi o fereastr) pe care vor fi aezate obiectele grafice care servesc la comunicarea cu utilizatorul (butoane, controale de editare, texte, etc); - crearea i aezarea obiectelor grafice pe suprafata de afiare (la coordonatele x,y .....); - definirea unor aciuni care trebuie s se execute n momentul cnd utilizatorul interacioneaz cu obiectele grafice ale aplicatiei; - "ascultarea" evenimentelor generate de obiecte, n momentul interaciunii cu utilizatorul i executarea aciunilor corespunztoare aa cum au fost ele definite. Majoritatea obiectelor grafice sunt subclase ale clasei Component, clasa care definete generic o component grafic i care poate interaciona cu utilizatorul. Singura excepie o constituie meniurile care descind din clasa MenuComponent. Print-o component grafic se nelege orice obiect care are o reprezentare grafic ce poate fi afiat pe ecran i care poate interaciona cu utilizatorul. Exemple de componente grafice sunt ferestrele, butoanele, bare de defilare etc. In general, toate componentele sunt definte de clase proprii ce se gsesc n pachetul java.awt, clasa Component fiind superclasa abstract a tuturor acestor clase. Crearea obiectelor grafice nu realizeaz automat i afiarea lor pe ecran. Mai nti ele trebuie aezate pe o suprafa de afiare, care poate fi o fereastr sau suprafaa unui applet, i vor deveni vizibile n momentul n care suprafaa pe care sunt afiate va fi vizibil. O astfel de suprafa pe care se aseaz obiectele grafice reprezint o instan a unei clase obinut prin extensia clasei Container; din acest motiv suprafeele de afiare vor mai fi numite i containere. Clasa Container este o subclas aparte a clasei Component, fiind la rndul ei superclasa tuturor suprafeelor de afiare Java (ferestre, applet-uri, etc).
16

Interfaa grafic servete interaciunii cu utilizatorul. De cele mai multe ori programul trebuie s fac o anumit prelucrare n momentul n care utilizatorul a efectuat o aciune i, prin urmare, obiectele grafice trebuie s genereze evenimente n funcie de aciunea pe care au suferit-o (actiune transmis de la tastatur, mouse, etc.). Un eveniment este produs de o aciune a utilizatorului asupra unui obiect grafic, deci evenimentele nu trebuiesc generate de programator, dar intr-un program trebuie specificat codul care se execut la aparitia unui eveniment. Interceptarea evenimentelor se realizeaz prin intermediul unor clase de tip listener (ascultator, consumator de evenimente), clase care sunt definite n pachetul java.awt.event. In Java, orice component poate "consuma" evenimentele generate de o alt componenta grafic.

Componentele Swing
Principalele componentele Swing definite in pachetul javax.swing.*;
Componentele Swing sunt derivate dintr-o singur clas de baz, numit JComponent, care motenete la rndul ei clasa Container din AWT. Putem schita corespondenta intre clasele AWT si Swing ca in figura 1

17

Figura 1

Pe langa pachetul standard AWT, pachetul Swing adauga noi clase care permit imbunatatirea interfetei realizate. In figura 2, sunt prezentate clasele noi introduse de catre SWING:

18

Figura 2

Componentele prezentate, folosite pentru crearea interfeelor grafice Swing pot fi grupate astfel: Componente atomice JLabel, JButton, JCheckBox, JRadioButton, JToggleButton, JScrollBar, JSlider, JProgressBar, JSeparator Componente complexe JTable, JTree, JComboBox, JSpinner, JList, JFileChooser, ColorChooser, JOptionPane Componente pentru editare de text JTextField, JFormattedTextField, JPasswordField, JTextArea, JEditorPane, JTextPane 19

Meniuri JMenuBar, JMenu, JPopupMenu, JMenuItem, JCheckboxMenuItem, JRadioButtonMenuItem Containere - reprezint suprafee de afiare pe care pot fi plasate alte componente, eventual chiar alte containere. Superclasa componentelor de acest tip este Container, din modelul AWT. Containere intermediare - reprezint suprafee de afiare cu ajutorul crora pot fi organizate mai eficient componentele aplicaiei, putnd fi imbricate. Acestea sunt: JPanel, JScrollPane, JTabbedPane, JSplitPane, JLayeredPane, JDesktopPane, JRootPane

Jpanel este cel mai simplu container, avand aceeai funcionalitate ca i clasa Panel din AWT, fiind folosit pentru gruparea mai multor componente Swing i plasarea lor mpreun pe o alt suprafa de afiare. Gestionarul de poziionare implicit este FlowLayout, acesta putnd fi schimbat ns, chiar n momentul construirii obiectului JPanel, sau ulterior cu metoda setLayout. Adugarea de componente se realizeaz ca pentru orice container, folosind metoda add( ). JScrollPane este o clas foarte important n arhitectura modelului Swing, deoarece ofer suport pentru derularea pe orizontal i vertical a componentelor a cror reprezentare complet nu ncape n suprafaa asociat, nici o component Swing neoferind suport intrinsec pentru aceast operaie. Clasa JComponent este superclasa tuturor componentelor Swing, mai puin a celor care descriu containere de nivel nalt JFrame, JDialog, JApplet. Deoarece JComponent extinde clasa Container, deci i Component, ea motenete funcionalitatea general a containerelor i componentelor AWT, furniznd bineneles i o serie ntreag de noi faciliti. Containere de nivel nalt Un container top-level este un container care nu este inclus n nici un alt container. Din acestea fac parte: JFrame, JDialog, JWindow, JInternalFrame, JApplet Pentru a fi afiate pe ecran componentele grafice ale unei aplicaii trebuie plasate pe o suprafa de afiare (container). Fiecare component poate fi coninut doar ntr-un singur container, adugarea ei pe o suprafa nou de afiare determinnd eliminarea ei de pe vechiul container pe care fusese plasat. Deoarece containerele pot fi ncapsulate n alte containere, o component va face parte la un moment dat dintr-o ierarhie. Rdcina acestei ierarhii trebuie s fie un aa numit container de nivel nalt, care este reprezentat de una din clasele JFrame, JDialog sau JApplet. n general orice aplicaie Java independent bazat pe Swing conine cel puin un container de nivel nalt reprezentat de fereastra principal a programului, instan a clasei Jframe si una sau mai multe ferestre aditionale. Clasele care gestioneaza ferestrele in Swing sunt: Clasa Jframe care permite crearea ferestrei aplicatiei, care contine bara de titlu, marginea, butoanele system: minimizare, maximizare si inchidere. 20

Clasa JWindow care permite crearea unei ferestre simple, fara bara de titlu, meniu sau butoane sistem. Clasa JDialog care permite crearea ferestrelor de dialog. Ferestrele de dialog pot fi modale sau nu. Ferestrele modale blocheaza focus-ul altor ferestre pana la inchiderea dialogului curent. Pentru a crea ferestre de afisare a unor mesaje se poate utiliza direct o functie statica, fara a mai crea explicit un obiect tip dialog: JOptionPane.showMessageDialog(frame, "Student la Informatica."); Pentru ferestre de dialog standard exista clase specializate: JFileChooser si JColorChooser. Acestea pot fi utilizate pentru a selecta un fisier sau a alege o culoare. Exemplu de cod pentru crearea unei ferestre principale:
public static void main(String args[]) { JFrame win = new JFrame("Student la Informatica"); win.setSize(200, 200); win.show(); }

Pentru a accesa continutul unei ferestre se va folosi functia getContentPanel(): Container c = win.getContentPane() Pentru a obtine inchiderea automata a aplicatiei atunci cand se apasa butonul de Close, se va utiliza metoda: setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

APLICAIE import javax.swing.*; import java.awt.*; class Aplic { public static void main(String args[]) { JFrame win = new JFrame("Aplicatia mea"); win.getContentPane().add( new JLabel("Utilizare swing!")); win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); win.pack(); win.show(); } }

Elemente de control (widgets)


Butoane
21

Butoanele sunt elemente de control care, prin apasare, pot genera o actiune. Butoanele deriva din clasa JButton. In costructor primesc textul afisat pe buton. Prin metoda setMnemonic se pot asocia taste de apelare rapida (shortcut). Pentru a adauga un cuvant de comanda asociat butonului (cuvant ce va fi testat pentru efectuarea actiunii asociate) se foloseste metoda addActionCommand(). Exemplu de definire a unui buton JButton buton = new JButton("BUTON SWING!"); buton.setMnemonic('i'); buton.addActionCommand("butonulSwing"); // adaugarea unui buton pe o suprafata JPanel panouButon = new JPanel(); panouButon.add(buton); CheckBox Butoanele de marcaj sunt elemente de control care retin o anumita stare. In plus fata de butoanele simple, pentru ele se pot apela metodele setSelected (boolen marcat) pentru a stabili marcajul prin program, respectiv getSelected() pentru a testa starea marcajului. cb1 = new JCheckBox(Optiune1"); cb1.setSelected(true); JPanel checkPanel = new JPanel(); checkPanel.setLayout(new GridLayout(0, 1)); //GridLayout Aeaz componentele ntr-un grid bidimensional. checkPanel.add(cb1); RadioButton Butoanele radio sunt elemente de control care retin o anumita stare, la fel cu cele de marcaj. Deosebirea principala consta in faptul ca toate butoanele radio incluse in acelasi grup logic sunt mutual exclusive. Pentru gestionarea grupurilor de butoane radio se va folosi clasa ButtonGroup, respectiv metoda add() care adauga un buton la grup. Si pentru butoanele radio se pot apela metodele setSelected(boolen marcat) pentru a stabili marcajul prin program, respectiv getSelected() pentru a afla starea marcajului. // creare buton radio JRadioButton primulbuton = new JRadioButton(BUTON 1);
22

primulbuton setActionCommand(BUTON 1); primulbuton.setSelected(true); JradioButton alt_doilea_buton = new JRadioButton(BUTON 2); alt_doilea_buton.setActionCommand(BOTON 2); // definirea unui grup de butoane ButtonGroup grupbutoane = new ButtonGroup(); gropbutoane.add(primulbuton); gropbutoane.add(alt_doilea_buton); // adaugarea butoanelor radio pe o suprafata Jpanel JPanel radioPanel = new JPanel(); radioPanel.setLayout(new GridLayout(0, 1)); radioPanel.add(primulbuton); radioPanel.add(alt_doilea_buton); APLICAIE
import javax.swing.*; import java.awt.*; import java.awt.event.*; class Butoane extends JPanel { public Butoane() { JButton b1 = new JButton("ButonA"); JButton b2 = new JButton("ButonB"); this.setLayout(new GridLayout(1,0)); add(b1); add(b2); }} class CheckBoxuri extends JPanel { public CheckBoxuri() { JCheckBox cb1 = new JCheckBox("Optiune1"); cb1.setSelected(true); JCheckBox cb2 = new JCheckBox("Optiune2"); cb2.setSelected(true); JCheckBox cb3 = new JCheckBox("Optiune3"); cb3.setSelected(true); this.setLayout(new GridLayout(0,1)); add(cb1); add(cb2); add(cb3); }} class ButoaneRadio extends JPanel { public ButoaneRadio() { // Creare radio butoane JRadioButton butonAlb = new JRadioButton("Alb"); butonAlb.setActionCommand("Alb"); butonAlb.setSelected(true); JRadioButton butonRosu = new JRadioButton("Rosu"); butonRosu.setActionCommand("Rosu"); JRadioButton butonVerde = new JRadioButton("Verde"); 23

butonVerde.setActionCommand("Verde"); // Gruparea butoanelor ButtonGroup group = new ButtonGroup(); group.add(butonAlb); group.add(butonRosu); group.add(butonVerde); // Adaugarea butoanelor this.setLayout(new GridLayout(0,1)); add(butonAlb); add(butonRosu); add(butonVerde); }} public class Desen_aplicatie extends JFrame { public static void main(String args[]) { Desen_aplicatie app = new Desen_aplicatie(); Butoane panouButoane = new Butoane(); CheckBoxuri panouCheckBoxuri = new CheckBoxuri(); ButoaneRadio panouButoaneRadio = new ButoaneRadio(); JPanel panou = new JPanel(); panou.setLayout(new GridLayout(0,1)); panou.add(panouButoane); panou.add(panouCheckBoxuri); panou.add(panouButoaneRadio); panou.setBorder( BorderFactory.createEmptyBorder(20, 20, 20, 20)); app.getContentPane().add(panou); app.pack(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.show(); } }

ListBox ListBox-urile afiseaza liste de optiuni. Ele se compun dintr-un element care se ocupa de vizualizare (derivat din clasa JList), respectiv dintr-un element care se ocupa cu gestionarea continutului (derivat din ListModel). Interfata ListModel pune la dispozitie o metoda addElement() care permite adaugarea unei noi optiuni in lista.
24

Constructorul clasei JList primeste un obiect de tip ListModel pe care il va afisa pe ecran. Pentru a avea la dispozitie bare de derulare asociate listei, aceasta va trebui inclusa intr-un element de tip JScrollPane (un panou derulant). Aditional listelor simple se pot defini si liste cu derulare (de tip ComboBox). Acestea afiseaza in mod obisnuit o singura optiune din lista iar pentru a accesa restul optinulor lista trebuie derulata de la un buton special. Listele derulante nu trebuie sa fie adaugate intr-un JScrollPane. ListModel listModel = new DefaultListModel(); listModel.addElement(Linie1"); JList list = new JList(listModel); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // pentru selectii multiple se utiliyeaya parametrul MULTIPLE_INTERVAL_SELECTION list.setSelectedIndex(0); // primul element din lista este implicit selectat JScrollPane listScrollPane = new JScrollPane(list); -------String[] culori = { "Alb", "Negru", "Rosu", "Verde", "Albastru" }; JComboBox listaCulori = new JComboBox(culori); listaCulori.setSelectedIndex(1); // selecteaza elementul 2 (Negru) listaCulori.setEditable(true); Elemente pentru editare text Pentru a putea afisa, respectiv edita o linie de text se pot utiliza elemente de tip JTextField. Acestea permit afisarea si editarea unei linii de text, avand metode precum setText() stabileste textul afisat getText() citeste textul introdus Pentru a edita mai multe linii de text se poate folosi clasa JtextPane o subclasa a jEditorPane, care permite editarea si formatarea textului sau jTextArrea, care permite editarea de text neformatat. Gestionarea evenimentelor (listenere) Aplicatiile cu interfete grafice sunt aplicatii orientate pe evenimente. Anumite evenimente sunt de nivel sczut cum ar fi apsarea i eliberarea unei taste, mutarea cursorului mouse-lui sau apsarea unui buton al acestuia, iar altele sunt de nivel nalt, cum ar fi selectarea unei opiuni dintr-un meniu, apsarea unui buton sau introducere de text ntr-un cmp. Evenimentele de nivel nalt implic de fapt mai multe evenimente de nivel mai sczut. De exemplu introducerea de text ntr-un cmp implic mutarea cursorului mouse-ului, apsarea butonului mouse-ului sau apsarea i eliberarea mai multor taste.
25

In gestionarea evenimentelor intervin obiecte de tip Listener si Event. Pentru a trata evenimentele ce apar intr-o aplicatie trebuie respectati pasii: Implementarea unei clase derivata dintr-o clasa Listener:
public class MyClass implements XXXListener { public void eveniment(XXXEvent e) { ...//tratarea evenimentului... }

Inregistrarea unei instante a clasei precedente pe post de listner pentru o componenta derivata din JComponent:
oComponenta.addActionListener(instanceOfMyClass);

Tratarea evenimentul de apasare pe un buton se va efectua utiliza clasa ActionListener: class ListenerPtButon implements ActionListener { private int numClicks = 0; public void actionPerformed(ActionEvent e){ numClicks++; ((JButton)e.getSource()).setText(Apasat: + numClicks); } } JButton butonulMeu = new JButton(Apasa: 0); butonulMeu. addActionListener(new ListenerPtButon());
Exemplu de cod pentru ListBox, TextArea si Listener:
import javax.swing.*; import javax.swing.event.*; import java.awt.*; import java.awt.event.*; class ListBox1 extends JScrollPane { private JList list; public JList getList() { return list; } public ListBox1() { DefaultListModel listModel = new DefaultListModel(); listModel.addElement("Randul 1"); listModel.addElement("Randul 2"); listModel.addElement("Randul 3"); list = new JList(listModel); list.setVisibleRowCount(3); list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); list.setSelectedIndex(0); setViewportView(list); }} class SelectieLista implements ListSelectionListener { private JTextArea consola; ListModel listModel; public SelectieLista(JTextArea output, ListModel model) { super(); consola = output;

26

listModel = model; } public void valueChanged(ListSelectionEvent e) { boolean isAdjusting = e.getValueIsAdjusting(); ListSelectionModel lsm = (ListSelectionModel)e.getSource(); if(!isAdjusting) { int primulel = e.getFirstIndex(); int ultimulel = e.getLastIndex(); for (int i = primulel; i<=ultimulel; i++) if(lsm.isSelectedIndex(i)) consola.append("\nDomnule student ati selectat : "+listModel.getElementAt(i)); } }} public class liste1 extends JFrame { public static void main(String args[]) { liste1 app = new liste1(); ListBox1 panouLista = new ListBox1(); JTextArea consola = new JTextArea(); ListSelectionModel listSelectionModel = panouLista.getList().getSelectionModel(); listSelectionModel.addListSelectionListener( new SelectieLista(consola, panouLista.getList().getModel())); JPanel panou = new JPanel(); panou.setLayout(new GridLayout(0,1)); panou.add(panouLista); panou.add(new JScrollPane(consola)); panou.setBorder( BorderFactory.createEmptyBorder(20, 20, 20, 20)); app.getContentPane().add(panou); app.pack(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.show(); consola.append("Mesaj "); }}

Un frame este o fereastr cu scop general prin intermediul crei utilizatorii interacioneaz n mod obinuit cu aplicaia. ntr-o aplicaie exist cel puin un frame care va servi drept fereastra principal. Un dialog este o fereastr cu scop limitat destinat n primul rnd afirii unor informaii cum sunt mesajele de eroare sau pentru preluarea unor rspunsuri simple (standard) gen da sau nu.
27

Corespunztor acestor tipuri de ferestre exist dou clase specifice Frame i Dialog. Stabilirea principalelor trsturi pentru ferestrele tip frame se realizeaz pe baza urmtoarelor metode: setsize(lime, lungime) pentru stabilirea dimesiunilor; setResizeable(true|flase) pentru a activa sau dezactiva posibilitatea redimesionrii ferestrei de ctre utilizator; setTitle(text) pentru desemna un titlu afiat n bara superioar a ferestrei; setLocation(x, y) pentru a desemna originea colului stnga-sus al ferestrei, de remarcat faptul c originea (0, 0) de la care sunt considerai factorii x i y este colul stnga sus al cadrului superior i nu cel din stnga-jos; setVisible(true|flase) pentru a afia sau ascunde fereastra, echivalent cu metodele show() i hide(), recomandate a fi nlocuite cu aceast metod. Menirea unui unui astfel de frame este s gzduiasc obiectele GUI cu care va interaciona utilizatorul aplicaiei. Distribuirea, localizarea sau poziionarea obiectelor ntr-o fereastr poate fi controlat folosind un anumit model de gestionare -layout manager- care este desemnat prin metoda setLayout(). Dac se opteaz pentru poziionarea absolut (fr nici un factor de relativizare a obiectelor funcie de mrimea ferestrei de exemplu) atunci metoda setlayout() este apelat n felul urmtor: setLayout(null); n acest fel obiectele (butoane, csue de text, grupuri de opiuni etc.) vor fi afiate ntotdeauna la coordonatele stabilite de programator. Spre exemplu poziionarea i dimensionarea unui boton de comand (clasa java.awt.Button sau javax.swing.JButton n Swing) se realizeaz prin metoda: setBounds(x, y, lime, lungime); Plasarea unor componente GUI ntr-un cadru implic n Java dou declaraii sau specificaii: 1. declararea n clasa derivat din Frame (sau JFrame) a membrilor care desemneaz componentele grafice ce vor fi afiate la execuie; 2. la instanierea ferestrei respective (sau mai exact a clasei derivate din Frame) se va specifica explicit (n cadrul constructorului) instanierea componentelor grafice i apoi afiarea lor prin metoda add(): add(InstanButon); import javax.swing.*; import java.awt.*;
28

import java.awt.event.*; public class frame extends JFrame implements ActionListener, WindowListener{ // Declar doua componente care vor apartine cadrului FrameTest Button b1; Button b2; // In constructorul FrameTest activez butoanele, fereastra coresponzatoare // cadrului FrameTest, obiectele receptoare pentru evenimetele butoanelor // si cele receptoare pentru evenimentele ferestrei public frame(){ // stabilsc titlul ferestrei this.setTitle("Frame Test"); // inregistrez obiectul care va trata evenimentele ferestrei // adica (insusi cadrul TestFrame) this.addWindowListener(this); setLayout(null); // instantiez butoanele, le stabilesc dimensiunile, // inregistrez obiectele care vor trata evenimentele lor (cadrul FrameTest) // si le activez in cadrul FrameTest b1 = new Button("OK"); b2 = new Button("Cancel"); b1.setBounds(50, 100, 50, 50); b2.setBounds(50, 180, 50, 50); b1.addActionListener(this); b2.addActionListener(this); add(b1); add(b2); // stabilesc dimensiunile ferestrei cadrului FrameTesti o afisez setSize(300, 300); setVisible(true); } // metoda in care tratez evenimentele butonului b1 care va inchide fereastra // si va incheia procesul de executie public void actionPerformed(ActionEvent event){ if (event.getSource().equals(b1)) setVisible(false); System.exit(0); } // Implementez metodele cerute de interfata WindowListener // la care se conformeaza obiectul care trateaza evenimentele ferestrei // (adica insusi cadrul FrameTest) public void windowActivated(WindowEvent event){} public void windowClosing(WindowEvent event){ System.exit(0); }
29

public void windowClosed(WindowEvent event){} public void windowDeactivated(WindowEvent event){} public void windowIconified(WindowEvent event){} public void windowDeiconified(WindowEvent event){} public void windowOpened(WindowEvent event){} // metoda main care instantiaza cadrul TestFrame, afisind astfel fereastra // cu cele doua butoane public static void main(String[] args) { frame frm = new frame(); } }

Exemple de componente din biblioteca javax.swing JButton JCheckBox JComboBox JFileChooser JLabel JList JRadioButton Un simplu buton de comand care poate fi apsat printr-un click de mouse Un buton care poate fi bifat O list drop-down clasic care poate conine opional i un camp textual editabil. Utilizatorul poate de asemenea selecta o valoare din list care va fi afiat in cmpul textual O component care asigur un mecanism simplu pentru selectarea unui fiier O component care conine un ir textual sau o imagine (nu reacioneaz la evenimente de introducere/editare text) O component care permite utilizatorului s selecteze unul sau mai multe dintre elementele care le conine Un buton de stare on/off. De obicei sunt organizate n grupuri dintre care unul singur poate fi selectat pe poziia on
30

JScrollPanel JSlider JTextArea JTextField

O component care gestioneaz o poriune vizualizabil prin derularea coninutului n cadrul unui view O component care permite utilizatorului s selecteze o valoare prin rularea unui indicator pe o scal (asemenea unui poteniometru) O zon care poate gzdui mai multe linii de text editabile sau nu O zon pentru introducerea unei singure linii de text

JComponent este o subclas a java.awt.Component i va moteni astfel multe dintre cele mai evidente proprieti ale acestei clase. Proprietile generice ale unei componente includ colorile pentru background i foreground, locaia n cadrul gazd i dimensiunea. Valorile acestora pot fi obinute prin metodele: public Color getForeground () ; public Color getBackground () ; public Point getLocation () ; public Dimension getSize () ; public Rectangle getBounds() ; i pot fi stabilite prin metodele: public void setForeground(Color.denculoare) - culoare text; public void setBackground(Color.denculoare)- culoare fundal; public void setLocation (Point p) ; public void setSize (Dimension d) ; public void setBounds(int x,int y,int Width,int Height) ; Color, point, Dimension i Rectangle sunt clase AWT (definite n biblioteca java.awt). Clasa Color deine un numr de referine de constante cum ar fi Color.red, Color.blue, Color.green. O instan a clasei Point reprezint o poziie relativ ntr-un spaiu determinat prin coordonate x-y. Unitile sunt n pixeli, iar originea (0, 0) nseamn colul din dreapta sus. Atributele unui Point pot fi accesate prin variabilele (membrii) publici x i y de tip int. Acest metod are i metode getX i getY care returneaz double, dar nu are metode setX i setY. O instan a clasei Dimension ncapsuleaz limea i nlimea, de asemenea n pixeli. Atributele pot fi accesate la fel ca i n cazul clasei Point prin membrii publici height i width. La fel exist metodele: public double getHeight() public double getWidth()

31

O instan a clasei Rectangle specific o zon ntr-un spaiu de coordonate, astfel: membrii height i width specific nlimea respectiv limea, iar membrii x respectiv y specific coordonatele obiectului relativ la printele su (cel care l conine). Containere Un obiect care poate conine componente se numete container. Acestea sunt modelate de ctre clasa abstract java.awt.Container. Un aspect important, care simplific lucrul cu intefeele grafice, const n faptul c aceast clas este, la rndul ei, derivat din clasa Component. Prin urmare un Container poate conine un alt Container. De asemenea clasa Swing JComponent este o subclas a clasei Container. Cum orice JComponent poate conine alte componente putem spune c:

O component reprezint un element distinct al unei interfee grafice utilizator, cum ar fi un buton, un cmp textual etc. Un container reprezint o component a interfeei grafice utilizator care poate conine alte componente.
Component

Container

are

JComponent

Relaiile Component Container JComponent Cel mai simplu container este JPanel. Un JPanel este folosit n general ca o regiune simpl n care sunt aduse i grupate o colecie de alte componente. Componentele sunt adugate unui container prin metoda add(). De exemplu setul urmtor de instruciuni creeaz un JPanel i adaug dou butoane: JPanel p = new JPanel; p.add(new JButton(Ok)); p.add(new JButton(Cancel)); Containere top-level
32

Un container top-level este un container care nu este inclus n nici un alt container. Clasele Swing JApplet, JDialog, JFrame i JWindow reprezint containerele top-level din Swing. Container-ul standard pentru o aplicaie de interfa grafic este JFrame.Un JFrame este o fereastr cu titlu i margini bine definite care poate fi mutat, redimensionat, minimizat (iconificat) etc. De asemenea un JFrame poate avea o bar de meniu. Sunt ns dou lucruri mai deosebite ce merit menionate n legtur cu aceast clas: dei este o clas derivat n primul rnd din java.awt.Container nu este totui o subclas a JComponent, iar n al doilea rnd aceasta deleg responsabilitatea gestiunii componentelor sale unui alt obiect de tip JRootPane. Un JRootPane deriv din JComponent i are ca principal responsabilitate gestionarea coninutul unui alt container. Un astfel de obiect este un compozit incluznd printre altele un (panou) content pane care de obicei este un JPanel i reprezint aria de lucru dintr-un JFrame, excluznd titlul, marginile i meniul. Lucrurile par destul de complicate ns ceea ce trebuie reinut este faptul c un JFrame are un JRootPane care conine un panou de componente (un content pane). Pentru a obine referina panoului de componente al unui JFrame se apeleaz la metoda getContentPane() care returneaz un obiect de tip java.awt.Container. Adugarea componentelor ntr-un JFrame Dup cum am artat mai nainte, clasa JFrame este un container care i deleg responsabilitatea gestiunii componentelor sale unui JRootPane. Prin urmare pentru a aduga un buton acesta trebui plasat de fapt pe panoul de componente cam n felul urmtor: JFrame f = new JFrame("JFrame Test"); f.setSize(300, 200); f.setVisible(true); JButton b = new JButton("OK"); Container cp = f.getContentPane(); cp.add(b); Adugarea unei componente nu este i condiia suficient pentru afiarea acesteia. Modul cum va fi expus i unde va fi expus respectiva component cade n sarcina unui alt obiect cu care este echipat fiecare container, i anume layoutManager-ul. Prin urmare un container deleg responsabilitatea poziionrii (dispunerii) i dimensionrii componentelor unui obiect de tip layout manager, care trebuie s implementeze interfaa java.awt.LayoutManager. Aceast interfa specific metodele tuturor tipurilor de layout manager. n unele cazuri este folosit interfaa java.awt.LayoutManager2 care extinde interfaa original LayoutManager. Pentru accesarea i configurarea propriului layout manager un container are la dispoziie metodele getLayout i setLayout:
33

public LayoutManager getLayout(); public void setLayout(LayoutManager manager); Iat n continuare cteva exemple privind modul cum sunt afiate componentele folosind diverse tipuri LayoutManager: Exemplu import javax.swing.*; import java.awt.*; import java.awt.event.*; public class AfisareFrameFlowLayout { public static void main(String[] args) { JFrame f = new JFrame("Dispunere cu FlowLayout"); JButton b1 = new JButton("1"); JButton b2 = new JButton("2"); JButton b3 = new JButton("3"); JButton b4 = new JButton("4"); JButton b5 = new JButton("5"); Container cp = f.getContentPane(); cp.setLayout(new FlowLayout()); cp.add(b1); cp.add(b2); cp.add(b3); cp.add(b4); cp.add(b5); f.setSize(300, 100); f.setVisible(true); } } Rezultatul:

34

Exemplu import javax.swing.*; import java.awt.*; public class DisplayFrameBorderLayout { public static void main(String[] args) { JFrame f = new JFrame("Dispunere cu BorderLayout"); Container cp = f.getContentPane(); cp.setLayout(new BorderLayout()); cp.add(new JButton("Nord"), BorderLayout.NORTH); cp.add(new JButton("Sud"), BorderLayout.SOUTH); cp.add(new JButton("Est"), BorderLayout.EAST); cp.add(new JButton("Vest"), BorderLayout.WEST); cp.add(new JButton("Centru"), BorderLayout.CENTER); f.setSize(300, 200); f.setVisible(true); } } Rezultatul:

Exemplu import javax.swing.*; import java.awt.*; public class AfisareFrameGridLayout { public static void main(String[] args) { JFrame f = new JFrame("Dispunere cu GridLayout"); Container cp = f.getContentPane(); cp.setLayout(new GridLayout(3, 2)); cp.add(new JButton("1")); cp.add(new JButton("2")); cp.add(new JButton("3")); cp.add(new JButton("4")); cp.add(new JButton("5"));
35

cp.add(new JButton("6")); f.setSize(300, 200); f.setVisible(true); } } Rezultat:

Exemplu Modificrile asupra grupului de componente dintr-un container dup afiarea acestuia, va conduce la invalidarea containarului. Aceast fapt poate fi verificat prin metoda isValid() care va returna o valoare boolean. Revalidarea unui container echivaleaz cu reafiarea lui i se realizeaz prin metoda validate(). public boolean isValid (); public void validate(); Exemplu import java.awt.*; import javax.swing.*; public class DisplayFrameGridLayout { public static void main(String[] args) { JFrame f = new JFrame("Dispunere cu GridLayout"); Container cp = f.getContentPane(); cp.setLayout(new GridLayout(3, 2)); cp.add(new JButton("1")); cp.add(new JButton("2")); cp.add(new JButton("3")); cp.add(new JButton("4")); cp.add(new JButton("5")); cp.add(new JButton("6")); f.setSize(300, 200); f.setVisible(true); // adaugam inca doua butoane ceea ce va determina invalidarea containerului // si necesitatea reafisarii lui cp.add(new JButton("7")); cp.add(new JButton("8")); if (!cp.isValid())
36

// reafisam explicit containerul prin re-validarea lui cp.validate(); } } Cu rezultatul:

Evenimente i asculttori Dup cum am menionat ntr-unul din paragrafele anterioare, interaciunile interfeelor utilizator grafice se bazeaz pe paradigma evenimentelor. Anumite evenimente sunt de nivel sczut cum ar fi apsarea i eliberarea unei taste, mutarea cursorului mouse-lui sau apsarea unui buton al acestuia, iar altele sunt de nivel nalt cum ar fi selectarea unei opiuni dintr-un meniu, apsarea unui buton (componenta grafic) sau introducere de text ntr-un cmp. Evenimentele de nivel nalt implic de fapt mai multe de nivel mai sczut. De exemplu introducerea de text ntr-un cmp implic mutarea cursorului mouseului, apsarea butonului mouse-ului i apsarea i eliberarea mai multor taste. Iat cteva dintre categoriile de evenimente ntlnite: Categoria de Descriere evenimente Apsarea i eliberarea tastelor Key event Apsarea i eliberarea butoanelor mouse-ului Mouse event Drag & drop Ascunderea, afiarea, redimensionarea sau mutarea unei Component componente event Container event Adugarea sau ndeprtarea unei componente dintr-un container Deschiderea, nchiderea, minimizarea (iconificarea), Window event reconstituirea (deiconificarea), activarea, dezactivarea unei ferestre Preluarea sau pierderea focus-ului de ctre o component Focus event Eveniment de nivel nalt indicnd o aciune definit la nivelul Action event componentei (de exemplu un buton poate fi apsat, un checkbox poate fi selectat, apsarea tastei ENTER/RETURN pentru un cmp de text) Eveniment de nivel nalt care are loc atunci cnd un utilizator Item event selecteaz un checkbox, buton radio sau opiune dintr-o list Document event Generat de ctre un obiect TextComponent atunci cnd i este
37

modificat coninutul Un aspect important de reinut este faptul instanele de tip Component reprezint surse de evenimente, mai exact evenimentele au loc n contextul componentelor. Majoritatea evenimentelor sunt modelate avnd la baz clasa abstract java.awt.Event, care ea nsi este o subclas a java.util.EventObject. Referina obiectului surs al unui eveniment poate fi obinut prin folosirea metodei getSource() a obiectelor de tip Event. public object getSource () ; Rolul layout-urilor i container-elor n Swing n cele ce urmeaz revenim pentru moment la componente i container-e. Dup cum am evideniat mai nainte, un control reprezint un element afiabil pe ecran, un container reprezint o zon ce grupeaz fizic (conine) controale i/sau eventual alte container-e, iar o component am putea spune c reprezint o unitate constructiv pentru interfeele grafice Java lund forma concret fie a controalelor fie a containerelor. Container-ele disponibile prin bibliotecile Swing sunt diferite de cele din biblioteca AWT fiind organizate pe mai multe straturi:

Straturile containerelor Swing Aceste straturi pot fi descrise, pe scurt, astfel: JRootPane reprezint structura de date care conine toate celelalte panouri provenind din containerele Swing. JLayeredPane gestioneaz panourile pentru meniu i pentru celelalte componente grafice. Prin urmare acest container conine altele dou: JMenuBar i JContentPane. De asemenea, tot la acest nivel, apare i noiunea z-order, adic ordinea n care sunt stratificate componentele (care componente apar deasupra altora). JContentPane reprezint un container Swing n care vor fi adugate toate celelalte componente (controale sau alte container-e) i la nivelul cruia este stabilit politica de dispunere a acestora (noiunea de layout manager). JMenuBar va fi obiectul prin intermediul cruia sunt gestionate eventualele meniuri bar ataate applet-ului sau frame-ului respective. JGlassPane reprezint un container transparent care este aezat peste toate celelalte componente i container-e i permite interceptarea evenimentelor legate mouse, precum i posibilitatea schirii unor obiecte grafice peste ntregul coninut fr s afecteze vreo component existent.
38

Principalele metode folosite n manipularea obiectelor JLabel: Metoda Aciune Obine Stringul afiat de ctre obiectul JLabel String getText() Stabilete printr-un String textul ce va fi afiat void setText(String text) int getHorizontalAlignment() Obine un ntreg care indic modul de aliniere a coninutului etichetei relativ la axa x Obine un ntreg care indic modul de aliniere a int getVerticalAlignment() coninutului etichetei relativ la axa y Obine obiectul Icon afiat de ctre obiectul Icon getIcon() JLabel Stabilete obiectul Icon afiat de componenta void setIcon(Icon icon) JLabel Obine componenta care este etichetat folosind Component getLabelFor() obiectul JLabel Stabilete componenta care va fi etichetat cu void obiectul JLabel setLabelFor(Component c) Stabilete prin ntregul specificat modul de void setHorizontalAlignment(int aliniere relativ la axa x alignament) Stabilete prin ntregul specificat modul de void aliniere relativ la axa y setVerticalAlignment(int alignament) Pentru a obine un obiect JLabel care afieaz un text simplu putem construi o astfel de etichet ca n exemplul urmtor: import java.awt.*; import javax.swing.*; public class ExempluJLabel extends JFrame{ public ExempluJLabel(){ Container cp = getContentPane(); JLabel jlabel = new JLabel("Student la Universitatea Titu Maiorescu"); cp.setLayout(new FlowLayout()); cp.add(jlabel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 100); } public static void main(String[] args) throws Exception{ UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLook AndFeel"); new ExempluJLabel().show(); } }
39

Iat rezultatul:

Cmpuri pentru text JTextField Biblioteca SWING introduce, pentru a gestiona cmpurile care pot primi text din partea utilizatorilor, componenta JTextField ce lucreaz asemntor cu java.awt.TextField (dar care nu este derivat din aceasta). java.lang.Object | ___ java.awt.Component | ___ java.awt.Container | ___ javax.swing.JComponent | ___ javax.swing.text.JTextComponent | ___ javax.swing.JTextField Constructorii principali ai componentei JTextField sunt: Constructor JTextField () JTextField (int columns) JTextField(String text) JTextField(String text, int columns) Aciune Creeaz un nou cmp gol Creeaz un nou obiect JTextField fr coninut de lungimea indicat (n coloane) Creeaz un nou obiect JTextField coninnd textul specificat Creeaz un nou obiect JTextField coninnd textul specificat i avnd (afind) lungimea indicat (n coloane)

Principalele metode ale componentei JTextField sunt urmtoarele: Metoda Aciune Obine String-ul coninut n cmp String getText() Stabilete printr-un String textul ce va fi coninut void setText(String text) de ctre obiectul JTextField int getHorizontalAlignment() Obine un ntreg care indic modul de aliniere relativ la axa x Stabilete prin ntregul specificat modul de void setHorizontalAlignment(int aliniere relativ la axa x alignament) Obine dimensiunile (lime, lungime printr-un Dimension obiect de tip Dimension) prefereniale getPreferredSize() Obine numrul de coloane pe care este afiat int getColumns() textul Stabilete numrul de coloane pe care este afiat void setColumns(int
40

columns)

textul

Pentru a obine un obiect JTextField putem proceda ca n exemplul urmtor: import java.awt.*; import javax.swing.*; public class test extends JFrame{ public test(){ Container cp = getContentPane(); JLabel jlabel = new JLabel("Student la Universitatea Titu Maiorescu"); cp.setLayout(new FlowLayout()); cp.add(jlabel); JTextField informatie = new JTextField(); //cp.setLayout(new FlowLayout()); cp.add(informatie); informatie.setText("Informatie cu JTextField"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 100); } public static void main(String[] args) throws Exception{ UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLook AndFeel"); new test().show(); } } Rezultatul este:

Obiectele JtextField genereaz evenimente legate de apsarea tastatelor i un ActionEvent atunci cnd utilizatorul apas tasta Enter/Return pentru a ncheia introducerea textului i eventual pentru a-l valida. Codul pentru implementarea modelului de evenimente legate de aceast component ar putea fi: text.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ // secvena de cod ce trebuie executat la apariia ecenimentului sau // apel la o eventual metod din cadrul printe n care s fie tratat explicit acest eveniment
41

System.out.println("Informatia definita este: " e.getActionCommand()); } }); care poate fi adugat n metoda init() a clasei ExempluTextField (eventual la sfrit, sau oricum dup instanierea clsei JTextField).

Butoane AbstractButton i JButton n Swing, toate butoanele sunt derivate din clasa AbstractButton care furnizeaz baza pe care sunt construite toate clasele pentru butoane din Java. Iat ierarhia de motenire pentru aceast clas: java.lang.Object | ___ java.awt.Component | ___ java.awt.Container | ___ javax.swing.JComponent | ___ javax.swing.AbstractButton Putem obine un JButton astfel: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class exemplu1 extends JFrame{ //JButton button = new JButton("Apasa"); JButton button = new JButton("Apasa", new ImageIcon("C:\\Documents and Settings\\My Documents\\My Pictures\\a1.jpg")); JTextField text = new JTextField(30); public exemplu1() { // stabilsc titlul ferestrei this.setTitle("test"); Container cp = getContentPane(); cp.setLayout(new FlowLayout()); cp.add(button); cp.add(text); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ text.setText("Ai apasat pe buton"); } }); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 300); }
42

public static void main(String[] args) throws Exception{ UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLook AndFeel"); new exemplu1().show(); } } Se poate observa c n metoda init(), dup instanierea clasei JButton, este apelat la un moment dat metoda addActionListener() pentru nregistrarea unui listener care s trateze evenimentele acestuia. De asemenea, un JButton poate afia inclusiv o pictogram dac este construit astfel: JButton button = new JButton("Apasa", new ImageIcon("C:\\Documents and Settings\\My Documents\\My Pictures\\a1.jpg")); Rezultatul este:

Butoane checkbox - JCheckBox Dup cum se tie, un checkbox reprezint un control grafic care ofer posibilitatea selectrii unei valori booleene, nsoit fiind de un text explicativ. Biblioteca Swing ofer pentru obinerea unui astfel de buton clasa JCheckBox care anumite avantaje fa de clasa similar din AWT, CheckBox, i anume posibilitatea afirii unei imagini nsoitoare. java.lang.Object | ___ java.awt.Component | ___ java.awt.Container | ___ javax.swing.JComponent | ___ javax.swing.AbstractButton
43

|___ javax.swing.JToggleButton | ___ javax.swing.JCheckBox Principalii constructori care pot fi folosii pentru instanierea acestei clase sunt: Constructor Aciune JCheckBox() JCheckBox(String text) Construiete un JCheckBox ce afieaz textul JCheckBox(String text, specificat i indic dac este, sau nu, selectat Boolean selected) iniial JCheckBox(Icon image) JCheckBox(String text, Icon icon) n ce privete metodele, manipularea acestor obiecte se face n principal prin setSelected(), isSelected(), setText(), getText() etc. motenite din superclase, n special de la clasa JabstractButton. Butoane radio JRadioButton Butoanele radio se folosesc atunci cnd se dorete construirea unui grup de butoane de opiuni ns la un moment dat numai unul dintre ele s fie selectat. La fel ca i n cazul checkbox-urilor, biblioteca Swing vine cu propria sa clas JRadioButton pentru a obine butoane de acest fel. Iat ierarhia de motenire n acest caz: java.lang.Object | ___ java.awt.Component | ___ java.awt.Container | ___ javax.swing.JComponent | ___ javax.swing.AbstractButton |___ javax.swing.JToggleButton | ___ javax.swing.JRadioButton La fel ca n cazul checkkbox-urilor, constructorii clasei JRadioButton pemit crearea de butoane radio nsoite de text, imagini sau text i imagini, i specificarea strii de selectat/deselectat: Constructor Aciune JRadioButton() JRadioButton(String text) Construiete un JCheckBox ce afieaz textul JRadioButton(String text, specificat i indic dac este, sau nu, selectat Boolean selected) iniial JRadioButton(Icon image) JRadioButton(String text, Icon icon)

44

Pentru a demonstra modul n care pot fi create i folosite aceste butoane am construit exemplul urmtor: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class exemplu1 extends JFrame{ JLabel jlabel; ButtonGroup grup; JRadioButton [] butoaneRadio; JRadioButton b1; public exemplu1() { Container contentPane = getContentPane(); jlabel = new JLabel(); jlabel.setIcon(new ImageIcon("C:\\flori\\p1.jpg")); contentPane.add(jlabel); grup = new ButtonGroup(); butoaneRadio = new JRadioButton[]{ new JRadioButton("help"), new JRadioButton("exit"), new JRadioButton("find"), }; contentPane.setLayout(new FlowLayout()); for (int i = 0; i < butoaneRadio.length; ++i){ grup.add(butoaneRadio[i]); contentPane.add(butoaneRadio[i]); butoaneRadio[i].addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ refacere_imagine(e); } }); } butoaneRadio[0].setSelected(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300, 300); } public void refacere_imagine(ItemEvent e){ if (butoaneRadio[0].isSelected()) jlabel.setIcon(new ImageIcon("C:\\flori\\p1.jpg")); //if (e.getItemSelectable() == butoaneRadio[1]) if (butoaneRadio[1].isSelected()) jlabel.setIcon(new ImageIcon("C:\\flori\\p2.jpg")); //if (e.getItemSelectable() == butoaneRadio[2]) if (butoaneRadio[2].isSelected()) jlabel.setIcon(new ImageIcon("C:\\flori\\p3.jpg"));
45

} public static void main(String[] args) throws Exception{ UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLook AndFeel"); new exemplu1().show(); } } Rezultatul este:

Construirea unei fereastra principale a aplicaiilor tip desktop cu meniuri Swing De regul, ferestrele principale ale aplicaiilor desktop reprezint calea esenial pentru accesul la funciile principale ale aplicaiei. De regul acest lucru realizat printr-un meniu nsoit, eventual, i de o bar de instrumente. Crearea meniurilor Modelul orientat obiect al meniurilor n Swing are urmtoarele caracteristici: - bar principal reprezint o instan a clasei JMenuBar, sau, pentru meniurile contextuale, JPopUpMenu; - meniurile accesebile din bara principal sunt obinute din clasa JMenu; - elementele individuale ale unui menu (instan JMenu) sunt construite pe baza clasei JMenuItem care are urmtoarele subclase: JCheckBoxMenuItem, JRadioButtonMenuItem i JMenu. Prin urmare un element individual dintr-un meniu poate fi, la rndul su, un al submenu (instan JMenu); Ca urmare definiia celui mai simplu meniu ar putea fi urmtoarea: import java.awt.*;
46

import javax.swing.*; import java.awt.event.*; public class MainMenuBar extends JMenuBar{ JFrame frmParent; public MainMenuBar() { JMenu fileMenu = new JMenu("File"); JMenu editMenu = new JMenu("Edit"); JMenu quitMenu = new JMenu("Quit"); // Meniul File: Open, Save, Close JMenuItem openItem = new JMenuItem("Open"); JMenuItem saveItem = new JMenuItem("Save"); JMenuItem closeItem = new JMenuItem("Close"); //Meniul Edit: Cut, Copy, Paste, Find (Find, Replace) JMenuItem cutItem = new JMenuItem("Cut"); JMenuItem copyItem = new JMenuItem("Copy"); JMenuItem pasteItem = new JMenuItem("Paste"); JSeparator separator1 = new JSeparator(); JMenu findMenu = new JMenu("Find"); JMenuItem findItem = new JMenuItem("Find"); JMenuItem replaceItem = new JMenuItem("Replace"); //Meniul Quit JMenuItem exitItem = new JMenuItem("Exit"); JMenuItem aboutItem = new JMenuItem("About"); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(closeItem); editMenu.add(cutItem); editMenu.add(copyItem); editMenu.add(pasteItem); editMenu.add(separator1); findMenu.add(findItem); findMenu.add(replaceItem); editMenu.add(findMenu); editMenu.add(new JCheckBox("Bifa")); quitMenu.add(exitItem); quitMenu.add(aboutItem); add(fileMenu); add(editMenu);
47

add(quitMenu); } } Pentru a dispune un meniu ntr-un formular, avem nevoie de o instan JFrame pentru bara de meniu, stabilit prin metoda setJMenuBar(). De exemplu clasa principala este: Import java.awt.*; import javax.swing.*; import java.awt.event.*; public class FormMain extends JFrame{ public FormMain() { this.setJMenuBar(new MainMenuBar()); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(500, 500); this.setVisible(true); } public static void main(String[] args) { new FormMain(); } } va avea la runtime urmtorul rezultat:

TEME PRACTICE
Se vor testa cel putin 5 exemple din acest modul, se vor comenta i vor fi incluse ntr-un PROJECT cu numele studentului.

48

Modulu III Utilizare NETBEANS


Aplicatia 1 .Crearea unui nou proiect
NetBeans IDE Java Quick Start Tutorial
Acest ghid ofer o introducere foarte simplu i rapid, pentru fluxul de lucru NetBeans IDE de mers pe jos v prin crearea unui simplu "Hello World" Java Console cerere. Odat ce ai terminat cu acest tutorial, veti avea o cunoatere general a modului de a crea i rula aplicaii n IDE. Acest tutorial dureaz mai puin de 10 minute. Dup ce terminai acest tutorial, putei trece la trasee de nvare, care sunt legate de la documentare, Training & pagina de sprijin. Partii de nvare prevd tutoriale cuprinztoare care evideniaz o gam mai larg de caracteristici IDE i tehnici de programare pentru o varietate de tipuri de aplicare . Dac nu vrei s faci un "Hello World" aplicaie, putei sri peste acest tutorial si sari direct la trasee de nvare.

Configurarea de proiect Adugarea Cod la Sursa Generated File Compilarea i Running Cerere De constructii si Implementarea Cerere Etapele urmtoare Pentru a completa acest tutorial, avei nevoie de urmtoarele produse software i resurse.

Software-ul sau de Resurse NetBeans IDE

Versiune Required Versiunea 6.7 versiunea 6 sau versiunea 5

Java Development Kit (JDK)

Configurarea de proiect
Pentru a crea un proiect IDE: 1. 2. Start NetBeans IDE. n IDE, alegeti File> New Project (Ctrl-Shift-N), aa cum se arat n figura de mai jos.

49

3.

n expertul New Project, extindei categoria Java i selectai aplicaie Java aa cum se arat n figura de mai jos. Apoi, facei clic pe Next.

4.

n numele i locaia de start a expertului, facei urmtoarele (dup cum se arat n figura de mai jos): n domeniul Denumirea proiectului HelloWorldApp tip,. Lsai Utilizare Pliant dedicate pentru stocarea caseta de selectare de Biblioteci neselectat. n Creai principal domeniu de clas, helloworldapp.HelloWorldApp tip. Las Setare ca principale caseta de selectare de proiecte selectate.

o o o o

50

5.

Facei clic pe Terminare.

Proiectul este creat i a deschis n IDE. Ar trebui s vedei urmtoarele componente:

Fereastra proiecte, care conine o vizualizarea arborescent a componentelor proiectului, inclusiv fiierele surs, biblioteci care depinde codul dvs., i aa mai departe.

Fereastra Sursa Editor cu un fisier numit HelloWorldApp deschis. Fereastra Navigator, pe care o putei utiliza pentru a naviga rapid ntre elemente din cadrul clasei selectat.

51

Adugarea Cod la Sursa Generated File


Pentru ca tu ai plecat de la Crearea principale clasa caseta de selectare de selectat n expertul New Project, IDE a creat o clas schelet pentru tine. Putei aduga "Hello World!" mesaj de la codul scheletului prin nlocuirea linie:

/ / Cod TODO aplicarea logica aici

cu linia: System.out.println ( "Hello World!");


A memora modificarea prin alegerea Fiier> Salvare.
Fiierul ar trebui s arate ceva de genul mostra de cod de mai jos.

/* * Pentru a schimba acest ablon, alegeti Tools | Template-uri * i deschide ablon n editor.

52

*/

HelloWorldApp pachet;

public class HelloWorldApp ( public static void main (String [] args) ( System.out.println ( "Hello World!"); ) )

Compilarea i Rularea programului


Din cauza Compilarea IDE pe caracteristica Salvare, tu nu trebuie s compilai manual proiectului dvs. pentru a rula n IDE. Cnd salvai un fiier surs Java, IDE automat compileaz ea. Pentru a rula programul:

Alegei Run> Run Main Project (F6). Figura urmtoare arat ceea ce ar trebui s vedei acum.

Felicitri! Lucrrile Tale program! Dac exist erori de compilare, acestea sunt marcate cu simbolurile rou n marginile din stnga i din dreapta a Editor Source. Simbolurile, n marginea din stnga a indica erorile pentru liniile corespunztoare. Simbolurile n marja de dreptul de a afia toate zonele din dosar care au erori, inclusiv erori, n linii care nu sunt vizibile. Avei posibilitatea s cursorul peste un semn de eroare pentru a obine o descriere a erorii. Avei posibilitatea s facei clic pe un simbol n marja de dreptul de a sri la linia cu eroarea.

De constructii si Implementarea Cerere


Dup ce ai scris i testa rula aplicaia dvs., putei utiliza comanda "curate" i Generare pentru a construi cererea dumneavoastr, n vederea detarii. Cnd utilizai Clean i comanda Construirea, IDE opereaza un construi script care ndeplinete urmtoarele atribuii:

53

terge orice dosar anterior elaborate, precum i a altor construi ieiri. Recompiles cerere i construiete o JAR fiier care conine fiiere compilate. Pentru a construi cererea dumneavoastr:

Alegei alerga> "curate" i Build principale ale proiectului (Shift-F11). Putei vedea construi iesiri prin deschiderea fereastra Fiiere i extinderea nodul HelloWorldApp. Bytecode compilat fiier

HelloWorldApp.class este n build/classes/helloworldapp subnode build/classes/helloworldapp Dislocabile JAR Un fiier


care conine HelloWorldApp.class este n nodul dist

54

Aplicatia 2 .Proiectarea unei GUI n NetBeans IDE

n acest tutorial vei nva cum s:

Utilizai GUI Builder Interface Creai un container GUI Adaugarea de componente Redimensionare Components Aliniai Componente Reglarea Componenta de ancorare Set Componenta Auto-Redimensionarea Behavior Edit Component Properties Acest tutorial dureaz aproximativ 30 de minute. Pentru a completa acest tutorial, avei nevoie de urmtoarele produse software i resurse.

Software-ul sau de Resurse NetBeans IDE

Versiune Required versiunea 6.7, 6.5, 6.1 sau versiunea 6 sau versiunea 5

Java Development Kit (JDK)

Noiuni de baz
GUI IDE lui Builder face posibil de a construi aspect profesional GUIs, fr o nelegere profund a managerilor de aspect. Putei stabili formularele, prin plasarea componentelor n cazul n care le dorii.

Crearea unui proiect


Deoarece toata dezvoltare Java n IDE are loc n cadrul proiectelor, va trebui mai nti pentru a crea un nou proiect ContactEditor n care pentru a stoca surse i fiiere alt proiect. Un proiect IDE este un grup de fiiere surs Java, plus datele sale asociate Meta, inclusiv proiecte specifice de fiiere proprieti, o furnic construi script care controleaz construi i rula setri, i un fiier de project.xml unor hri Ant obiective pentru a IDE comenzi. n timp ce aplicaii Java adesea consta din mai multe proiecte de IDE, n sensul de acest tutorial, vom construi o aplicatie simpla, care este stocat n ntregime ntr-un singur proiect.

Pentru a crea un proiect de ContactEditor: 1. 2. Alege File> New Project. Alternativ, avei posibilitatea s facei clic pe pictograma Proiect Nou n bara de instrumente IDE. n panoul de Categorii, selectai nodul Java i n panoul de proiecte, alegei aplicaie Java. Facei clic pe

55

Urmtorul. 3. 4. 5. 6. Introducei ContactEditor n domeniul Denumirea proiectului i specificai locaia proiectului. Lsai Utilizare Pliant dedicate pentru stocarea caseta de selectare de Biblioteci neselectat. Asigurai-v c Setare ca principale caseta de proiect este selectat i clar Crearea principal domeniu de clas. Facei clic pe Terminare. IDE creeaz dosarul ContactEditor pe sistemul dumneavoastr n locaia desemnate. Acest dosar conine toate fiierele proiectului asociate, inclusiv script-ul de Ant, foldere pentru stocarea surselor i teste, precum i un dosar pentru un proiect-metadate specifice. Pentru a vizualiza structura de proiect, utilizai fereastra IDE's Files.

Crearea unui container interfa grafic


Dup crearea noua aplicaie, este posibil s fi observat c Pachetele dosarul Sursa n fereastra de Proiecte conine un <default gol

package> nod. Pentru a ncepe construirea interfata noastra, avem nevoie de a crea un container Java n cadrul cruia vom plasa
componentele necesare alte GUI. n acest pas vom crea un recipient cu ajutorul componentei JFrame i locul recipientul ntr-un ambalaj nou.

Pentru a crea un container JFrame: 1. 2. 3. 4. n fereastra Proiecte, facei clic dreapta pe nodul ContactEditor i a alege nou> JFrame Form. Introducei ContactEditorUI ca numele clasei. Introducei my.contacteditor ca pachet. Facei clic pe Terminare. IDE creeaz forma ContactEditorUI i clasa de ContactEditorUI n cadrul cererii ContactEditorUI.java i deschide formularul ContactEditorUI n Generatorul GUI. Observai c pachetul my.contacteditor nlocuiete implicit de pachet.

S ne familiarizm cu GUI Builder


Acum, c ne-am creat un nou proiect pentru a aplicaiei noastre, sa ia un minut pentru a ne familiariza cu interfa GUI Builder lui. Pentru a explora interfa GUI Builder cu un demo interactiv, facei clic pe Vizualizare pictograma Demo.

56

Cnd ne-am adugat recipient JFrame, IDE a deschis formularul de nou-create ContactEditorUI ntr-o fil Editor cu o bar de instrumente care conine mai multe butoane, aa cum se arat n ilustraie precedent. Formularul ContactEditor deschis, avnd n vedere Builder GUI's Design si trei ferestre suplimentare, a aprut n mod automat de-a lungul marginilor IDE lui, permindu-v s navigheze, s organizai i edita forme GUI cum ai construi ei. Windows Constructorul GUI diferitele includ:

Design Area. Ferestrei Builder GUI's primare pentru crearea i editarea forme Java GUI. Sursa a Barei de instrumente i butoanele de design comuta v permit s vizualizai codul surs al unei clase sau o vizualizare grafic a componentelor sale GUI. Butoanele suplimentare bara de instrumente furnizeaz acces convenabil la comenzi comune, cum ar fi alegerea ntre Selecia i moduri de conectare, alinierea componente, setarea pentru componente auto-redimensionare comportament, i previewing forme.

Inspector. Ofer o reprezentare a tuturor componentelor, att vizuale i non-vizuale, n cererea dumneavoastr ca o ierarhie copac. Inspector ofer, de asemenea feedback vizual despre ceea ce componenta n arborele este n prezent n curs de editare n Builder GUI, precum i v permite s organizai componente n panourile disponibile.

57

Palette. O list personalizabil de componente disponibile care conin file pentru a JFC / Swing, AWT, precum i componente JavaBeans, precum i managerii de aspect. n plus, putei crea, eliminai, a rearanja categorii afiat n paleta de utiliznd Customizer.

Proprieti de ferestre. Afieaz proprietile din componenta selectat n Builder GUI, fereastra Inspector, fereastra Proiecte, sau fereastra Files. Dac facei clic pe butonul Sursa, IDE afieaz Java aplicaiei codul surs n Editorul cu secii de cod care sunt generate automat de ctre constructor GUI indicat de zonele de albastru, numit pazita Blocuri. Blocuri pazita sunt zone protejate care nu sunt editabile n Vezi sursa. Avei posibilitatea s editai numai codul care figureaz n zonele albe de Editor atunci cnd, n Vezi sursa. Dac avei nevoie pentru a face modificri la Codul ntr-un bloc pazita, fcnd clic pe butonul Design revine editorului IDE la Builder GUI n care putei efectua modificrile necesare la forma. Cnd salvai modificrile, actualizrile IDE sursele fiierului. Not: Pentru dezvoltatorii de avansat, o Customizer Palette este disponibil care v permite s adugai elemente personalizate de la JAR-uri, biblioteci, sau n alte proiecte la Palette.

Concepte de baz
GUI IDE lui Builder rezolv problema de baz de Java crearea de GUI prin fluidizarea fluxului de lucru, de a crea interfee grafice, elibernd dezvoltatorii de la complexitatea Swing manageri de aspect. Ea face acest lucru prin extinderea actual NetBeans IDE GUI Builder pentru a sprijini o simpl "Free Design" paradigma cu regulile de layout simplu, care sunt uor de neles i de folosit. Pe msur ce pune n formularul dvs., Generatorul mediu grafic ofer orientri vizual sugernd spaierea optime i de aliniere a componentelor. n fundal, Builder GUI traduce deciziile de design ntr-un UI funcionale care este implementat folosind managerul de GroupLayout nou layout i Swing alte construcii. Pentru c folosete un model dinamic de aspect, GUI's construit cu Builder GUI se comport ca i v-ai atepta la runtime, de adaptare pentru a acomoda orice modificrile pe care le face fr a modifica raporturile definite ntre componente. Ori de cte ori l redimensionai forma, locales comutator, sau specifica un alt aspectul, GUI regleaz automat de a respecta uite int i Introduceri simt i compenseaz.

Designul fr
n GUI IDE lui Builder, v putei construi formularele dvs. pur i simplu prin punerea componente n cazul n care dorii s le ca i cum ai folosit de poziionare absolut. GUI Cifrele Builder n care atribute de aspect sunt necesare i apoi genereaz codul pentru tine n mod automat. Nu trebuie s te privesc cu introduceri, ancore, umple, i aa mai departe.

Automat Componenta de poziionare (snapping)


Pe msur ce adugai componente de la o form, Builder grafic ofer feedback vizual care ajut n componente de poziionare bazat pe sistemul de operare sa ne uitam si sa se simta. Generator grafic ofer sfaturi utile inline i feedback-ul vizual n ceea ce privete alte componente n cazul n care ar trebui s fie introduse pe formularul dvs., n mod automat se rup componente n poziia de-a lungul liniilor directoare. Aceasta face ca aceste sugestii bazate pe poziiile de componente care au fost deja introduse in forma, permind n acelai timp padding s rmn flexibile, astfel nct arat diferit int i se simte face n mod corespunztor n timpul rulrii.

58

Visual Feedback
Builder GUI prevede, de asemenea feedback-ul vizual n ceea ce privete componenta de ancorare i nlnuirea relaii. Aceti indicatori v permit s identifice rapid diversele relaii de poziionare i componenta fixarea comportament care afecteaz modul n GUI dvs. vor aprea att i s se comporte n timpul rulrii. Aceasta viteza procesului de proiectare GUI, permindu-v s creai rapid cu aspect profesional interfete vizuale pe care locul de munc.

Sa incepem cu inceputul
Acum, c ai familiarizat-v cu interfa GUI Builder lui, este timpul s nceap n curs de dezvoltare UI de aplicare noastre ContactEditor. n aceast seciune vom arunca o privire la utilizarea Palette IDE de a aduga diferitelor componente GUI de care avem nevoie pentru a forma nostru. V mulumim pentru Drum liber IDE a paradigmei de proiectare, tu nu mai trebuie s lupte cu managerii layout pentru a controla dimensiunea i poziia a componentelor n termen de containere dumneavoastr. Tot ce trebuie sa faci este drag i drop (sau murturi i plop), componentele care avei nevoie pentru a forma dvs. de GUI aa cum se arat n ilustraii care urmeaz.

Adugarea de componente: Noiuni de baz


Dei GUI IDE lui Builder simplific procesul de creare a Java GUI, este adesea util s schieze aa cum dorii interfaa dumneavoastr de a privi nainte de a ncepe s se stabileasc it afar. Designeri interfa Muli consider acest lucru o practic cele mai bune "," tehnica, cu toate acestea, n sensul acestui tutorial puteti peek pur i simplu, la modul n care formularul nostru de completat ar trebui s arate, srind nainte de seciunea Examinarea dvs. de GUI. Deoarece am adugat deja un JFrame ca formularul nostru de top a lui recipient de nivel, urmtorul pas este de a aduga o pereche de JPanels care ne va permite s cluster componentele UI nostru folosind frontierele intitulata. Se refer la urmtoarele ilustraii i anunul "IDE's Pick i a cdea n ap", atunci cnd realizarea acestui comportament.

Pentru a aduga un JPanel: 1. 2. n fereastra Palette, selectai componenta Panoul din categoria Swing, fcnd clic pe i de eliberare a butonul mouse-ului. Mutai cursorul n colul din stnga sus a formularului n Generatorul GUI. n cazul n care componenta este situat aproape de marginile containerului de sus i stnga, liniile directoare orizontale i verticale de aliniere par s indice marjele de preferat. Facei clic pe formularul de a plasa JPanel n aceast locaie. Componenta JPanel apare n formularul de ContactEditorUI cu portocaliu subliniind, ceea ce nseamn c acesta este selectat, dup cum se arat n ilustraia urmtoare. Dupa lansarea butonul mouse-ului, indicatorii mici par s demonstreze relaii de componenta de ancorare i un nod corespunztor JPanel este afiat n fereastra de Inspector.

59

Apoi, avem nevoie pentru a redimensiona JPanel pentru a face loc pentru componentele vom loc n ea un pic mai trziu, dar hai sa ia un minut s subliniez un alt de vizualizare Generatorul GUI lui caracteristici prima. n scopul de a face acest lucru avem nevoie pentru a deselecta JPanel tocmai le-am adugat. Pentru ca nu am adugat un titlu de frontier nc, panoul dispare. Remarca, totui, c, atunci cnd treci cursorul peste JPanel, marginile sale schimbare la lumina gri, astfel nct poziia sa poate fi vzut n mod clar. Ai nevoie doar s facei clic oriunde n cadrul componentei selectai din nou aceasta i provoac redimensionare mnere i ancorarea indicatori care s reapar.

Pentru a redimensiona JPanel: 1. 2. 3. Selectai JPanel tocmai l-ai adugat. De redimensionare mic patrat mnere reapare n jurul perimetrului componenta a lui. Facei clic i inei redimensiona mner pe marginea din dreapta a JPanel i tragei pn la orientarea alinierea punctate apare apropiere de marginea formular. De pres al redimensiona mnerul pentru a redimensiona componenta. Componenta JPanel este extins la durata ntre marjele de containerului stnga i dreapta, n conformitate cu recomandate offset, aa cum se arat n ilustraia urmtoare.

60

Acum, c am adugat un panou s conin informaii nostru Numele UI lui, avem nevoie s repetai procesul pentru a aduga un alt mod direct de mai jos prima pentru e-mail de informare. Referindu-se la urmtoarele ilustraii, se repet anterioare dou sarcini, acordnd o atenie pentru a poziionare Generatorul GUI's sugerat. Observai c distana a sugerat vertical ntre JPanels doi este mult mai restrns dect c, la margini. Dup ce ai adugat JPanel al doilea, redimensionati-o astfel nct s umple rmase sub form de spaiu pe vertical.

61

62

Pentru c vrem s se fac distincia vizual funcii n superioare i inferioare ale GUI seciunile noastre, avem nevoie pentru a aduga un titlu de frontier i pentru fiecare JPanel. n primul rnd vom realiza acest lucru, folosind fereastra de Proprieti, apoi vom ncerca le folosind meniul pop-up.

Pentru a aduga frontierele titlul de proprietate asupra JPanels: 1. 2. 3. 4. 5. 6. Selectai JPanel de top n Builder GUI. n fereastra de Proprieti, facei clic pe butonul elips (...) lng proprietatea de frontier. In frontier JPanel editorul care apare, selectai nodul TitledBorder n panoul disponibile Borders. n panoul Proprieti de mai jos, introducei numele pentru titlul de proprietate. Facei clic pe elipsa (...) lng proprietatea Font, Bold selectai pentru stilul de font, i introducei 12 pentru Dimensiune. Facei clic pe OK pentru a iei din dialog. Selectai n partea de jos JPanel i repetai paii 2 pn la 5, dar de data aceasta facei clic dreapta pe JPanel i accesul Properties fereastr cu ajutorul meniul pop-up. Adresa de e-mail pentru titlul de proprietate. Frontierele Intitulat, se adaug la ambele componente JPanel.

Adugarea de Componente separate la formularul


Acum, avem nevoie s adugai componente care va prezenta informatii reale de contact n lista noastre de contact. n cadrul acestei responsabiliti vom aduga patru JTextFields c va afia informaiile de contact i a JLabels care vor s le descriei. n timp ce realizarea acestui, observai liniile directoare orizontale i verticale care afieaz GUI Builder, sugernd componenta preferat spaiere astfel cum sunt definite de ctre dvs. sistemului de operare uite si sa se simta. Acest lucru asigur faptul c GUI-ul este n mod automat fcut respectnd obiectivul sistemului de operare privim si sa se simta la rulare.

Pentru a aduga un JLabel la formularul de: 1. 2. n fereastra Palette, selectai componenta etichet din categoria Swing. Mutai cursorul peste Numele JPanel am adaugat mai devreme. n cazul n care apar linii directoare care s indice c JLabel este poziionat n colul din stnga sus al JPanel cu o marj mic la marginile de sus i din stnga, facei clic pentru a plasa etichet. The JLabel se adaug la forma i un nod corespunztor, reprezentnd componenta se adaug la fereastra Inspector. Inainte de a merge mai departe, avem nevoie pentru a edita textul de afiare a JLabel tocmai le-am adugat. Dei avei posibilitatea s editai componenta textul afiat n orice moment, cea mai uoar cale este de a face acest lucru ca le adugai.

Pentru a edita textul de afiare a unei JLabel: 1. 2. Facei dublu clic pe JLabel pentru a selecta textul ei de afiare.

Numele primul tip: si apasati Enter.


Numele JLabel e nou este afiat i lime componente regleaz, ca urmare a edita.

Acum, vom aduga o JTextField astfel nct s putem obine o bucatica din caracteristic Builder GUI de valoarea iniial de aliniere.

Pentru a aduga un JTextField la formularul de: 1. 2. n fereastra Palette, selectai textul Cmp componenta din categoria Swing. Mutai cursorul imediat de la dreptul de prenume: JLabel ne-am adugat. Cnd orientarea orizontal pare s indice c iniial a JTextField este aliniat cu cea a JLabel i spaierea ntre cele dou componente este sugerat,

63

cu o orientare vertical, facei clic pe la poziia JTextField. JTextField fixeaz n poziie n formularul de aliniat cu valoarea iniial JLabel lui, aa cum se arat n ilustraia urmtoare. Observai c JLabel mutat n jos, uor n vederea alinierii cu valoarea iniial mai nalt cmpul de text a lui. Ca de obicei, un nod reprezentnd componenta se adaug la fereastra Inspector.

nainte de a trece mai departe, avem nevoie pentru a aduga un JLabel suplimentare i JTextField imediat la dreapta, ale celor tocmai le-am adugat, dup cum se arat n ilustraia urmtoare. De aceast dat intr Last Name: ca JLabel a textului de afiare i se las de text JTextFields "substituent aa cum este pentru acum.

Pentru a redimensiona un JTextField: 1. 2. 3. Selectai JTextField tocmai le-am adugat la dreapta a Last Name: JLabel. Glisai marginea JTextField dreptul redimensiona mnerul spre marginea din dreapta a anexnd JPanel. n cazul n care liniile directoare verticale alinierea apar sugernd marja dintre cmpul de text i marginea din dreapta a JPanel, eliberai butonul mouse-ului pentru a redimensiona JTextField. Marginea JTextField dreptul fixeaz alinierea cu marja de JPanel's Edge a recomandat, aa cum se arat n ilustraia urmtoare.

64

Adugarea de multiple Componente la formularul


Acum, vom aduga Titlu: i Nick: JLabels care descriu dou JTextFields c vom aduga ntr-un minut. Vom alege i de plop componentelor n timp ce apsai tasta Shift, pentru a le aduga rapid la forma. Realizarea acestui n timp ce, din nou, observai c Builder GUI afieaz liniile orizontale si verticale care sugereaz spaierea preferat componenta.

Pentru a aduga JLabels multiple pentru a forma: 1. 2. n fereastra Palette, selectai componenta etichet din categoria Swing, fcnd clic pe i de eliberare a butonul mouse-ului. Mutai cursorul peste formularul de mai jos, direct prenume: JLabel am adaugat mai devreme. n cazul n care liniile directoare par s indice c marginea JLabel noului stnga este aliniat cu cel al JLabel de mai sus i o marj mic exist ntre ele, Shift-click pentru a JLabel primul loc. n timp ce nc mai apsnd tasta Shift, facei clic pe un alt loc pentru a JLabel imediat la dreapta din prima. A face anumite pentru a elibera tasta Shift nainte to poziionarea JLabel al doilea. Dac uitai s eliberai tasta Shift to nainte de poziionare JLabel ultima, pur i simplu apsai tasta Escape. The JLabels se adaug la formularul de crearea unui al doilea rnd, aa cum se arat n ilustraia urmtoare. Nodurile reprezentnd fiecare component se adaug la fereastra Inspector.

3.

nainte de a trece mai departe, avem nevoie pentru a edita numele JLabels ", astfel c vom putea vedea efectul aliniamente vom stabili mai trziu.

Pentru a edita textul de afiare a JLabels: 1. 2. 3. Facei dublu clic pe JLabel prima pentru a selecta textul ei de afiare.

Titlu Tip: si apasati Enter.


Repetai paii 1 i 2, care intr Nickname: pentru proprietatea numele JLabel-al doilea. Numele JLabels "noi sunt afiate n forma i sunt deplasate ca urmare a limi lor editate, dup cum se arat n ilustraia urmtoare.

65

Introducerea Componente
Adesea, este necesar s se adauge o component ntre componente care sunt deja plasate ntr-un formular. Ori de cte ori cnd adugai o component ntre dou componente existente, Generatorul GUI automat ture-le pentru a face loc pentru noi componente. Pentru a demonstra acest lucru, vom introduce un JTextField ntre JLabels am adugat anterior, aa cum se arat n urmtoarele dou ilustraii.

Pentru a insera un JTextField ntre dou JLabels: 1. 2. n fereastra Palette, selectai textul Cmp componenta din categoria Swing. Mutai cursorul peste Titlu: i Nick: JLabels de pe rndul al doilea, astfel nct JTextField suprapunerile, ct i este aliniat la liniile de baz ale acestora. Dac ntmpinai dificulti de poziionare noul cmp de text, avei posibilitatea s fixai-l la orientarea stnga JLabel Pseudonim aa cum se arat n prima imagine de mai jos. Facei clic pentru a plasa JTextField ntre Titlu: i Nick: JLabels. JTextField fixeaz n poziie ntre cele dou JLabels. Schimbrile din extrema dreapt JLabel spre dreapta a JTextField pentru a veni n sugerat orizontale de offset.

3.

Avem nc mai trebuie s adugai un JTextField suplimentare pentru a forma n care se va afia porecla fiecare contact pe partea dreapta a formularului.

Pentru a aduga un JTextField: 1. 2. n fereastra Palette, selectai textul Cmp componenta din categoria Swing. Mutai cursorul n partea dreapt a etichetei Nickname i facei clic pe la locul cmpul de text. The JTextField fixeaz n poziie de lng JLabel n stnga acestuia. Pentru a redimensiona un JTextField: 1. 2. Glisai redimensionare mnerele de la Nick: JTextField etichetei le-ai adugat n sarcina anterior spre dreapta a anexnd JPanel. n cazul n care liniile directoare verticale alinierea apar sugernd marja dintre cmpul de text i marginile JPanel, eliberai butonul mouse-ului pentru a redimensiona JTextField.

66

Marginea JTextField dreptul fixeaz alinierea cu marja de JPanel's Edge recomandate i Builder GUI conchide comportament adecvat redimensionare.

Moving Forward
Alinierea este unul dintre aspectele cele mai fundamentale de a crea profesional-GUIs caut. n seciunea precedent am luat o bucatica de caracteristici alinierea IDE lui n timp ce adugnd JLabel i a componentelor JTextField la formularul nostru de ContactEditorUI. Apoi, vom arunca o privire mai n adncimea la caracteristicile de aliniere Generatorul GUI ca lucram cu diferitele componente cu alte avem nevoie pentru a aplicaiei noastre.

Componenta Aliniere
De fiecare dat cnd adugai un element la un formular, Builder GUI n mod eficient aliniaz-le, aa cum rezult din liniile directoare de aliniere care apar. Uneori este necesar, cu toate acestea, pentru a specifica relaii diferite ntre grupuri de componente, de asemenea. Mai devreme am adaugat patru JLabels de care avem nevoie pentru GUI ContactEditor noastre, dar am fcut, nu le-a alinia. Acum vom alinia dou coloane ale JLabels, astfel nct marginile lor dreptul de linia de sus.

Pentru alinierea componente: 1. 2. 3. Selectai Primul nume: i n titlul: JLabels pe partea stng a formularului. ), n bara de instrumente. Alternativ, avei posibilitatea s Facei clic pe dreapta alinia, n coloana buton ( facei clic dreapta fie una, i alege Aliniai> dreapta n coloana din meniul pop-up. Repetai acest lucru pentru Last Name: i Nick: JLabels, de asemenea. Poziiile JLabels "schimbare, astfel nct marginile dreptul de a textului de afiare a acestora sunt aliniate. Relaiile de ancorare sunt actualizate, indicnd faptul c componentele au fost grupate. nainte de a terminat cu JTextFields am adaugat mai devreme, avem nevoie s v asigurai c JTextFields doi vom introduce ntre JLabels sunt setate pentru a redimensiona n mod corect. Spre deosebire de JTextFields doi c am ntins la marginea din dreapta a formularul nostru, introdus comportamentul componentelor "resizeability nu este setat automat.

Pentru a seta componenta comportament resizeability: 1. 2. Control-clic pe cele dou componente introduce JTextField pentru a selecta lor n Builder GUI. Cu att JTextFields selectat, facei clic dreapta pe nici unul dintre ele i a alege Auto Redimensionarea> orizontale din meniul pop-up. JTextFields sunt stabilite pentru a redimensiona orizontal la rulare. Liniile directoare aliniere i indicatorii de ancorare sunt actualizate, furnizarea de feedback vizual al relaiilor componente. Pentru a seta componente care urmeaz s fie de aceeai dimensiune: 1. 2. Control-clic pe toate cele patru JTextFields n forma de a le selecta. Cu JTextFields selectat, facei clic dreapta pe oricare dintre ele i s alegei Set dimensiunea implicit din meniul pop-up. The JTextFields sunt toate setate la aceeai lime i indicatorii se adaug la marginea de sus a fiecrei, furnizarea de feedback vizual al relaiilor componente. Acum, avem nevoie pentru a aduga un alt JLabel descrie JComboBox care va permite utilizatorilor s selecteze formatul de informare a aplicaiei noastre ContactEditor vor fi afiate.

Pentru a alinia o JLabel la un grup de componente:

67

1. 2.

n fereastra Palette, selectai componenta etichet din categoria Swing. Mutai cursorul de mai jos prenumele i JLabels titlul de pe partea stng a JPanel. n cazul n care orientarea pare s indice c marginea JLabel noului dreapta este aliniat cu marginile din dreapta a grupului de componente de mai sus (cele dou JLabels), facei clic pentru a poziia componenta. The JLabel fixeaz ntr-un drept aliniat la poziia cu coloana de JLabels de mai sus, aa cum se arat n ilustraia urmtoare. GUI actualizeaz Builder liniile de alinierea statutului indicnd componente spaierea, precum i ancorarea relaii.

Ca i n exemplele anterioare, facei dublu clic pe JLabel pentru a selecta textul ei de afiare i apoi introducei Display Format: pentru numele afiat. Observai c atunci cnd JLabel fixeaz n poziie, celelalte componente pentru a permite trecerea de text mai lung de afiare.

Alinierea la momentul iniial


Ori de cte ori le adugai sau s mutai componente care include un text (JLabels, JTextFields, i aa mai departe), IDE sugereaz aliniamente care se bazeaz pe liniile de baz ale textului n componente. Cnd am introdus JTextField mai devreme, de exemplu, iniial sa a fost n mod automat aliniate la JLabels adiacente. Acum, vom aduga caseta combo care va permite utilizatorilor s selecteze formatul de informaii pe care a aplicaiei noastre ContactEditor vor fi afiate. Aa cum am aduga JComboBox, vom alinia de baz sale cu cea a textului JLabel lui. Comunicarea, din nou, liniile directoare de baz de aliniere care par a ne ajuta cu poziionare.

Pentru a alinia la liniile de baz de componente: 1. 2. n fereastra Palette, selectai Combo Box componenta din categoria Swing. Mutai cursorul imediat de la dreptul de JLabel tocmai le-am adugat. Cnd orientarea orizontal pare s indice c valoarea iniial JComboBox este aliniat cu linia de baz a textului n JLabel i distana dintre cele dou componente este sugerat, cu o orientare vertical, facei clic pe la poziia caseta combo. Componenta fixeaz ntr-o poziie aliniat cu valoarea iniial a textului n JLabel la stnga acestuia, dup cum se arat n ilustraia urmtoare. Generatorul GUI afieaz liniile care indic statutul de componente spaierea, precum i ancorarea relaii.

68

Pentru a redimensiona JComboBox: 1. 2. Selectai ComboBox n Builder GUI. Glisai redimensionare mner pe marginea JComboBox dreptul spre dreapta, pn la liniile directoare de aliniere apare sugernd preferat compensa ntre JComboBox i margini JPanel. Aa cum se arat n ilustraia urmtoare, marginea JComboBox dreptul fixeaz alinierea cu marja de JPanel's Edge recomandate i limea componenta este setat automat pentru a redimensiona cu formularul.

Modele de editare componenta este dincolo de domeniul de aplicare a acestui tutorial, asa ca, pentru

Trecerea n revist a ceea ce am nvat


Am ajuns un start bun cldire GUI noastre ContactEditor, dar hai sa iei cteva minute pentru recapitulare ceea ce am nvat n timp ce vom aduga cteva mai multe dintre componentele interfata noastra cere. Pn acum ne-am concentrat pe adugarea de componente pentru a GUI noastre ContactEditor folosind liniile directoare alinierea IDE de a ne ajuta cu poziionare. Este important s se neleag, totui, c o alt parte integrant din plasarea componentei este de ancorare. Dei nu am discutat-o inca, v-ai luat deja profita de aceast facilitate fr s o tie. Dup cum sa menionat anterior, ori de cte ori cnd adugai un element la un formular, IDE sugereaz aspectul int i de poziionare simt lui preferat cu liniile directoare. Odat plasate, componente noi sunt, de asemenea, ancorate la cel mai apropiat de margine de container sau componente pentru a se asigura c relaiile componente sunt meninute n timpul rulrii. n aceast seciune, vom concentra pe realizarea sarcinilor ntr-un mod mai simplificat subliniind totodat activitatea constructorul GUI este de a face n spatele scenei.

Adugarea, Alinierea, precum i ancorarea


Generatorul GUI v permite s se stabileasc formularele rapid i uor prin raionalizarea gesturi de flux de lucru tipic. Ori de cte ori s adugai un element la un formular, Builder GUI automat fixeaz-le n poziiile preferate i stabilete relaiile necesare nlnuirea astfel nct v putei concentra pe proiectarea forme, mai degrab dect lupta cu detaliile de implementare complicate.

Pentru a aduga, pentru a alinia, i s editai textul de afiare a unei JLabel: 1. 2. n fereastra Palette, selectai componenta etichet din categoria Swing. Mutai cursorul peste formularul de mai jos imediat E, cu JPanel partea de jos a lui titlu-mail. n cazul n care liniile directoare par s indice c este poziionat n colul din stnga sus al JPanel cu o marj mic la marginile de sus i din stnga, facei clic pe la locul JLabel. Facei dublu clic pe JLabel pentru a selecta textul ei de afiare. Apoi, de tip E-mail: si apasati Enter. JLabel fixeaz n poziia preferat n form, ancorat la marginile de sus i din stnga a anexnd JPanel. La fel ca nainte, un nod corespunztor reprezentnd componenta se adaug la fereastra Inspector. Pentru a aduga un JTextField: 1. n fereastra Palette, selectai textul Cmp componenta din categoria Swing.

3.

69

2.

Mutai cursorul imediat de la dreptul de Adresa E-mail etichet ne-am adugat. n cazul n care liniile directoare par s indice c valoarea iniial JTextField este aliniat cu linia de baz a textului n JLabel i a marjei dintre cele dou componente este sugerat, cu o orientare vertical, facei clic pentru a poziia cmpul de text. The JTextField fixeaz n poziie cu privire la dreptul de E-mail Adresa: JLabel i este legat la JLabel. Nod sale corespunztoare este, de asemenea, adaug la fereastra Inspector. Glisai redimensionare mnerul JTextField spre dreapta a anexnd JPanel pn la liniile directoare de aliniere apare sugernd compensa ntre JTextField i margini JPanel. Marginea JTextField dreptul fixeaz la orientarea alinierea indicnd marjele de preferat.

3.

Acum, avem nevoie pentru a aduga JList care va afia ntregul ContactEditor noastre lista de contacte.

Pentru a aduga i a redimensiona o JList: 1. 2. n fereastra Palette, selectai componenta Lista din categoria Swing. Mutai cursorul imediat de mai jos e-mail Adresa JLabel am adaugat mai devreme. n cazul n care liniile directoare par s indice c marginile JList lui de sus i din stnga sunt aliniate cu marjele de preferat de-a lungul marginii JPanel de stnga i JLabel de mai sus, facei clic pentru poziia JList. Glisai JList a redimensiona la mner dreapta spre dreapta a anexnd JPanel pn la liniile directoare de aliniere par s indice c este aceeai lime ca i JTextField de mai sus. JList fixeaz n poziia desemnat de ctre liniile directoare aliniere i nodul sale corespunztoare este afiat n fereastra de Inspector. Comunicarea, de asemenea, c forma extinde pentru a acomoda JList nou adugat. Din moment ce JLists sunt utilizate pentru a afia liste lungi de date, au de obicei nevoie de adugarea unui JScrollPane. Ori de cte ori cnd adugai o component care necesit o JScrollPane, Builder GUI adaug automat pentru tine. Deoarece JScrollPanes sunt componente non-vizuale, trebuie s se foloseasc de Inspector n scopul de a vizualiza sau edita orice JScrollPanes c Builder GUI creat.

3.

Componenta de calibrare
Acesta este adesea benefic pentru a stabili mai multe componente conexe, cum ar fi butoane n dialogurile modale, care urmeaz s fie de aceeai dimensiune pentru consisten vizuale. Pentru a demonstra acest pas vom aduga patru JButtons pentru a forma ContactEditor nostru care ne va permite s adugai, s editai i elimina intrrile individuale din lista noastre de contact, aa cum se arat n urmtoarele ilustraii. Apoi, vom stabili cele patru butoane care urmeaz s fie de aceeai dimensiune astfel nct acestea s poat fi uor recunoscut ca oferind funcionalitate conexe.

Pentru a aduga, pentru a alinia, i s editai textul afiat de butoane multiple: 1. 2. n fereastra Palette, selectai componenta Button. Mutai JButton peste marginea din dreapta a e-mail Adresa JTextField n JPanel mai mici. n cazul n care liniile directoare par s indice c iniial a JButton i marginea din dreapta sunt aliniate cu cea a JTextField, Shift-click pentru a loc primul buton de-a lungul marginea JFrame dreptul. Limea JTextField a diminurii populaiei active pentru a veni n JButton atunci cnd eliberai butonul mouse-ului. Mutai cursorul peste colul din dreapta sus a JList n JPanel mai mici. n cazul n care liniile directoare par s indice c marginile JButton lui de sus i dreapta sunt aliniate cu cea a JList, Shift-Click pentru locul al doilea buton de-a lungul marginii JFrame dreptul. Adugai dou JButtons suplimentare de mai jos cele dou pe care deja am adugat pentru a crea o coloan. A face anumite poziia JButtons, astfel nct distana ntre sugerat este respectat i coerente. If you forget to release the Shift key prior to positioning the last JButton, simply press the Escape key. Set the display text for each JButton. (You can edit a button's text by right-clicking the button and choosing Edit Text. Or you can click the button, pause, and then click again.) Enter Add for the top button, Edit for the second, Remove for the third, and As Default for the fourth. The JButton components snap into the positions designated by the alignment guidelines. The width of the buttons changes to accommodate the new names.

3.

4.

5.

70

Now that the buttons are positioned where we want them, we'll set the four buttons to be the same size for visual consistency as well as to clarify that they are related functionally.

To set components to the same size: 1. 2. Select all four JButtons by pressing the Control key while making your selection. Right-click one of them and choose Same Size > Same Width from the pop-up menu. The JButtons are set to the same size as the button with the longest name.

Indentation
Often it is necessary to cluster multiple components under another component such that it is clear they belong to a group of related functions. One typical case, for example, is placing several related checkboxes below a common label. The GUI Builder enables you to accomplish indenting easily by providing special guidelines suggesting the preferred offset for your operating system's look and feel. In this section we'll add a few JRadioButtons below a JLabel that will allow users to customize the way the application displays data. Refer to the following illustrations while accomplishing this or click the View Demo link following the procedure to view an interactive demonstration.

To indent JRadioButtons below a JLabel: 1. Add a JLabel named Mail Format to the form below the JList. Make certain the label is left aligned with the JList above.

71

2. 3.

In the Palette window, select the Radio Button component from the Swing category. Move the cursor below the JLabel that we just added. When the guidelines appear indicating that the JRadioButton's left edge is aligned with that of the JLabel, move the JRadioButton slightly to the right until secondary indentation guidelines appear. Shift-click to place the first radio button. Move the cursor to the right of the first JRadioButton. Shift-click to place the second and third JRadioButtons, being careful to respect the suggested component spacing. Make certain to release the Shift key prior to positioning the last JRadioButton. Set the display text for each JRadioButton. (You can edit a button's text by right-clicking the button and choosing Edit Text. Or you can click the button, pause, and then click again.) Enter HTML for the left radio button, Plain Text for the second, and Custom for the third. Three JRadioButtons are added to the form and indented below the Mail Format JLabel.

4.

5.

Now we need to add the three JRadioButtons to a ButtonGroup to enable the expected toggle behavior in which only one radio button can be selected at a time. This will, in turn, ensure that our ContactEditor application's contact information will be displayed in the mail format of our choosing.

To add JRadioButtons to a ButtonGroup: 1. 2. In the Palette window, select the Button Group component from the Swing category. Click anywhere in the GUI Builder design area to add the ButtonGroup component to the form. Notice that the

72

ButtonGroup does not appear in the form itself, however, it is visible in the Inspector's Other Components area. 3. 4. Select all three of the JRadioButtons in the form. In the Properties window, choose buttonGroup1 from the buttonGroup property combo box. Three JRadioButtons are added to the button group.

Making the Final Adjustments


We've managed to rough out our ContactEditor application's GUI, but there are still a few things remaining to do. In this section, we'll take a look at a couple of other typical layout tasks that the GUI Builder streamlines.

De finisare Up
Now we need to add the buttons that will enable users to confirm the information they enter for an individual contact and add it to the contact list or cancel, leaving the database unchanged. In this step, we'll add the two required buttons and then edit them so that they appear the same size in our form even though their display text are different lengths.

To add and edit the display text of buttons: 1. If the lower JPanel is extended to the bottom edge of the JFrame form, drag the bottom edge of the JFrame down. This gives you space between the edge of the JFrame and the edge of the JPanel for your OK and Cancel buttons. In the Palette window, select the Button component from the Swing category. Move the cursor over the form below the E-mail JPanel. When the guidelines appear indicating that the JButton's right edge is aligned with the lower right corner of the JFrame, click to place the button. Add another JButton to the left of the first, making certain to place it using the suggested spacing along the JFrame's bottom edge. Set the display text for each JButton. Enter OK for the left button and Cancel for right one. Notice that the width of the buttons changes to accommodate the new names. Set the two JButtons to be the same size by selecting both, right-clicking either, and choosing Same Size > Same Width from the pop-up menu. The JButton components appear in the form and their corresponding nodes are displayed in the Inspector window. The JButton components' code is also added to the form's source file which is visible in the Editor's Source view. Each of the JButtons are set to the same size as the button with the longest name. The last thing we need to do is delete the placeholder text in the various components. Note that while removing placeholder text after roughing out a form can be a helpful technique in avoiding problems with component alignments and anchoring relationships, most developers typically remove this text in the process of laying out their forms. As you go through the form, select and delete the placeholder text for each of the JTextFields. We'll leave the placeholder items in both the JComboBox and JList for a later tutorial.

2. 3. 4. 5. 6.

Previewing Your GUI


Now that you have successfully built the ContactEditor GUI, you can try your interface to see the results. You can preview your form as you work by clicking the Preview Form button ( allowing you to test it prior to building and running. ) in the GUI Builder's toolbar. The form opens in its own window,

73

74

MODULU IV Lucru ca baze de date in JAVA


Aplicaiile care folosesc baze de date sunt, n general, sunt aplicaii complexe folosite pentru gestionarea unor informatii de dimensiuni mai mari ntr-o maniera sigur si eficient. O baz de date reprezint o modalitate de stocare a unor informatii (date) pe un suport extern, cu posibilitatea regsirii acestora. Uzual, o baz de date este memorat ntr-unul sau mai multe fiiere. Crearea unei baze de date - se face cu aplicaii specializate oferite de productorul tipului respectiv de baz de date. Accesul la o baza de date - Se face prin intermediul unui driver specific tipului respectiv de baz de date. Acesta este responsabil cu accesul efectiv la datele stocate, fiind legatura ntre aplicaie i baza de date. JDBC (Java Database Connectivity) este o interfa standard SQL de acces la baze de date. JDBC este constituit dintr-un set de clase si interfee scrise n Java, furniznd mecanisme standard pentru proiectanii aplicatiilor de baze de date. Pachetul care ofer suport pentru lucrul cu baze de date este java.sql. Folosind JDBC este usor s transmitem secvene SQL ctre baze de date relaionale. Cu alte cuvinte, nu este necesar s scriem un program pentru a accesa o baza de date Oracle, alt program pentru a accesa o baza de date Sybase i aa mai departe. Este de ajuns s scriem un singur program folosind API-ul JDBC i acesta va fi capabil s trimit secvente SQL bazei de date dorite. Bineneles, scriind codul surs n Java, ne este asigurat portabilitatea programului. Deci, iat dou motive puternice care fac combinaia Java - JDBC demn de luat n seam. Fiind robust, sigur, usor de folosit, usor de nteles, Java este un excelent limbaj pentru a dezvolta aplicaii de baze de date. Tot ceea ce-i lipseste este modalitatea prin care aplicatiile Java pot comunica cu bazele de date. Aici vine nsa JDBC-ul care ofer acest mecanism. In linii mari, JDBC face trei lucruri: stabilete o conexiune cu o baza de date, trimite secvene SQL, prelucreaz rezultatele . Conectarea la o baza de date Procesul de conectare la o baz de date implica dou operatii: - ncarcarea n memorie a unui driver corespunztor - realizarea unei conexiuni propriu-zise O conexiune (sesiune) la o baz de date reprezint un context prin care sunt trimise secvene SQL i primite rezultate. Intr-o aplicaie pot exista mai multe conexiuni simultan la baze de date diferite sau la aceeasi baza. Clasele si interfetele responsabile cu realizarea unei conexiuni sunt: - clasa DriverManager, ce se ocup cu nregistrarea driverelor ce vor fi folosite n aplicatie - interfata Driver, pe care trebuie s o implementeze orice clasa ce descrie un driver clasa DriverPropertyInfo - interfata Connection, descrie obiectele ce modeleaz o conexiune propriu-zis cu baza de date

75

Incarcarea n memorie a unui driver Primul lucru pe care trebuie s-l fac o aplicaie n procesul de conectare la o baza de date este s ncarce n memorie clasa ce implementeaza driver-ul necesar comunicrii cu respectiva baza de date. Acest lucru poate fi realizat prin mai multe modalitati: 1. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver()); 2. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 3. System.setProperty("jdbc.drivers", "sun.jdbc.odbc.JdbcOdbcDriver"); 4. java -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver Specificarea unei baze de date Odat ce un driver JDBC a fost ncarcat n memorie, acesta poate fi folosit la stabilirea unei conexiuni cu o baz de date. Avnd n vedere faptul c pot exista mai multe drivere nregistrate n memorie, trebuie s avem posibilitea de a specifica pe lng identificatorul bazei de date si driverul ce trebuie folosit. Aceasta se realizeaz prin intermediul unei adrese specifice, numit JDBC URL, ce are urmatorul format:
jdbc:sub-protocol:identificator_baza_de_date

Cmpul sub-protocol denumete tipul de driver ce trebuie folosit pentru realizarea conexiunii si poate fi odbc, oracle, sybase, db2 i aa mai departe. Identificatorul bazei de date este un indicator specific fiecrui driver care specific baza de date cu care aplicaia dorete s interactioneze. In functie de tipul driver-ului acest identificator poate include numele unei maini gazd, un numr de port, numele unui fiier sau al unui director, etc. Realizarea unei conexiuni Metoda folosit pentru realizarea unei conexiuni este getConnection din clasa DriverManager si poate avea mai multe forme: Connection c = DriverManager.getConnection(url); Connection c = DriverManager.getConnection(url, username, password); Connection c = DriverManager.getConnection(url, dbproperies); O conexiune va fi folosit pentru: - crearea de secvene SQL ce vor fi folosite pentru interogarea sau actualizarea bazei - aflarea unor informaii legate de baza de date (meta-date) Clasa Connection asigur suport pentru controlul tranzaciilor din memorie ctre baza de date prin metodele commit, rollback, setAutoCommit . Efectuarea de secvente SQL Odat facut conectarea cu DriverManager.getConection(), se poate folosi obiectul Connection rezultat pentru a se crea un obiect de tip Statements, cu ajutorul cruia putem trimite secvente SQL ctre baza de date. Cele mai uzuale comenzi SQL sunt cele folosite pentru: - interogarea bazei de date (SELECT) 76

- actualizarea bazei de date (INSERT, UPDATE, DELETE) Connection c = DriverManager.getConnection(url); Statement s = c.createStatement(); ResultSet r = s.executeQuery ("SELECT * FROM un_tabel ORDER BY o_coloana"); s.executeUpdate("DELETE * FROM un_tabel"); Metoda executeQuery trimite interogari SQL ctre baza de date i primete rspuns ntrun obiect de tip ResultSet. Obinerea i prelucrarea rezultatelor Interfaa ResultSet
String query = "SELECT cod, nume FROM localitati ORDER BY nume"; ResultSet r = s.executeQuery( query ); while (r.next()) { System.out.println (r.getString ("cod") + "," + r.getString ("nume") ); }

Interfaa ResultSetMetaData
ResultSet r = s.executeQuery(" SELECT * FROM localitati" ); ResultSetMetaData rsmd = r.getMetaData(); System.out.println("Coloane: " + rsmd.getColumnCount());

Declaraii Declaraiilor sunt susinute de PreparedStatement i CallableStatement. interafaa Statement i subclasele sale

Interfaa Statement Definete metode pentru executarea declaraiilor SQL care nu conin parametrii de marcaj (markers) Realizarea unei conexiuni se face astfel:
Connection con = DriverManager.getConnection(url, user, password);

Dac se utilizeaz driverul JDBC-ODBC Bridge, URL-ul JDBC va ncepe cu jdbc:odbc. Cealalt parte a URL-ului este numele sursei de date sau a sistemului de baze de date. Crearea unei declaraii se face:
Statement stmt = con.createStatement();

Fiecare obiect conexiunepoate crea mai multe declaraii. Astfel pentru obiectul anterior se poate aduga:
Statement stmt1 = con.createStatement(); Statement stmt2 = con.createStatement();

77

Executarea obiectelor Statement depinde de tipul declaraiei SQL ce trebuie efectuat. Dac obiectul Statement este o interogare, se returneaz un obiect ResultSet prin metoda executeQuery(). Aceast metod creeaz obiectul ResultSet care conine datele returnate de interogare. Obinerea unor date din tabele se face:
Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery( select Nume, Prenume from Tabel ); while( rs.next()) { ... }

Utilizarea metodei execute() este condiionat de existena unui string SQL. n acest caz actulizeaz fie un cont, fie un obiect ResultSet . Valoarea returnat este true dac primul rezultat este un obiect ResultSet i false dac se actualizeaz un cont. Pentru crearea unui tabel se poate utiliza secvena: stmt.executeUpdate( CREATE TABLE Tabel (Nume char(20), Prenume char(20), Adresa char (20), matr int , anul_de_studiu int) ); Aplicatie pentru crearea unei tabele intr-o baza de date Access.
import java.sql.*; public class creare { public static void main(String args[]) { Connection con; // The connection to the database. try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con = DriverManager.getConnection("jdbc:odbc:stud"); Statement stmt = con.createStatement(); stmt.executeUpdate("CREATE TABLE produse" + "(cod_p INTEGER not null primary key," + "nume_produs VARCHAR(50)," + "cod_furnizor INTEGER," + "denumire_furnizor VARCHAR(50)," + "data_intrare DATE, pret INTEGER, cantitate FLOAT,"+ "EMAIL_ADDRESS VARCHAR(50))"); } catch(ClassNotFoundException e){ System.out.println(e.toString()); } catch(SQLException e){ System.out.println(e.toString()); } } }

Probleme propuse
Sa se realizeze o interfata cu care se realizeaza adaugarea de inregistrari in tabela cursuri.
78

Rezolvare
......... Connection dB=null; ResultSet results=null; String sql; String s1= jTextField1.getText(); String s2= jTextField2.getText(); String s3= jTextField3.getText(); int i,j; i=Integer.parseInt(s1); j=Integer.parseInt(s3); String url="jdbc:odbc:Facultate"; String d; try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundException e) { System.out.println("Nu s-a putut incarca driver-ul"); } try{ dB = DriverManager.getConnection(url); PreparedStatement pstmt = dB . prepareStatement ("INSERT INTO Cursuri(id_curs,nume_curs,nr_credite)" + "Values('" + i + "','" + s2 + "','" + j + "');"); pstmt.executeUpdate(); // System.out.println("Inregistrarea a fost adaugata cu succes."); jLabel4.setText(" Inregistrarea a fost adaugata cu succes"); } catch(SQLException e) { System.err.println("SQLException: " + e); }

2. Sa se realizeze o interfata cu ajutorul careia se cauta folosind un ID, un student, in tabela Studenti.
79

Rezolvare .........
Connection dB=null; ResultSet results=null; String sql; String s1=jTextField1.getText(); String url="jdbc:odbc:Facultate"; String num,d="",d1=""; int i,j=0,cr=0; i=Integer.parseInt(s1); System.out.println(i); try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch(ClassNotFoundException e) { System.out.println("Nu s-a putut incarca driver-ul"); } try { dB = DriverManager.getConnection(url); Statement stmt=dB.createStatement(); results=stmt.executeQuery ("SELECT nume,credite FROM Studenti WHERE "+"(nr_matricol='" +s1+ "') "); while(results.next()) { d=results.getString("nume"); d1=results.getString("credite"); cr=Integer.parseInt(d1); } jTextField2.setText(d); jTextField3.setText(d1); } catch(SQLException e) { System.err.println("SQLException: " + e); }

3 . Sa se realizeze o interfata, ca in figura alaturata, astfel incat fiecare buton sa contina si actiunile corespunzatoare.

80

4. Studiu de caz. Conectarea la o baz de date MySQL


MySQL

este un popular sistem Open Source de gestionare a bazelor de date relaionale

(RDBMS), frecvent utilizate n aplicaii de web, datorit vitezei sale, flexibilitate i fiabilitate. MySQL angajeaz SQL, sau coninute n bazele de date. Durata estimat: 30 minute
Continut Structured Query Language,

pentru accesarea i de prelucrare a datelor

Configurarea MySQL server Proprieti Pornirea server MySQL Crearea i Conectarea la baza de date Crearea tabelele bazei de date Lucrul cu tabelul de date Rularea unui script SQL A se vedea de asemenea, Pentru a urma acest tutorial, avei nevoie de urmtoarele produse software i resurse.

Software-ul sau de Resurse NetBeans IDE Java Development Kit (JDK) Baza de date MySQL

Versiune Required 6.5 sau 6.7 Java Version Versiunea 6 sau versiunea 5 Versiunea 5.x

Not: Acest ghid presupune c avei deja RDBMS MySQL instalat si configurat pe computer. Dac instalai pentru prima dat, v rugm s consultai documentaia oficial MySQL pentru ajutor.

Configurarea MySQL server Proprieti


NetBeans IDE 6.7 vine bundled cu suport pentru RDBMS MySQL. nainte de a putea accesa baza de date MySQL Server n NetBeans IDE, trebuie s configurai MySQL proprietile Server. 1. n fereastra Servicii, extindei nodul Baze de date, facei clic dreapta pe MySQL server nodul si alegeti Properties. MySQL server Proprieti deschide caseta de dialog.

81

2.

IDE localhost intr ca numele de gazd implicit de server i 3306 ca numr implicit serverul de port. Dac aceast informaie este corect, introduce numele de utilizator Administrator (dac nu este afiat). Not: Avei nevoie de acces administrative, pentru a putea crea i de a elimina baze de date.

3.

Introducei parola de administrator. Implicit este setat la gol. Not: O parola-martor poate fi, de asemenea, o parol.

4.

Facei clic pe fila Administrare Proprieti din partea de sus a casetei de dialog. Fila Admin Proprieti este apoi afiat, permindu-v s introducei informaii pentru controlul MySQL server.

5.

n calea / URL-ul pentru a admin domeniul instrument, tip sau rsfoii la locaia a cererii dvs., cum ar fi MySQL Administrare Admin Tool MySQL, phpMyAdmin, sau alt web-baz unelte de administrare. Not: mysqladmin este instrumentul de MySQL admin gsit n folderul bin din directorul de instalare MySQL. Este un instrument de linie de comand i nu Ideal pentru utilizarea cu IDE. Tip de nici un argument pentru instrumentul admin n domeniul Argumente.

6.

n cale pentru a porni de comand, tastai sau rsfoii la locaia de comanda a ncepe MySQL. Pentru a gsi comanda nceput, cutai mysqld n folderul bin din directorul de instalare MySQL. Not: binar recomandat pentru Unix i NetWare este mysql_safe Comand ncepe pot varia, de asemenea, n cazul n care MySQL a fost instalat ca parte a unei instalaii AMP. Tip de nici un argument pentru comanda ncepe n domeniul Argumente.

7.

Din cale pentru a opri cmpul de comand, tastai sau rsfoii la locaia de oprire comanda MySQL. Aceasta este, de obicei calea spre mysqladmin n folderul bin din directorul de instalare MySQL. n cazul n care comanda este

mysqladmin n domeniul Argumentele, de -u root stop de a acorda permisiuni de root pentru oprirea serverului.
8. Cnd ai terminat, fila Proprieti Admin ar trebui s semene cu figura de mai jos. Dac suntei satified cu configuraia dvs., facei clic pe OK.

82

Pornirea serverului MySQL

Dup ce asigurndu-se c MySQL Server Baz de date se execut pe maina dvs., facei clic dreapta pe Colecii de date> MySQL nod Server n fereastra Servicii i alegei Connect.

83

Atunci cnd sa extins, nodul MySQL server afieaz toate bazele de date disponibile MySQL.

Crearea i Conectarea la baza de date Instan


Un mod comun de a interaciona cu bazele de date se face printr-un editor SQL. NetBeans IDE are un editor de built-in SQL pentru acest scop. Editor SQL este, n general, accesibile prin intermediul Comandamentului Execute opiune din meniul clic dreapta din nodul conectare (sau de noduri copil nod conexiune's). Acum, c suntei conectat la serverul de MySQL, putei crea o instan nou baz de date utiliznd Editorul SQL. n sensul acestui tutorial, va crea o instan numit MyNewDatabase:

1.

n fereastra Servicii, facei clic dreapta pe nodul MySQL Server i alegei creez baza de date. Creai MySQL Baz de date deschide caseta de dialog.

2.

n Creare MySQL Baz de date caseta de dialog, tastai numele bazei de date noi. Vom folosi MyNewDatabase pentru acest tutorial. Las caseta de selectare neselectat n acest moment.

Not: Putei acorda, de asemenea, acces deplin la un utilizator dat. n mod implicit, numai utilizatorul admin are permisiunile pentru a efectua anumite comenzi. Drop jos list v permite s atribuii aceste permisiuni unui utilizator specificat. 3. Facei clic pe OK.

84

Baz de date nou apare sub MySQL server nod n fereastra Servicii.

Crearea tabelele bazei de date


Acum, c ai conectat la MyNewDatabase, putei ncepe explorarea cum s creai tabele, popula-le cu date, i modifica datele meninut n tabele. Acest lucru v permite s aruncai o privire mai atent la funcionalitatea oferite de Explorer Baza de date, precum i un sprijin NetBeans IDE pentru fiiere SQL.

MyNewDatabase este n prezent gol. n IDE, este posibil s adugai un tabel de baza de date, fie utiliznd Creaz mas de
dialog, sau de ctre le-a introdus o interogare SQL i rularea direct de la Editor SQL. Aici putei explora ambele metode: 1. 2. Utiliznd Editorul de SQL Utilizarea Creai Table Dialog

Utiliznd Editorul de SQL


1. n baza de date Explorer, extindei nodul conexiune MyNewDatabase ( ), Precum i faptul c exist trei subfoldere:

Mese, Vizualizari i proceduri. Alegei Execute Command din dosarul tabelele din baza de date Explorer. O pnz-martor se deschide n Editor SQL n fereastra principal .. n NetBeans IDE 6.7 Beta, atunci cnd v extindei-un nod n baza de date conexiune, noduri schem apar mai multe. 2. n editorul SQL, tastai n interogare de mai jos. Aceasta este o definiie tabel pentru tabelul de consilier care eti pe cale de a crea.

3. 4. 5. 6. 7. 8. 9. 10. 11.

CREATE TABLE Consilier ( SMALLINT id UNSIGNED NOT NULL AUTO_INCREMENT, VARCHAR Prenumele (50), VARCHAR nickname (50), VARCHAR NumeDeFamilie (50), de telefon VARCHAR (25), VARCHAR de e-mail (50), memberSince DATA DEFAULT '0000-00-00 ', PRIMARY KEY (id) );
Not: Interogri format n Editorul SQL sunt analizat i executat n Structured Query Language (SQL). SQL ader la stricte reguli de sintax care ar trebui s fie familiarizat cu atunci cnd se lucreaz ntr-un editor IDE lui. La execut o interogare, feedback-ul de la motorul de SQL este generat n fereastra de ieire indic dac execuia a avut succes sau nu.

12.

Pentru a executa interogarea, fie facei clic pe Run SQL (

), Buton pe bara de sarcini din partea de sus (Ctrl-Shift-E),

sau facei clic dreapta n cadrul Editor SQL i alegei Run Declaratie. IDE genereaza tabelul de consilier n baza de date, i primii un mesaj similar cu urmtorul n fereastra Output.

85

13.

Pentru a verifica modificrile, facei clic dreapta pe nodul tabelele din baza de date Explorer i alegei Refresh. Actualizeaz Actualizeaz opiune UI Explorer bazei de date component a strii actuale a bazei de date specificate. Reinei c nodul nou tabel Consilier ( ) Afieaz acum n conformitate cu tabelele din baza de date explorer. Dac ).

v extindei tabelul de nod putei vedea coloanele (cmpurile) le-ai creat, incepand cu cheia primar (

Lucrul cu tabelul de date


n scopul de a lucra cu datele de mas, putei face uz de Editor SQL n NetBeans IDE. Prin rularea interogri SQL pe o baz de date, putei aduga, modifica i terge datele meninute n structuri de baza de date. Pentru a aduga un nou record (RL) la tabel

Consilier, facei urmtoarele:


1. Alegei Execute Command din dosarul tabelele din baza de date Explorer. O pnz-martor se deschide n Editor SQL n fereastra principal. 2. n editorul SQL, tastai n interogare de mai jos.

3.

INSERT INTO Consilier VALUES (1, 'Ricky "," "The Dragon" "," Steamboat', '334 612-5678 ',' r_steamboat@ifpwafcad.com ', '1996-01-01')

4.

Pentru a executa interogarea, facei clic dreapta n cadrul Editor SQL i alegei Run Declaratie. n fereastra de iesire, putei vedea un mesaj care indic faptul c interogarea a fost executat cu succes.

5.

Pentru a verifica faptul c nou record a fost adugat la tabelul de consilier, n baza de date Explorer, facei clic dreapta pe tabelul de nodul Consilier i alegei vizualizarea de date. Un nou SQL Editor panoul se deschide n fereastra principal. Cnd alegei vizualizarea de date, o interogare pentru a selecta toate datele din tabelul este generat automat n regiunea superioar a Editor SQL. Rezultatele declaraie sunt afiate ntr-o vizualizare tabel n regiunea inferioar. n acest exemplu, afieaz tabelul de consilier. Reinei c un rnd nou a fost adugat cu datele pe care tocmai ai furnizat de interogare SQL.

86

Rularea unui script SQL


O alt modalitate de a gestiona datele tabel, n NetBeans IDE este prin rularea unui script de externe, SQL direct n IDE. Dac ai creat un script de SQL n alt parte, avei posibilitatea s deschidei pur i simplu n NetBeans IDE i a alerga it n Editorul de SQL. Pentru scopuri demonstrative, ifpwafcad.sql descrcai i a salva it ntr-o locaie de pe computer. Acest script creeaz dou tabele similar cu ceea ce tocmai ai creat de mai sus (Consilier i sub rezerva), i imediat le populeaz cu date.

Pentru ca script-ul suprascrie aceste tabele n cazul n care acestea exist deja, a terge Consilier i tabele Subiect acum, astfel, devine evident c tabele noi sunt create atunci cnd rularea script-ului. Pentru a terge tabele: 1. 2. Facei clic dreapta pe nodul selectat tabelul din baza de date Explorer i alegei Delete. n Confirmare tergeri obiect de dialog care se afieaz, facei clic pe Da. Reinei c nodul de mas este n mod automat eliminat din baza de date Explorer. Not: Putei terge tabelul de mai mult dect nainte de acest Apare caseta de dialog. Pentru a executa script-ul SQL pe MyNewDatabase: 1. Alegeti File> Open File din meniul IDE principal. n browser-ul de fiiere naviga la locaia unde ai salvat anterior

ifpwafcad.sql i facei clic pe Open. Script-ul se deschide automat n Editorul de SQL.


2. A face conexiunea la MyNewDatabase sigur c este selectat din meniul drop-down de conectare n bara de instrumente din partea de sus a editorului.

3.

Facei clic pe Run SQL (

), Buton pe task bar Editor SQL lui. Script-ul este executat mpotriva baza de date selectat,

precum i orice feedback-ul este generat n fereastra de iesire. 4. Pentru a verifica modificrile, facei clic dreapta pe nodul conexiunea MyNewDatabase n fereastra Durata i alegei Refresh. Actualizeaz Actualizeaz opiune UI Explorer bazei de date component a strii actuale a bazei de date specificate. Reinei c cele dou tabele noi de la script-ul SQL acum o afiai ca noduri tabelul de la MyNewDatabase n Explorer baza de date. 5. Alegei vizualizarea de date de la meniul clic dreapta a unui nod tabel selectat pentru a vedea datele coninute n tabele noi. n acest mod, putei compara datele de tabel cu datele cuprinse n script-ul SQL pentru a vedea c ele se potrivesc.

87

Modulul V. APPLET-URI.
Un applet reprezint un program Java care gestioneaz o suprafa de afiare care poate fi ncrcat n pagini de Web. Appleturile Java au extensia class i se utilizeaz n general pentru a insera n pagini web aplicaii, animaii, jocuri etc. Diferena exenial dintre o aplicaie i un applet este c un applet nu poate fi executat independent aa cum ruleaz o aplicaie, el va fi executat prin intermediul browserului n care este ncarcata pagina Web ce contine appletul respectiv. O aplicatie independenta este executata prin apelul interpretorului java, avnd ca parametru numele clasei principale a aplicatiei, clasa principala fiind cea care contine metod main. Ciclul de viata al unui applet este complet diferit, fiind dictat de evenimentele generate de ctre browser la vizualizarea documentului HTML ce contine appletul. Pachetul care ofera suport pentru crearea de appleturi este java.applet.Limbajul Java ofer clase dedicate acestor tipuri de aplicaii cum ar fi: java.applet.Applet i javax.swing.Japplet. Executia unui applet ncepe n momentul n care un browser afiseaza o pagina Web n care este inclus appletul respectiv. Etapele pentru ncrcare a unui apllet n browser sunt: Incarcarea in memorie este realizata de o instanta a clasei principale a appletului i ncarcata n memorie; Initializarea - apeleaza metod init cere permite initializarea diverselor variabile, citirea unor parametri de intrare etc; Pornirea - utilizeaza apelata metod start; Executia propriu-zisa - reprezinta interactiunea dintre utilizator i componentele afisate pe suprafata appletului; Oprirea temporara daca utilizatorul paraseste pagina Web n care ruleaz appletul este apelata metod stop a acestuia, oferindu-se astfel posibilitatea s se opreasca temporar ct timp nu este vizibil, pentru a nu consuma inutil din timpul procesorului. Acelasi lucru se ntmpla daca fereastra browserului este minimizata. In momentul cnd pagina Web ce contine appletul devine activa, se reapeleaza metod start. Oprirea definitiva - nchiderea instantelor browserului folosit pentru vizualizare; appletul este eliminat din memorie i va fi apelata metod destroy a acestuia, pentru a-i permite s elibereze resursele detinute. Apelul metodei destroy este ntotdeauna precedat de apelul lui stop. Metodele specifice appleturilor(init, start, stop i destroy) sunt apelate automat de browser i nu trebuiesc apelate explicit. teoretic, aceasta metod ar trebui s se apeleze o singura data, la prima afisare a appletului n pagina, dar la unele browsere, este posibil ca ea s se apeleze de mai multe ori. start se folosescre imediat dupa initializare cat i de fiecare data cnd appletul redevine activ, dupa o oprire temporara. cnd appletul nu mai este vizibil (pagina Web nu mai este vizibila, stop fereastra browserului este minimizata etc) dar i nainte de metod destroy. destroy se apeeaza la nchiderea ultimei instante a browserului ce a ncarcat n memorie clasa principala a appletului. init
88

Structura unui applet este


import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class StructuraApplet extends Applet { public void init() { } public void start() { } public void stop() { } public void destroy() { } public void paint(Graphics g) { } }

Exemplu de fiier surs care are extensia java i reprezinta un applet.


import java.applet.*; import java.awt.*; public class imagini extends Applet { private Image imagine; public void init() { imagine =getImage(getDocumentBase(), i.jpg); } public void paint(Graphics g) {boolean b=g.drawImage(imagine, 200,20,200,100,this); this.setBackground(Color.CYAN); g.drawString(Aplicatie Applet,200, 140); } }

n urma operaiei de compilare rezult fiierul cu extensia .class care este ncarcat n pagina i interpretat de browser. Vezi figura 5.1 i 5.2.

89

Figura 5.1 Applet rulat n Netbeans

Figura 5.2 Applet ncarcat n browser

Codul surs al fiierului HTML este cel de mai jos. Fiierul a fost generat de ctre aplicaia Netbeans, dar acesta putea s fie scris i de ctre utilizator. Principalul element al acestui fiier este eticheta <APPLET codebase=classes code=aa/imagini.class width=350 height=200></APPLET> care are tributele: codebase, code, with i height.
90

<HEAD> <TITLE>Applet HTML Page</TITLE> </HEAD> <BODY> <!-*** GENERATED applet HTML launcher - DO NOT EDIT IN 'BUILD' FOLDER *** If you need to modify this HTML launcher file (e.g., to add applet parameters), copy it to where your applet class is found in the SRC folder. If you do this, the IDE will use it when you run or debug the applet. Tip: To exclude an HTML launcher from the JAR file, use exclusion filters in the Packaging page in the Project Properties dialog. For more information see the online help. --> <H3><HR WIDTH=100%>Applet HTML Page<HR WIDTH=100%></H3> <P> <APPLET codebase=classes code=aa/imagini.class width=350 height=200></APPLET> </P> <HR WIDTH=100%><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT> </BODY> </HTML>

n figura 5.1 se poate observa pricipalele metode specifice unui Applet. Un applet nu poate s: citeasc sau scrie documente pe calculatorul client; deschid conexiuni cu alte maini , dect pe cea de pe care provine host; porneasc programe ncrcate pe maina client citeasca diverse proprietati ale sistemului de operare al clientului Exemplu de Applet care conine 3 variabile a, b i c ale cror valori vor fi transmise prin intermediu etichetei <param> folosit n carul etichetei <APPLET>.
import java.applet.*; import java.awt.*; public class GetParam extends Applet { String a,b,c; public void init(){ if((a=getParameter(arg1))==null) a=nu exista aceste parametru a in documentul testat; if((b=getParameter(arg2))==null) b=nu exista aceste parametru b in documentul testat; if((c=getParameter(arg3))==null) c=nu exista aceste parametru c in documentul testat; if((a=getParameter(arg1))==null) a=nu exista aceste parametru a in documentul testat; } public void paint(Graphics g) { g.drawString(a=+a,20,20); g.drawString(b=+b,20,40); g.drawString(c=+c,20,60); }} 91

Prin ncarcarea n browser a fiierului .class rezult imaginea din figura 5.3

Cosul surs a fiierului HTML n care se transmit valorile paramentrilor este:


<HTML> <HEAD> </HEAD> <BODY> <APPLET codebase=classes code=GetParam.class width=50% height=50%> <param name=arg1 value=primul parametru> <param name=arg2 value=valoare 2> <param name=arg3 value=valoare 3> </APPLET> </BODY> </HTML> Aplicatii

Sa se testeze exemplele urmatoare, sa se personalizeze si apoi sa se explice cel putin 10 metode si proprietati folosite in realizarea acestora.
Exemplu 1 import java.applet.Applet; import java.lang.*; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.*; public class listacomplexa extends Applet implements ActionListener{ private List lista; private Button buton; public void init() {lista=new List(3,true); lista.add("red"); lista.add("blue"); lista.add("green"); lista.add("yellow"); add(lista); buton=new Button("Afiseaza"); add(buton); buton.addActionListener(this); 92

} public void actionPerformed(ActionEvent e) {if(e.getSource()==buton) {String[] sel=lista.getSelectedItems(); String sir=" "; sir=sir+sel[0]+" "+sel[1]+" "+sel[2]; showStatus(sir); } } } Exemplu 2 import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class listasimpla extends Applet implements ItemListener{ private Choice lista; public void init() {lista=new Choice(); lista.add("red"); lista.add("green"); lista.add("blue"); add(lista); lista.addItemListener(this); } public void itemStateChanged(ItemEvent e) {if(e.getSource()==lista) {String selectat=e.getItem().toString(); showStatus("Starea"+" "+selectat); } } } Exemplu 3 import java.applet.Applet; import java.awt.*; import java.awt.event.*; import java.awt.Graphics; public class panza extends Applet { private Canvasnou canvas=new Canvasnou(); public void init() {canvas.setBackground(Color.gray); canvas.setSize(200,200); add(canvas); } 93

public class Canvasnou extends Canvas { public void paint(Graphics g) { g.drawString("mesaj",15,15);} } } Exemplu 4 import java.applet.Applet; import java.awt.event.ActionListener; import java.awt.event.*; import java.awt.*; public class text extends Applet implements ActionListener{ private TextArea mesaj; private Button text,afisare; public void init(){ mesaj=new TextArea(5,5); add(mesaj); text=new Button("selectie"); add(text); text.addActionListener(this); afisare=new Button("afisare"); add(afisare); afisare.addActionListener(this); } public void actionPerformed(ActionEvent e) {if(e.getSource()==text){ String textselectat=mesaj.getSelectedText(); String sir="sirul selectat este"+textselectat; showStatus(sir); } if(e.getSource()==afisare){ String texttot=mesaj.getText(); String sir="sirul este"+texttot; showStatus(sir); } } Exemplu 5 package p1; import java.applet.Applet; import java.awt.Color; import java. awt.Graphics; public class triunghi extends Applet{ public void paint (Graphics g) 94

{g.setColor(Color.blue); deseneaza_triunghi(g,20,20,10,11); g.drawString("Aria este"+ aria_triunghi(10,11),30,30); g.setColor(Color.magenta); deseneaza_triunghi(g,100,100,60,70); g.drawString("Aria este"+ aria_triunghi(60,70),150,180); } private void deseneaza_triunghi(Graphics g, int bottomx, int bottomy, int baza, int inaltime) {int rightx = bottomx + baza; int topx = bottomx + baza/2; int topy = bottomy + inaltime; g.drawLine(bottomx, bottomy, rightx, bottomy); g.drawLine(rightx, bottomy, topx, topy); g.drawLine(topx, topy, bottomx, bottomy); } private void deseneaza_dreptunghi(Graphics g){ g.drawRect(10,10,30,30); } private float aria_triunghi(int baza, int inaltime) { float aria = (baza * inaltime)/2; return aria; } }}

95

Modulul VI. Java Server Pages (JSP)


Tehnologia Java Server Pages (JSP) este cea mai popular metod de a crea interfee Web pentru aplicaiile care ruleaz pe platforma Java, creat de Sun. Ea se bazeaz pe tehnologia numit Java Servlets fiind, de fapt, o completare a acesteia in ideea crerii ct mai facile a paginilor Web dinamice. Punctul central al tehnologiei o reprezint aa-numitele pagini JSP care sunt, practic, fiiere text care combina descrieri HTML cu cod Java. Paginile JSP sunt gestionate si accesibile prin intermediul unui server de aplicaii. Acesta primete cereri venite prin HTTP de la un browser Web. Dac o cerere refer o pagin JSP, serverul prelucreaz local pagina respectiv i, n funcie de coninutul acesteia, genereaz dinamic o pagin HTML pe care o trimite, ca rspuns, browser-ului. Este important de reinut faptul c toate prelucrrile legate de paginile JSP se fac pe partea de server, acestea nefiind niciodat transmise in forma original ctre client. In plus, trebuie reinut faptul ca serverul de aplicaii include si o main virtual Java in care ruleaz att codul Java ntlnit in paginile JSP ct si obiectele iniiate de acesta. Procesul de prelucrare pe partea de server a paginilor JSP presupune, de fapt, crearea unor clase Java Servlet care urmeaz regulile scrise in pagina JSP i care includ codul Java din acestea. Clasele astfel generate sunt apoi compilate si rulate in maina virtual amintit. Un alt element important este c orice aplicaie Web JSP trebuie s fie instalata (deployed) in serverul de aplicaii nainte de a putea fi rulata. Instalarea presupune copierea paginilor JSP si a claselor Java folosite de acestea n locaii bine stabilite de ctre serverul de aplicaie utilizat, eventual intr-o form arhivat de tip .jar (Java Archive) sau .war (Web Archive). Un JSP este un document Web care specific cum va fi prelucrat o cerere i modul de generare a unui rspuns. O pagin JSP conine o parte static, care reprezint un ablon al documentului care se genereaz, i una dinamic, dat de elemente specifice JSP. Acestea sunt: Directive standard; Aciuni standard; Elemente de scripting; Tag-uri proprii. Dac servlet-urile sunt clase care genereaz documentele Web, JSP-urile sunt documente Web care conin secvene de cod Java. De aceea, JSP-urile sunt considerate ca o extensie a paginilor Web obinuite. Aceast tehnologie este similar cu PHP i ASP.NET. Avantajul adus de JSP fa de servlet-uri l constituie uurina dezvoltrii. Serverul Web se ocup de transformarea acestora n servlet-uri i apoi de compilarea lor. Acest lucru se realizeaz fie la ncrcarea aplicaiei de ctre serverul Web, fie la prima cerere a paginii JSP. Avnd n vedere faptul c un JSP este transformat in servlet, putem spune c JSP-ul este o extensie a servlet-urilor. Tehnologia JSP, permite definirea de biblioteci, de noi tag-uri (similare celor din XHTML) de ctre programator. Aceste biblioteci pot fi utilizate ulterior i n cadrul altor aplicaii. Mai mult, se separ rolurile programatorului i designerului: programatorul va stabili care sunt tag-urile, iar designerul le va include n documentele Web, acesta nu va mai lucra cu cod Java. Astfel, se separm partea de funcionalitate (motorul aplicaiei) de partea de vizualizare (interfaa cu utilizatorul).

96

O aplicaie Web poate conine att servlet-uri ct i JSP-uri. Recomandarea este ca paginile JSP s fie stocate n directorul web al aplicaiei n momentul dezvoltrii. Dac oricrui document Web i schimbm extensia n jsp, va deveni un document JSP valid. Elemente de baz Pentru inserarea de elemente JSP se pot utiliza marcatori XML sau specifici JSP. In practic, se folosesc mai mult cei specifici JSP, datorit uurinei de utilizare. Formatul XML ofer avantajul de a putea valida i procesa pagina JSP cu un procesor XML obinuit. Fiierele care conin elemente specifice JSP se numesc pagini JSP, iar paginile JSP care sunt totodat i documente XML se numesc documente JSP. Pentru documentele JSP se mai folosete si extensia jspx. Comentariile n JSP sunt de forma: <%-- comentariu --%> Spre deosebire de comentariile X(HT)ML, acestea nu vor fi incluse n pagina generat. Mai mult, interiorul comentariilor JSP nu este procesat. Directive Directivele sunt mesaje ctre containerul JSP i nu genereaz output (informaii pentru rspuns). Sintaxa pentru directive este urmtoarea: <%@ directive %> sau <jsp:directive.directiva /> Directiva page poate fi utilizat pentru a importa pachete i clase Java (la fel ca instruciunea import), pentru a stabili o sesiune, a indica adresa paginii pentru eroare sau pentru a indica dac pagina curent este pagin de raportare a erorilor. Atributele cele mai des utilizate ale directivei page sunt urmtoarele: import Specific lista pachetelor i claselor care vor fi incluse pentru pagina curent. Separatorul utilizat este virgula, iar pachetele implicite sunt java.lang.*, javax.servlet.*, javax.servlet.jsp.* i javax.servlet.http.*. session Indic dac se utilizeaz sesiuni HTTP. Valoarea implicit este true. buffer Stabilete dimensiunea buffer-ului pentru ieire, exprimat in kilooctei. Valoarea implicita este de cel puin 8, iar sufixul kb este obligatoriu. n cazul n care nu se dorete utilizarea unui buffer, se va folosi none. Buffer-ele sunt utilizate pentru creterea performanelor operaiunilor cu dispozitivele periferice n general. n cazul paginilor JSP, este recomandat lucrul fr buffer sau golirea frecvent a acestuia atunci cnd aplicaia client necesit recepionarea imediat a datelor generate. autoFlash Indic dac buffer-ul se golete automat. Valoarea implicita este true. info Stabilete o descriere a paginii curente. Aceasta se poate obine din clasa transformat n urma apelului metodei Servlet.getServletInfo( ). isErrorPage Stabilete dac pagina curent este utilizat pentru raportarea erorilor. Doar n cazul afirmativ va fi disponibil variabila exception, care va furniza informaii referitoare la eroarea aprut. Valoarea implicit este false. errorPage Indic url-ul paginii pentru tratarea excepiilor neprinse. ContentType Stabilete tipul MIME pentru documentul generat de ctre JSP. Tipul implicit este text/html. pageEncoding Stabilete setul de caractere utilizat pentru scrierea paginii JSP. n cazul n care setul specificat nu este disponibil, se va utiliza ISO-8859-1. Directiva include permite inserarea altor fiiere n paginile JSP. Aceasta este util pentru inserarea mediilor de navigare, a antetului i subsolului paginilor comune pentru ntregul site (sau pentru mai multe pagini). Astfel, se poate administra mult mai uor site-ul, ntruct se evit duplicarea datelor: o modificare ntr-un singur fiier va fi vizibil n mai 97

multe pagini ale site-ului. Se pot include i fiiere JSP, iar acestea, la rndul lor, vor fi procesate. Singurul atribut al directivei include este file i acesta indic locaia fiierului ce se dorete a fi inclus, de exemplu: <%@include file=antet.html %> Directiva taglib permite includerea unei biblioteci de tag-uri definite de programator. Se specific URI-ul corespunztor bibliotecii de tag-uri (atribut uri) i prefixul utilizat n pagina Web (atributul prefix). Declaraii Marcatorii pentru declaraii permit specificarea de atribute i metode pentru clasa servlet-ului generat. Sintaxa este urmtoarea: <%! declaraii . %> sau, n format XML: < jsp:declaration> declaraii </jsp:declaration> Exemple de declaraii: <%! int lungime %> sau <%! int getLungime( ) {return lungime;} %> Expresii Expresiile JSP permit inserarea n fluxul de ieire a unei valori rezultate n urma evalurii unei expresii Java. Sintaxa este: <%= expresieJava %> sau, n format XML <jsp:expression> expresieJava </jsp:expression>. Expresia nu trebuie s se termine cu punct i virgul. Exemplu: <%= (new java.util.Date( ) ).toLocalString( ) %>. Aceast expresie insereaz data curent. Scriplet-uri Pentru utilizarea de cod Java se vor folosi scriplet-uri, pentru c n acelai fiier vor exista att codul corespunztor documentului Web (pentru partea de vizualizare), ct i cod Java. n locul lor se pot utiliza tag-uri definite n biblioteci proprii. Exemplu de scriplet: <%String categorie=request.getParameter(categorie); categorii=baza_date.obtineCategorii( ); %> Iniializarea i terminarea unui JSP Mai nti se executa metoda jspInit( ) utilizat pentru iniializarea datelor, iar ultima metod este jspDestroy( ) folosit pentru eliberarea resurselor. Domenii de vizibilitate Pentru formularea rspunsului pentru navigatoarele Web se face apel la o serie de obiecte. Acestea sunt create n cadrul paginii JSP sau sunt predefinite i pot avea urmtoarele domenii de vizibilitate: pagin (engl., page) obiectele sunt vizibile doar n cadrul paginii curente; cerere (engl., request) obiectele pot fi accesate pe tot parcursul rezolvrii cererii: n pagina curent, n paginile care sunt incluse i n paginile la care s-a realizat redirectarea; sesiune (engl., session) obiectele vor fi disponibile de-a lungul ntregii sesiuni; aplicaie (engl., application) obiectele sunt vizibile n toat aplicaia i pentru toate sesiunile. Obiecte implicite Tehnologia JSP pune la dispoziia programatorilor o serie de obiecte implicite. Acestea sunt prezentate n tabelul de mai jos:

98

Tabelul 1. Obiectele tehnologiei JSP


Obiect out request response session pageContext page application exception Tip javax.servlet.jsp.JspWriter javax.servlet.ServletRequest javax.servlet.ServletResponse javax.servlet.http.HttpSession javax.servlet.jsp.PageContext java.lang.Object javax.servlet.ServletContext java.lang.Throwable Domeniu de vizibilitate pagin cerere pagin sesiune pagin pagin aplicaie pagin Descriere Obiect utilizat pentru scriere n fluxul de ieire ine informaii la cererea formulat ine informaii referitoare la rspunsul construit Informaii referitoare la sesiunea curent Contextul paginii JSP curente Referin la pagina curent Informaii despre aplicaie Excepia neprins. Doar n paginile de tratare a erorilor

Clasa JspWriter este o clas abstract i derivat din java.io.Writer i conine n plus urmtoarele metode: print( ) i println( ) pentru afiarea tipurilor primitive, a irurilor de caractere i a obiectelor; newLine( ) introduce caracterul pentru trecerea la o linie nou; clear( ) i clearBuffer( ) sunt folosii pentru tergerea informaiilor din buffer; flush( ) golete buffer-ul trimind datele la client; isAutoFlush( ) indic dac buffer-ul este golit automat; getRemaining( ) returneaz numrul de octei din buffer care ateapt s fie trimisi; getBufferSize( ) returneaz dimensiunea buffer-ului exprimat n octei; close( ) inchide fluxul. De asemenea, clasa PageContext este abstract i extinde clasa JspContext. Cea mai utilizat metod este getServletContext( ), care permite accesarea contextului servlet-ului obinut n urma transformrii paginii JSP curente.

99

MODULUL VII. ALTE APLICATII


1. Se citeste numarul zilei si se afiseaza ziua corespunzatoare

codul sursa asociat butonului Transformare este: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { int nrZi; nrZi=Integer.parseInt(jTextField1.getText()); switch(nrZi) { case 1: jTextField2.setText("Luni"); break; case 2: jTextField2.setText("Marti"); break; case 3: jTextField2.setText("Miercuri"); break; case 4: jTextField2.setText("Joi"); break; case 5: jTextField2.setText("Vineri"); break; case 6: jTextField2.setText("Sambata"); break; case 7: jTextField2.setText("Duminica"); break; default: jTextField2.setText("Nu ati dat o zi a saptamanii valida! (17)"); break; } } codul sursa asociat butonului Clear este: private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { jTextField1.setText(""); jTextField2.setText(""); } codul sursa asociat butonului Exit este: private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { System.exit(0); }
100

2. O aplicatie de tip calculator

Setul de comenzi atasate butoanelor este: private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) { float nr1,nr2,rezultat; nr1=Float.parseFloat(jTextField1.getText()); nr2=Float.parseFloat(jTextField2.getText()); rezultat=1; for(int i=1;i<=nr2;i++) rezultat=rezultat*nr1; jTextField3.setText(String.valueOf(rezultat)); } private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) { float nr1,nr2,rezultat; nr1=Float.parseFloat(jTextField1.getText()); nr2=Float.parseFloat(jTextField2.getText()); rezultat=nr1/nr2; jTextField3.setText(String.valueOf(rezultat)); } private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { float nr1,nr2,rezultat; nr1=Float.parseFloat(jTextField1.getText()); nr2=Float.parseFloat(jTextField2.getText()); rezultat=nr1*nr2; jTextField3.setText(String.valueOf(rezultat));
101

} private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { float nr1,nr2,rezultat; nr1=Float.parseFloat(jTextField1.getText()); nr2=Float.parseFloat(jTextField2.getText()); rezultat=nr1-nr2; jTextField3.setText(String.valueOf(rezultat)); } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { float nr1,nr2,rezultat; nr1=Float.parseFloat(jTextField1.getText()); nr2=Float.parseFloat(jTextField2.getText()); rezultat=nr1+nr2; jTextField3.setText(String.valueOf(rezultat)); } private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) { jTextField1.setText(""); jTextField2.setText(""); jTextField3.setText(""); } 3. Aplicatie de convertire grade Celsius in Fahrenheight

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { int temp; temp=(int)(Double.parseDouble(jTextField1.getText())*1.8+32); jLabel2.setText(temp+" Fahrenheit");

102

4. Scrieti setul de comenzi pentru realizarea unei ferestre de dimensiune 300, 100 care
va arata ca in figura alaturata.

import javax.swing.*; import java.awt.*; public class a1 { public static void main(String[] args) { JFrame f = new JFrame("Implementarea Inteferetelor Grafice"); JButton b1 = new JButton("1"); JButton b2 = new JButton("2"); JButton b3 = new JButton("3"); JButton b4 = new JButton("4"); JButton b5 = new JButton("5"); Container cp = f.getContentPane(); cp.setLayout(new FlowLayout()); cp.add(b1); cp.add(b2); cp.add(b3); cp.add(b4); cp.add(b5); f.setSize(300, 100); f.setVisible(true); } } 5. Scriei setul de comenzi pentru realizarea unei aplicaii Java care va creea o fereastr ca cea din figura alturat. Explicai instruciunile folosite pentru definirea elementelor JButton i JRadioButton

import javax.swing.*; import java.awt.*; import java.awt.event.*; class Butoane extends JPanel { public Butoane() { JButton b1 = new JButton("Seria A"); JButton b2 = new JButton("Seria B"); this.setLayout(new GridLayout(1,0)); add(b1); add(b2); } } class ButoaneRadio extends JPanel { public ButoaneRadio() { 103

// Creare radio butoane JRadioButton butonAlb = new JRadioButton("Sambata 10-18"); // butonAlb.setSelected(true); JRadioButton butonRosu = new JRadioButton("Duminica 10-18"); // Gruparea butoanelor ButtonGroup group = new ButtonGroup(); group.add(butonAlb); group.add(butonRosu); // Adaugarea butoanelor add(butonAlb); add(butonRosu); } } public class Desen_Aplicatie extends JFrame { public static void main(String args[]) { Desen_Aplicatie app = new Desen_Aplicatie(); Butoane panouButoane = new Butoane(); ButoaneRadio panouButoaneRadio = new ButoaneRadio(); JPanel panou = new JPanel(); panou.add(panouButoane); panou.add(panouButoaneRadio); app.getContentPane().add(panou); app.pack(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); app.show(); } } 6. Problema propusa: sa se realizeze interfata de mai jos si sa se scrie actiunile corespunzatoare butoanelor din aceasta.

104

Bibliografie
1. Stefan Tanasa, Cristian Olaru, Stefan Andrei, "Java de la 0 la expert", Editura Polirom, 2003 2. Jim Keogh Java fara mistere, Ed Rosetti Educational, 2004 3. E. Hewitt, Java SOA Cookbook, OReilly, 2009. 4. ***, Java 2 Platform, Enterprise Edition Specification, Sun Microsystems, Tech. Rep., 2003; 5. N. Kassem, A. Vijendran, and Rajiv.Mordani, Java API for XML Messaging (JAXM), Sun Microsystems, 6. http://download.oracle.com/javase/tutorial/uiswing/ 7. http://oreilly.com/catalog/9780596004088 8. http://oreilly.com/catalog/9780596004088/preview#preview 9. http://www.oracle.com/technetwork/java/index.html 10. http://www.netbeans.org.

105

Nota final care se va acorda fiecrui student va conine urmtoarele componente n procentele menionate: - colocviu final 60% - lucrari practice/ proiect, etc. 30% (fiecare student, va realiza un PROJECT care va cuprinde minim 15 aplicatii practice, selectate din cele 7 module ale suportului de curs. Aplicatiile vor fi //comentate si personalizate. - teme de control 10% (la alegere, se va rezolva, un studiu de caz, de la cele 8 adrese web-enumerate mai jos. Explicarea modului de lucru, se va face intr-un document de forma nume_student.pdf)
1. 2. 3. 4. 5. 6. 7. 8. http://netbeans.org/kb/docs/java/quickstart-gui.html http://netbeans.org/kb/docs/java/gui-db.html http://netbeans.org/kb/docs/java/gui-db-custom.html http://netbeans.org/kb/docs/web/applets.html http://netbeans.org/kb/docs/web/security-webapps.html http://netbeans.org/kb/docs/web/mysql-webapp.html http://netbeans.org/kb/docs/web/jsf20-intro.html http://netbeans.org/kb/docs/web/jsf20-support.html

106

Modele bilete examen


Exemplu 1 1. Caracterizati pachetul JDK(1 pct). 2. Caracterizai structura de clase care fac parte din pachetul Swing (1 pct). 3. Enumerai principalele componentele Swing definite in pachetul javax.swing.* i explicai rolul acestora (1 pct) 4. Care sunt clasele din Swing utilizate pentru definirea ferestrelor i ce rol au acestea (1 pct)? 5. Scrieti setul de comenzi pentru realizarea unei ferestre de dimensiune 300, 150 care va arata ca in figura alaturata (1pct).

6. Definii noiunea de Clasa (class) n Java i explicai elementele care apar n cadrul acesteia (0,5 pct). 7. Definii noiunea de Interfa (interface) n Java i explicai elementele care apar n cadrul acesteia (0,5 pct). 8. Presupunnd ca am proiectat o interfa ca n figura alturat, scriei setul de comenzi corespunzatoare butoanelor din figura, tiind ca a, b i c sunt de tip real. Butonul Clear va avea rolul de a anula valorile din casetele de text, iar butonul Exit va inchide fereastra(3 pct).

9.

107

Exemplu 2 1. Definii noiunea de Interfa (interface) n Java i explicai elementele care apar n cadrul acesteia (1 pct). 2. Explicai rolul metodelor setSize, setResizeable, setTitle, setLocation, setVisible pentru ferestrele de tip JFrame ct i semnificaia parametrilor (1 pct). 3. Enumerai principalele componentele Swing definite in pachetul javax.swing.* i explicai rolul acestora (1 pct) 4. Scrieti setul de comenzi prin care se realizeaza conectarea la baza de date produse si apoi se defineste tabela produs cu structura: cod_p (intreg si cheie primara), denumire_produs(text 40), furnizor (text 30), data_fabricatiei (data calendaristica) si pret_produs (intreg 5). (1.5 pct). 5. Scrieti setul de comenzi pentru butonul Covert ce are rolul de a transforma grade Celsius (preluate intr-un JTextField) in grade Fahrenheight, rezultatul conversiei afisandu-se intr-o eticheta (Jlabel) (1.5pct).

6. 7. Presupunnd ca am proiectat o interfa ca n figura alturat, scriei setul de comenzi corespunzatoare butoanelor din figura, tiind ca l1,l2,l3 i nr 4 sunt de tip real. Butonul clear va avea rolul de a anula valorile din casetele de text, iar butonul close va inchide fereastra(3 pct).

108

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