Sunteți pe pagina 1din 144

UNIVERSITATEA TITU MAIORESCU

FACULTATEA DE INFORMATICA

PROIECTAREA INTERFEELOR
GRAFICE

Mironela Prnu

2015-2016
Acest material este destinat studentilor anului III, invatamant la distant,
specializarea Informatic.

Modul de prezentare are n vedere particularitile nvmntului la distan,


n care studiul individual este determinant. n timp ce profesorul sprijin
studentul prin coordonarea nvtrii si prin feedback periodic asupra acumulrii
cunostintelor si a deprinderilor, studentul alege locul, momentul si ritmul pentru
studiu, dispune de capacitatea de a studia independent si totodat si asum
responsabilitatea pentru initierea si continuarea procesului educational.

Disciplina Proiectarea interfetelor grafice utilizeaz noiunile predate la


disciplinele Programare procedural (II), Programare orientat pe obiecte, Baze
de date si alte discipline studiate n anul I si anul II.

O nentelegere a notiunilor fundamentale prezentate n acest curs poate genera


dificultti n asimilarea conceptelor complexe introduse in alte cursuri de
specialitate.

1. Competene profesionale
Prezentarea notiunilor de baza pentru realizarea al unor interfee grafice
complexe folosind pachetul SWING din limbajul Java, precum i modul n care
Competene specifice
disciplinei
acestea pot fi utilizate n cadrul unor aplicaii de tip client-server.
Prezentarea n mod sintetic a conceptului de interfa grafic i a conceptelor
asociate acestuia, n diverse variante de implementare, ca i a diverselor
modaliti tehnice de elaborare a aplicaiilor dotate cu interfee grafice.
Intergrarea unei interfete grafice cu o baza de date.
Insusirea modului de realizare a appleturilor cat si functionarea acestor.
Deschidere catre importanta interfetei grafice in realizarea oricarui proiect.
Utilizarea de controale n Android (widget-uri)
2. Explicare i interpretare
Explicarea rolului interfetei grafice
nelegerea i explicarea functionarii unei interfete grafice
Capacitatea de realizare si implemetare a unei interfete grafice
3. Instrumental - aplicative
Corelarea cunotinelor teoretice cu abilitatea de a le aplica n practic
Posibilitatea de exemplificare a principalelor obiecte Swing
Capacitatea de implementarea a unei interfete grafice care comunica cu o baza de date
Tematica

Unitatea de invatare 1 - JAVA. GENERALITATI


Unitatea de invatare 2 - Utilizare NETBEANS; Proiectarea
unei GUI n NetBeans IDE
Unitatea de invatare 3 - COMPONENTELE PACHETULUI
SWING
Unitatea de invatare 4 - LUCRU CA BAZE DE DATE IN
JAVA
Unitatea de invatare 5 - APPLET-URI.
Unitatea de invatare 6 - REALIZAREA INTERFETELOR
PENTRU APLICATII ANDROID
Nota final acordata fiecrui student va conine urmtoarele
componente, conform procentelor de mai jos:
- colocviu final 60%
- lucrari practice/ proiect, etc. 30%
Fiecare student, va realiza un PROJECT care va contine minim
15 aplicatii practice, selectate din cele 6 module ale suportului de
curs. Aplicatiile vor fi //comentate si personalizate.
- teme de control 10%
(se va rezolva un studiu de caz, la alegere, de la cele 11 adrese web-
enumerate mai jos. Explicitarea modului de lucru se va realiza intr-
un document de forma nume_student.docx).
Aplicatiile vor fi transmise cel mai tarziu cu 2 zile inainte de proba
de verificare, pe adresa de email mironela.pirnau@prof.utm.ro.

1. https://netbeans.org/kb/docs/java/quickstart-gui.html
2. https://netbeans.org/kb/docs/java/gui-binding.html
3. https://netbeans.org/kb/docs/web/applets.html
4. https://netbeans.org/kb/docs/javaee/ecommerce/intro.html
5. https://netbeans.org/kb/trails/web.html
6. https://netbeans.org/kb/docs/web/security-webapps.html
7. https://netbeans.org/kb/docs/web/quickstart-webapps-
spring.html
8. https://netbeans.org/kb/docs/web/framework-adding-
support.html
9. https://netbeans.org/kb/docs/web/quickstart-webapps-
wicket.html
10. https://netbeans.org/kb/docs/web/jsf20-intro.html
11. https://netbeans.org/kb/docs/web/jsf20-support.html
Bibliografie

1. Pirnau,M. Proiectarea Interfetelor Grafice, curs pentru invatamant la distanta,


Editura Renaissance, 2010, ISBN: 978-606-8321-55-4
2. Satya KOMATINENI, Dave MACLEAN, Pro Android 4, Apress, 2012
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. https://netbeans.org/community/magazine/html/03/visualwebdev/
11. http://www.netbeans.org.
12. https://cloud.genymotion.com/page/doc/
Unitatea de invatare 1 - JAVA. GENERALITATI
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.
Spre deosebire de alte limbaje de calculator a cror influenta s-a diminuat cu trecerea
timpului, influenta limbajului Java a devenit mai puternica. Java a ajuns n prim planul
programrii pe Internet nc de la lansare. Si-a consolidat aceasta poziie cu fiecare versiune
ulterioara. Astzi, este prima si cea mai buna alegere pentru a dezvolta aplicaii web-based. De
asemenea, Java face parte din revoluia telefoanelor inteligente deoarece este folosit la
programarea pe Android. Simplu spus: marea parte a lumii moderne funcioneaz cu coduri
Java. Att de important este limbajul Java.
Un motiv cheie al succesului pe care l are limbajul Java este agilitatea sa. De la lansarea
sa n versiunea 1.0, Java s-a adaptat continuu la schimbrile din mediul de programare si la
schimbrile n felul cum programeaz programatorii. Cel mai important, nu a urmat doar
tendinele, ci a ajutat la crearea lor. Abilitatea limbajului Java de a se adapta la schimbrile
rapide din lumea calculatoarelor e o parte cruciala a motivului pentru care continua sa aib
succes.
Java este asociat cu C++, care la rndul lui este descendent direct al limbajul C. O mare
parte a caracteristicilor Java sunt preluate din aceste 2 limbaje. Sintaxa Java deriva din limbajul
C, iar multe din caracteristicile orientate pe obiecte ale limbajului Java au fost influenate de
C++. De fapt, multe din trsturile definitorii ale limbajului Java vin de la sau sunt rspunsuri
la predecesorii si. Mai mult, crearea limbajului Java a stat la baza procesului de mbuntire
si adaptare aprut n limbajele de programare pe calculator pe parcursul ultimelor decenii.
Legtura cu C#
Puterea si rspndirea Java continua sa fie simit n lumea programatorilor de limbaj
de calculator. Multe dintre caracteristicile sale inovatoare, dezvoltarea si conceptele au devenit
model de baza pentru noile limbaje dezvoltate ulterior. Succesul Java este pur si simplu prea
important pentru a putea fi ignorat. Poate cel mai important exemplu de influenta Java, este
asupra limbajului C#, creat de Microsoft pentru a sprijini .NET Framework (dot net
framework). C# este strns legat de Java astfel nct ambele limbaje mpart aceiai sintaxa de
baza, suporta programarea distribuita si utilizeaz acelai model de obiecte. Exista desigur
diferene ntre Java si C#, dar per ansamblu look-and-feel al acestor limbaje este foarte
asemntor. Acesta "cross-polenizare" de la Java la C # este cea mai puternica mrturie care
arata ca Java a redefinit modul n care ne gndim i folosim un limbaj de calculator.
Java este un set de mai multe produse software realizat de firma Sun Microsystems (care
a fuzionat n anul 2010 cu Oracle Corporation), ce mpreun ofer un sistem pentru dezvoltarea
de aplicaii software i implementarea acestora ntr-un mediu de calcul cross-platform. Java
este folosit pentru o varietate de platforme de calcul i dispozitive integrate pentru telefoane
mobile low-end, la servere enterprise si supercalculatoare high-end. De asemena aplicaiile de
tip applet-urile Java sunt mai rar folosite i se ntlnesc pentru a oferi funcii mbuntite i
sigure pentru navigarea pe World Wide Web.
Scrierea programelor n limbajul Java reprezint principalul mod de a produce cod care
va fi implementat ca Java bytecode. Exist totui compilatoare bytecode disponibile i pentru
alte limbaje, cum ar fi Ada, JavaScript, Python i Ruby. Mai multe limbaje au fost proiectate
pentru a rula nativ pe Java Virtual Machine (JVM), cum ar fi Scala, Clojure i Groovy. Sintaxa
limbajului Java a fost mprumut foarte mult de la C i C + +, dar caracteristicile orientate-
obiect sunt modelate dup Smalltalk i Objective-C. Java elimin anumite concepte de nivel
sczut, cum ar fi pointerii i are un model de memorie foarte simplu, n care fiecare obiect este
alocat n aceasta i, toate variabilele de tip obiect sunt referine.

Java este fundamentul pentru aproape orice tip de aplicaie de reea i este standardul
global pentru dezvoltarea i livrarea de aplicaii mobile, jocuri, coninut Web-based, i software
pentru mediul enterprise. Cu mai mult de 9 milioane de dezvoltatori din intreaga lume, Java
permite s dezvoltm eficient i s implementm aplicaii i servicii stabile,care pot fi apoi
portabile n scopul de a rula pe o varietate larg de sisteme hardware.

Java Platform este numele pachetului de programe oferite de Oracle, care permit
dezvoltarea i rularea de programe scrise n limbajul de programare Java. Platforma nu este
specific pentru un procesor sau un sistem de operare si este format dintr-un motor de execuie
(numit main virtual) i un compilator cu un set de biblioteci care sunt puse n aplicare pentru
diverse sisteme de operare i hardware, astfel nct programele Java s poat rula identic pe
toate dintre acestea.
Platforma Java const din mai multe programe, fiecare dintre ele oferind o poriune din
capacitile sale generale. De exemplu, compilatorul Java, care convertete codul surs Java n
Java bytecode (un limbaj intermediar pentru JVM), este furnizat ca parte a Java Development
Kit (JDK).
Componentele eseniale ale platformei sunt compilatorul limbajului Java, bibliotecile
i mediul de execuie (maina virtual).

Java Card se refer la o tehnologie care permite aplicaiilor bazate pe Java (applet-uri), de a fi
rulate n siguran pe carduri inteligente i dispozitive similare. Java Card este cea mai mic
component a platformei Java vizate pentru dispozitivele integrate. Java Card ofer
utilizatorului posibilitatea de a programa micro dispozitive i a le crea aplicaii specifice.
Acesta este utilizat pe scar larg n cartele SIM (utilizate n telefoanele mobile GSM) i carduri
de ATM-uri. Principalele obiective de proiectare ale tehnologiei Java Card sunt portabilitatea
i securitatea.
Java ME (Micro Edition) reprezint este o platform Java proiectat pentru sisteme integrate
(dispozitivele mobile). Dispozitivele int variaz de la controalele industriale la telefoane
mobile i set-top boxuri. Java ME a fost cunoscut anterior ca platforma Java 2, Micro Edition
(J2ME). Java ME a fost conceput de Sun Microsystems, achiziionat de Oracle Corporation n
2010, ce a nlocuit o platforma de tehnologie similar cunoscut sub numele de PersonalJava.
Aceasta a fost iniial dezvoltat de Java Community Process ca JSR 68, de diferite platarome
Java ME care au evoluat n JSRs separate.

Exist mai mult de 2,1 miliarde de activri Java ME pe telefoane mobile i PDA-uri. Dei nu
este folosit pe unele dintre cele mai noi platforme mobile de azi (de exemplu, iPhone, Windows
Phone, BlackBerry 10, Android), aceasta continu s fie foarte popular pe dispozitive ieftine
(<200 dolari), cum ar fi Nokia Seria 40. De asemenea, este utilizat pe noul sistem de operare
Bada i pe sistemul de operare Symbian, mpreun cu software-ul nativ. Exista implementari
pentru Windows CE, Windows Mobile, Maemo, MeeGo si Android disponibil pentru
descrcare separat.
Java SE (Standard Edition): este o platform utilizat pe scar larg pentru dezvoltarea i
implementarea de aplicaii portabile pentru mediile tip desktop si server. Java SE foloseste
limbajul de programare orientat-obiect Java i definete o gam larg de API-uri de uz general,
cum ar fi API-uri pentru clasa Java.Library care include i Java Virtual Machine
Specification.Una dintre cele mai cunoscute implementari de Java SE este Java Development
Kit (JDK).
Java EE (Enterprise Edition) este platforma de calcul enterprise a lui Oracle. Platforma ofer
un API i mediu de rulare pentru dezvoltarea i rularea de software enterprise, inclusiv servicii
de reea i de Internet, precum i alte aplicaii de reea la scar larg, fiabile i sigure. Java EE
extinde Java Platform, Standard Edition (Java SE) i ofer un API pentru Object-relational
mapping ORM(software ce convertete datele intre tipuri de sisteme), arhitecturi multi-tier i
servicii web. Platforma include un design bazat n mare msur pe componente modulare care
ruleaz pe un server de aplicaii. Software-ul pentru Java EE este dezvoltat n primul rnd n
limbajul de programare Java.

Implementarea Oracle este oferit n dou distribuii diferite:


1. Java Runtime Environment (JRE), care conine pri ale platformei Java SE
necesare pentru a rula programe Java i este destinat pentru utilizatorii finali;
2. Java Development Kit (JDK), care este destinat pentru dezvoltatorii de
software i include instrumente de dezvoltare, cum ar fi compilatorul Java,
Javadoc, Jar i un debugger.OpenJDK este o alt implementare notabil a Java
SE, care este liceniat sub GPL. Implementarea a nceput atunci cnd Sun a
nceput eliberarea codului surs Java sub GPL. ncepnd cu Java SE 7,
OpenJDK este implementarea de referin oficial Java.
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
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 )
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 )
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.
Unitatea de invatare 2 - Utilizare NETBEANS;
Proiectarea unei GUI n NetBeans IDE
https://netbeans.org/kb/docs/java/quickstart-gui.html

Aplicatia 1 . 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 Versiune Required

NetBeans IDE Versiunea 6.7


versiunea 6 sau
Java Development Kit (JDK)
versiunea 5

Configurarea de proiect

Pentru a crea un proiect IDE:

1. Start NetBeans IDE.

2. n IDE, alegeti File> New Project (Ctrl-Shift-N), aa cum se arat n figura de mai
jos.

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):
o n domeniul Denumirea proiectului HelloWorldApp tip,.

o Lsai Utilizare Pliant dedicate pentru stocarea caseta de selectare de Biblioteci


neselectat.

o n Creai principal domeniu de clas, helloworldapp.HelloWorldApp tip.

o Las Setare ca principale caseta de selectare de proiecte selectate.

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.
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.
*/

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:

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
Aplicatia 2 .Proiectarea unei GUI n NetBeans IDE
Designing a Swing GUI in NetBeans IDE

This tutorial guides you through the process of creating the graphical user interface (GUI) for
an application called ContactEditor using the NetBeans IDE GUI Builder. In the process you
will layout a GUI front-end that enables you to view and edit contact information of
individuals included in an employee database.

In this tutorial you will learn how to: use the GUI Builder Interface, create a GUI Container,
add, resize, and align components, adjust component anchoring, set component auto-resizing
behavior, edit component properties.

This tutorial takes about 30 minutes to complete.

Contents

Getting Started
o Creating a Project
o Creating a JFrame Container
Getting Familiar with the GUI Builder
Key Concepts
o Free Design
o Automatic Component Positioning (Snapping)
o Visual Feedback
First Things First
o Adding Components: The Basics
o Adding Individual Components to the Form
o Adding Multiple Components to the Form
o Inserting Components
Moving Forward
o Component Alignment
o Baseline Alignment
Reviewing What We've Learned
o Adding, Aligning, and Anchoring
o Component Sizing
o Indentation
Making the Final Adjustments
Previewing Your GUI
Deploying GUI Applications
See Also

To complete this tutorial, you need the following software and resources.
Software or Resource Version Required
NetBeans IDE version 6.9, 7.0, 7.1, 7.2, 7.3, or 7.4
Java Development Kit (JDK) version 6 or 7
Getting Started

The IDE's GUI Builder makes it possible to build professional-looking GUIs without an
intimate understanding of layout managers. You can lay out your forms by simply placing
components where you want them.

For descriptions of the GUI Builder's visual feedback, you can use the GUI Builder Visual
Feedback Legend.

Creating a Project

Because all Java development in the IDE takes place within projects, we first need to create a
new ContactEditor project within which to store sources and other project files. An IDE project
is a group of Java source files plus its associated meta data, including project-specific properties
files, an Ant build script that controls the build and run settings, and a project.xml file that maps
Ant targets to IDE commands. While Java applications often consist of several IDE projects,
for the purposes of this tutorial, we will build a simple application which is stored entirely in a
single project.

To create a new ContactEditor application project:

1. Choose File > New Project. Alternately, you can click the New Project icon
in the IDE toolbar.
2. In the Categories pane, select the Java node and in the Projects pane, choose
Java Application. Click Next.
3. Enter ContactEditor in the Project Name field and specify the project location.
4. Leave the Use Dedicated Folder for Storing Libraries checkbox unselected.
5. Ensure that the Set as Main Project checkbox is selected and clear the Create
Main Class field.
6. Click Finish.

The IDE creates the ContactEditor folder on your system in the designated
location. This folder contains all of the project's associated files, including its
Ant script, folders for storing sources and tests, and a folder for project-
specific metadata. To view the project structure, use the IDE's Files window.
Creating a JFrame Container

After creating the new application, you may have noticed that the Source Packages folder in
the Projects window contains an empty <default package> node. To proceed with building our
interface, we need to create a Java container within which we will place the other required
GUI components. In this step we'll create a container using the JFrame component and place
the container in a new package.

To add a JFrame container:


1. In the Projects window, right-click the ContactEditor node and choose New >
JFrame Form.
Alternatively, you can find a JFrame form by choosing New > Other >
Swing GUI Forms > JFrame Form.
2. Enter ContactEditorUI as the Class Name.
3. Enter my.contacteditor as the package.
4. Click Finish.

The IDE creates the ContactEditorUI form and the ContactEditorUI class within
the ContactEditorUI.java application and opens the ContactEditorUI form in the
GUI Builder. Notice that the my.contacteditor package replaces the default
package.
top
Getting Familiar with the GUI Builder

Now that we've set up a new project for our application, let's take a minute to familiarize
ourselves with the GUI Builder's interface.

Note: To explore the GUI Builder interface with an interactive demo, view the Exploring GUI
Builder (.swf) screencast.

When we added the JFrame container, the IDE opened the newly-created ContactEditorUI form
in an Editor tab with a toolbar containing several buttons, as shown in the preceding
illustration. The ContactEditor form opened in the GUI Builder's Design view and three
additional windows appeared automatically along the IDE's edges, enabling you to navigate,
organize, and edit GUI forms as you build them.

The GUI Builder's various windows include:

Design Area. The GUI Builder's primary window for creating and editing Java GUI
forms. The toolbar's Source button enables you to view a class's source code, the
Design button allows you to view a graphical view of the GUI components, the
History button allows you to access the local history of changes of the file. The
additional toolbar buttons provide convenient access to common commands, such as
choosing between Selection and Connection modes, aligning components, setting
component auto-resizing behavior, and previewing forms.
Navigator. Provides a representation of all the components, both visual and non-
visual, in your application as a tree hierarchy. The Navigator also provides visual
feedback about what component in the tree is currently being edited in the GUI
Builder as well as allows you to organize components in the available panels.
Palette. A customizable list of available components containing tabs for JFC/Swing,
AWT, and JavaBeans components, as well as layout managers. In addition, you can
create, remove, and rearrange the categories displayed in the Palette using the
customizer.
Properties Window. Displays the properties of the component currently selected in
the GUI Builder, Navigator window, Projects window, or Files window.

If you click the Source button, the IDE displays the application's Java source code in the
Editor with sections of code that are automatically generated by the GUI Builder indicated by
grey areas (they become blue when selected), called Guarded Blocks. Guarded blocks are
protected areas that are not editable in Source view. You can only edit code appearing in the
white areas of the Editor when in Source view. If you need to make changes to the code
within a Guarded Block, clicking the Design button returns the IDE's Editor to the GUI
Builder where you can make the necessary adjustments to the form. When you save your
changes, the IDE updates the file's sources.

Note: For advanced developers, the Palette Manager is available that enables you to add
custom components from JARs, libraries, or other projects to the Palette. To add custom
components through the Palette Manager, choose Tools > Palette > Swing/AWT Components.

top
Key Concepts

The IDE's GUI Builder solves the core problem of Java GUI creation by streamlining the
workflow of creating graphical interfaces, freeing developers from the complexities of Swing
layout managers. It does this by extending the current NetBeans IDE GUI Builder to support a
straightforward "Free Design" paradigm with simple layout rules that are easy to understand
and use. As you lay out your form, the GUI Builder provides visual guidelines suggesting
optimal spacing and alignment of components. In the background, the GUI Builder translates
your design decisions into a functional UI that is implemented using the new GroupLayout
layout manager and other Swing constructs. Because it uses a dynamic layout model, GUI's
built with the GUI Builder behave as you would expect at runtime, adjusting to accommodate
any changes you make without altering the defined relationships between components.
Whenever you resize the form, switch locales, or specify a different look and feel, your GUI
automatically adjusts to respect the target look and feel's insets and offsets.

Free Design

In the IDE's GUI Builder, you can build your forms by simply putting components where you
want them as though you were using absolute positioning. The GUI Builder figures out which
layout attributes are required and then generates the code for you automatically. You need not
concern yourself with insets, anchors, fills, and so forth.
Automatic Component Positioning (Snapping)

As you add components to a form, the GUI Builder provides visual feedback that assists in
positioning components based on your operating system's look and feel. The GUI Builder
provides helpful inline hints and other visual feedback regarding where components should be
placed on your form, automatically snapping components into position along guidelines. It
makes these suggestions based on the positions of the components that have already been
placed in the form, while allowing the padding to remain flexible such that different target
look and feels render properly at runtime.

Visual Feedback

The GUI Builder also provides visual feedback regarding component anchoring and chaining
relationships. These indicators enable you to quickly identify the various positioning
relationships and component pinning behavior that affect the way your GUI will both appear
and behave at runtime. This speeds the GUI design process, enabling you to quickly create
professional-looking visual interfaces that work.

top
First Things First

Now that you have familiarized yourself with the GUI builder's interface, it's time to begin
developing the UI of our ContactEditor application. In this section we'll take a look at using
the IDE's Palette to add the various GUI components that we need to our form.

Thanks to the IDE's Free Design paradigm, you no longer have to struggle with layout
managers to control the size and position of the components within your containers. All you
need to do is drag and drop the components you need to your GUI form as shown in the
illustrations that follow.

Note: Refer to the Adding individual and multiple components (.swf) screencast for an
interactive demo on the section below.
Adding Components: The Basics

Though the IDE's GUI Builder simplifies the process of creating Java GUIs, it is often helpful
to sketch out the way you want your interface to look before beginning to lay it out. Many
interface designers consider this a "best practice" technique, however, for the purposes of this
tutorial you can simply peek at how our completed form should look by jumping ahead to the
Previewing your GUI section.

Since we've already added a JFrame as our form's top-level container, the next step is to add a
couple of JPanels which will enable us to cluster the components of our UI using titled
borders. Refer to the following illustrations and notice the IDE's "drag and drop" behavior
when accomplishing this.

To add a JPanel:

1. In the Palette window, select the Panel component from the Swing
Containers category by clicking and releasing the mouse button.
2. Move the cursor to the upper left corner of the form in the GUI Builder.
When the component is located near the container's top and left edges,
horizontal and vertical alignment guidelines appear indicating the preferred
margins. Click in the form to place the JPanel in this location.

The JPanel component appears in the ContactEditorUI form with orange


highlighting signifying that it is selected. After releasing the mouse button,
small indicators appear to show the component's anchoring relationships and
a corresponding JPanel node is displayed in the Navigator window, as shown
in the following illustration.

Next, we need to resize the JPanel to make room for the components we'll place within it a
little later, but let's take a minute to point out another of the GUI Builder's visualization
features first. In order to do this we need to deselect the JPanel we just added. Because we
haven't added a title border yet, the panel disappears. Notice, however, that when you pass the
cursor over the JPanel, its edges change to light gray so that its position can be clearly seen.
You need only to click anywhere within the component to reselect it and cause the resize
handles and anchoring indicators to reappear.

To resize the JPanel:

1. Select the JPanel you just added. The small square resize handles reappear
around the component's perimeter.
2. Click and hold the resize handle on the right edge of the JPanel and drag
until the dotted alignment guideline appears near the form's edge.
3. Release the resize handle to resize the component.

The JPanel component is extended to span between the container's left and
right margins in accordance with the recommended offset, as shown in the
following illustration.
Now that we've added a panel to contain our UI's Name information, we need to repeat the
process to add another directly below the first for the E-mail information. Referring to the
following illustrations, repeat the previous two tasks, paying attention to the GUI Builder's
suggested positioning. Notice that the suggested vertical spacing between the two JPanels is
much narrower than that at the edges. Once you have added the second JPanel, resize it such
that it fills the form's remaining vertical space.
Because we want to visually distinguish the functions in the upper and lower sections of our
GUI, we need to add a border and title to each JPanel. First we'll accomplish this using the
Properties window and then we'll try it using the pop-up menu.

To add title borders to the JPanels:

1. Select the top JPanel in the GUI Builder.


2. In the Properties window, click the ellipsis button (...) next to the Border
property.
3. In the JPanel Border editor that appears, select the TitledBorder node in the
Available Borders pane.
4. In the Properties pane below, enter Name for the Title property.
5. Click the ellipsis (...) next to the Font property, select Bold for the Font
Style, and enter 12 for the Size. Click OK to exit the dialogs.
6. Select the bottom JPanel and repeat steps 2 through 5, but this time right-
click the JPanel and access the Properties window using the pop-up menu.
Enter E-mail for the Title property.

Titled borders are added to both JPanel components.


Adding Individual Components to the Form

Now we need to start adding the components that will present the actual contact information
in our contact list. In this task we'll add four JTextFields that will display the contact
information and the JLabels that will describe them. While accomplishing this, notice the
horizontal and vertical guidelines that the GUI Builder displays, suggesting the preferred
component spacing as defined by your operating system's look and feel. This ensures that
your GUI is automatically rendered respecting the target operating system's look and feel at
runtime.

To add a JLabel to the form:

1. In the Palette window, select the Label component from the Swing Controls
category.
2. Move the cursor over the Name JPanel we added earlier. When the guidelines
appear indicating that the JLabel is positioned in the top left corner of the
JPanel with a small margin at the top and left edges, click to place the label.

The JLabel is added to the form and a corresponding node representing the
component is added to the Inspector window.

Before going further, we need to edit the display text of the JLabel we just added. Though you
can edit component display text at any point, the easiest way is to do this as you add them.

To edit the display text of a JLabel:

1. Double-click the JLabel to select its display text.


2. Type First Name: and press Enter.
The JLabel's new name is displayed and the component's width adjusts as a
result of the edit.

Now we'll add a JTextField so we can get a glimpse of the GUI Builder's baseline alignment
feature.

To add a JTextField to the form:

1. In the Palette window, select the Text Field component from the Swing
Controls category.
2. Move the cursor immediately to the right of the First Name: JLabel we just
added. When the horizontal guideline appears indicating that the JTextField's
baseline is aligned with that of the JLabel and the spacing between the two
components is suggested with a vertical guideline, click to position the
JTextField.

The JTextField snaps into position in the form aligned with the JLabel's
baseline, as shown in the following illustration. Notice that the JLabel shifted
downward slightly in order to align with the taller text field's baseline. As
usual, a node representing the component is added to the Navigator window.

Before proceeding further, we need to add an additional JLabel and JTextField immediately to
the right of those we just added, as shown in the following illustration. This time enter Last
Name: as the JLabel's display text and leave the JTextFields' placeholder text as it is for now.

To resize a JTextField:

1. Select the JTextField we just added to the right of the Last Name: JLabel.
2. Drag the JTextField's right edge resize handle toward the right edge of the
enclosing JPanel.
3. When the vertical alignment guidelines appear suggesting the margin
between the text field and right edge of the JPanel, release the mouse button
to resize the JTextField.
The JTextField's right edge snaps into alignment with the JPanel's
recommended edge margin, as shown in the following illustration.

Adding Multiple Components to the Form

Now we'll add the Title: and Nickname: JLabels that describe two JTextFields that we're going
to add in a minute. We'll drag and drop the components while pressing the Shift key, to
quickly add them to the form. While accomplishing this, again notice that the GUI Builder
displays horizontal and vertical guidelines suggesting the preferred component spacing.

To add multiple JLabels to the form:

1. In the Palette window, select the Label component from the Swing Controls
category by clicking and releasing the mouse button.
2. Move the cursor over the form directly below the First Name: JLabel we added
earlier. When the guidelines appear indicating that the new JLabel's left edge
is aligned with that of the JLabel above and a small margin exists between
them, shift-click to place the first JLabel.
3. While still pressing the Shift key, place another JLabel immediately to the
right of the first. Make certain to release the Shift key prior to positioning the
second JLabel. If you forget to release the Shift key prior to positioning the
last JLabel, simply press the Escape key.

The JLabels are added to the form creating a second row, as shown in the
following illustration. Nodes representing each component are added to the
Navigator window.

Before moving on, we need to edit the JLabels' name so that we'll be able to see the effect of
the alignments we'll set later.

To edit the display text of JLabels:

1. Double-click the first JLabel to select its display text.


2. Type Title: and press Enter.
3. Repeat steps 1 and 2, entering Nickname: for the second JLabel's name
property.

The JLabels' new names are displayed in the form and are shifted as a result
of their edited widths, as shown in the following illustration.

Inserting Components
Note: Refer to the Inserting components (.swf) screencast for an interactive demo on the
section below.

Often it is necessary to add a component between components that are already placed in a
form. Whenever you add a component between two existing components, the GUI Builder
automatically shifts them to make room for the new component. To demonstrate this, we'll
insert a JTextField between the JLabels we added previously, as shown in the following two
illustrations.

To insert a JTextField between two JLabels:

1. In the Palette window, select the Text Field component from the Swing
Controls category.
2. Move the cursor over the Title: and Nickname: JLabels on the second row such
that the JTextField overlaps both and is aligned to their baselines. If you
encounter difficulty positioning the new text field, you can snap it to the left
guideline of the Nickname JLabel as shown in the first image below.
3. Click to place the JTextField between the Title: and Nickname: JLabels.

The JTextField snaps into position between the two JLabels. The rightmost
JLabel shifts toward the right of the JTextField to accommodate the
suggested horizontal offset.

We still need to add one additional JTextField to the form that will display each contact's
nickname on the right side of the form.

To add a JTextField:
1. In the Palette window, select the Text Field component from the Swing
category.
2. Move the cursor to the right of the Nickname label and click to place the text
field.

The JTextField snaps into position next to the JLabel on its left.
To resize a JTextField:

1. Drag the resize handles of the Nickname: label's JTextField you added in the
previous task toward the right of the enclosing JPanel.
2. When the vertical alignment guidelines appear suggesting the margin
between the text field and JPanel edges, release the mouse button to resize
the JTextField.

The JTextField's right edge snaps into alignment with the JPanel's
recommended edge margin and the GUI Builder infers the appropriate
resizing behavior.

3. Press Ctrl-S to save the file.

top
Moving Forward

Alignment is one of the most fundamental aspects of creating professional-looking GUIs. In


the previous section we got a glimpse of the IDE's alignment features while adding the JLabel
and JTextField components to our ContactEditorUI form. Next, we'll take a more in depth
look at the GUI Builder's alignment features as we work with the various other components
we need for our application.

Component Alignment
Note: Refer to the Aligning and anchoring components (.swf) screencast for an interactive
demo on the sections below.

Every time you add a component to a form, the GUI Builder effectively aligns them, as
evidenced by the alignment guidelines that appear. It is sometimes necessary, however, to
specify different relationships between groups of components as well. Earlier we added four
JLabels that we need for our ContactEditor GUI, but we didn't align them. Now we'll align the
two columns of JLabels so that their right edges line up.

To align components:

1. Hold down the Ctrl key and click to select the First Name: and Title: JLabels on
the left side of the form.
2. Click the Align Right in Column button ( ) in the toolbar. Alternately, you
can right-click either one and choose Align > Right in Column from the pop-
up menu.
3. Repeat this for the Last Name: and Nickname: JLabels as well.
The JLabels' positions shift such that the right edges of their display text are
aligned. The anchoring relationships are updated, indicating that the
components have been grouped.

Before we're finished with the JTextFields we added earlier, we need to make sure that the
two JTextFields we inserted between the JLabels are set to resize correctly. Unlike the two
JTextFields that we stretched to the right edge of our form, inserted components' resizeability
behavior isn't automatically set.

To set component resizeability behavior:

1. Control-click the two inserted JTextField components to select them in the


GUI Builder.
2. With both JTextFields selected, right-click either one of them and choose
Auto Resizing > Horizontal from the pop-up menu.

The JTextFields are set to resize horizontally at runtime. The alignment


guidelines and anchoring indicators are updated, providing visual feedback
of the component relationships.
To set components to be the same size:

1. Control-click all four of the JTextFields in the form to select them.


2. With the JTextFields selected, right-click any one of them and choose Set
Same Size > Same Width from the pop-up menu.

The JTextFields are all set to the same width and indicators are added to the
top edge of each, providing visual feedback of the component relationships.

Now we need to add another JLabel describing the JComboBox that will enable users to select
the format of the information our ContactEditor application will display.

To align a JLabel to a component group:

1. In the Palette window, select the Label component from the Swing category.
2. Move the cursor below the First Name and Title JLabels on the left side of the
JPanel. When the guideline appears indicating that the new JLabel's right
edge is aligned with the right edges of the component group above (the two
JLabels), click to position the component.

The JLabel snaps into a right-aligned position with the column of JLabels
above, as shown in the following illustration. The GUI Builder updates the
alignment status lines indicating the component's spacing and anchoring
relationships.
As in the previous examples, double-click the JLabel to select its display text and then enter
Display Format: for the display name. Notice that when the JLabel snaps into position, the other
components shift to accommodate the longer display text.

Baseline Alignment

Whenever you add or move components that include text (JLabels, JTextFields, and so forth),
the IDE suggests alignments which are based on the baselines of the text in the components.
When we inserted the JTextField earlier, for example, its baseline was automatically aligned
to the adjacent JLabels.

Now we'll add the combo box that will enable users to select the format of the information
that our ContactEditor application will display. As we add the JComboBox, we'll align its
baseline to that of the JLabel's text. Notice once again the baseline alignment guidelines that
appear to assist us with the positioning.

To align the baselines of components:

1. In the Palette window, select the Combo Box component from the Swing
Controls category.
2. Move the cursor immediately to the right of the JLabel we just added. When
the horizontal guideline appears indicating that the JComboBox's baseline is
aligned with the baseline of the text in the JLabel and the spacing between
the two components is suggested with a vertical guideline, click to position
the combo box.

The component snaps into a position aligned with the baseline of the text in
the JLabel to its left, as shown in the following illustration. The GUI Builder
displays status lines indicating the component's spacing and anchoring
relationships.

To resize the JComboBox:

1. Select the ComboBox in the GUI Builder.


2. Drag the resize handle on the JComboBox's right edge toward the right until
the alignment guidelines appear suggesting the preferred offset between the
JComboBox and JPanel edges.

As shown in the following illustration, the JComboBox's right edge snaps


into alignment with the JPanel's recommended edge margin and the
component's width is automatically set to resize with the form.
3. Press Ctrl-S to save the file.

Editing component models is beyond the scope of this tutorial, so for the time being we'll
leave the JComboBox's placeholder item list as it is.

top
Reviewing What We've Learned

We've got off to a good start building our ContactEditor GUI, but let's take a minute to recap
what we've learned while we add a few more of the components our interface requires.

Until now we've concentrated on adding components to our ContactEditor GUI using the
IDE's alignment guidelines to help us with positioning. It is important to understand, however,
that another integral part of component placement is anchoring. Though we haven't discussed
it yet, you've already taken advantage of this feature without realizing it. As mentioned
previously, whenever you add a component to a form, the IDE suggests the target look and
feel's preferred positioning with guidelines. Once placed, new components are also anchored
to the nearest container edge or component to ensure that component relationships are
maintained at runtime. In this section, we'll concentrate on accomplishing the tasks in a more
streamlined fashion while pointing out the work the GUI builder is doing behind the scenes.

Adding, Aligning, and Anchoring

The GUI Builder enables you to lay out your forms quickly and easily by streamlining typical
workflow gestures. Whenever you add a component to a form, the GUI Builder automatically
snaps them into the preferred positions and sets the necessary chaining relationships so you
can concentrate on designing your forms rather than struggling with complicated
implementation details.

To add, align, and edit the display text of a JLabel:

1. In the Palette window, select the Label component from the Swing Controls
category.
2. Move the cursor over the form immediately below the bottom JPanel's E-
mail title. When the guidelines appear indicating that it's positioned in the
top left corner of the JPanel with a small margin at the top and left edges,
click to place the JLabel.
3. Double-click the JLabel to select its display text. Then type E-mail Address:
and press Enter.
The JLabel snaps into the preferred position in the form, anchored to the top
and left edges of the enclosing JPanel. Just as before, a corresponding node
representing the component is added to the Navigator window.
To add a JTextField:

1. In the Palette window, select the Text Field component from the Swing
Controls category.
2. Move the cursor immediately to the right of the E-mail Address label we just
added. When the guidelines appear indicating that the JTextField's baseline
is aligned with the baseline of the text in the JLabel and the margin between
the two components is suggested with a vertical guideline, click to position
the text field.

The JTextField snaps into position on the right of the E-mail Address: JLabel
and is chained to the JLabel. Its corresponding node is also added to the
Inspector window.

3. Drag the resize handle of the JTextField toward the right of the enclosing
JPanel until the alignment guidelines appear suggesting the offset between
the JTextField and JPanel edges.

The JTextField's right edge snaps to the alignment guideline indicating the
preferred margins.

Now we need to add the JList that will display our ContactEditor's entire contact list.

To add and resize a JList:

1. In the Palette window, select the List component from the Swing Controls
category.
2. Move the cursor immediately below the E-mail Address JLabel we added
earlier. When the guidelines appear indicating that the JList's top and left
edges are aligned with the preferred margins along the JPanel's left edge and
the JLabel above, click to position the JList.
3. Drag the JList's right resize handle toward the right of the enclosing JPanel
until the alignment guidelines appear indicating that it is the same width as
the JTextField above.

The JList snaps into the position designated by the alignment guidelines and
its corresponding node is displayed in the Inspector window. Notice also that
the form expands to accommodate the newly added JList.
Since JLists are used to display long lists of data, they typically require the addition of a
JScrollPane. Whenever you add a component which requires a JScrollPane, the GUI Builder
automatically adds it for you. Because JScrollPanes are non-visual components, you have to
use the Inspector window in order to view or edit any JScrollPanes that the GUI Builder
created.

Component Sizing
Note: Refer to the Resizing and indenting components (.swf) screencast for an interactive
demo on the sections below.

It is often beneficial to set several related components, such as buttons in modal dialogues, to
be the same size for visual consistency. To demonstrate this we'll add four JButtons to our
ContactEditor form that will allow us to add, edit, and remove individual entries from our
contact list, as shown in the following illustrations. Afterwards, we'll set the four buttons to be
the same size so they can be easily recognized as offering related functionality.

To add, align, and edit the display text of multiple buttons:

1. In the Palette window, select the Button component from the Swing Controls
category.
2. Move the JButton over the right edge of the E-mail Address JTextField in the lower
JPanel. When the guidelines appear indicating that the JButton's baseline and right
edge are aligned with that of the JTextField, shift-click to place the first button along
the JFrame's right edge. The JTextField's width shrinks to accommodate the JButton
when you release the mouse button.

3. Move the cursor over the top right corner of the JList in the lower JPanel. When the
guidelines appear indicating that the JButton's top and right edges are aligned with
that of the JList, shift-click to place the second button along the JFrame's right edge.

4. Add two additional JButtons below the two we already added to create a column.
Make certain to position the JButtons such that the suggested spacing is respected and
consistent. If you forget to release the Shift key prior to positioning the last JButton,
simply press the Escape key.

5. 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.

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. Select all four JButtons by pressing the Control key while making your
selection.
2. 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.
2. In the Palette window, select the Radio Button component from the Swing
category.
3. 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.

4. 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.
5. 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.
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. In the Palette window, select the Button Group component from the Swing Controls
category.
2. Click anywhere in the GUI Builder design area to add the ButtonGroup component to
the form. Notice that the ButtonGroup does not appear in the form itself, however, it
is visible in the Navigator's Other Components area.
3. Select all three of the JRadioButtons in the form.
4. In the Properties window, choose buttonGroup1 from the buttonGroup property
combo box.

Three JRadioButtons are added to the button group.

5. Press Ctrl-S to save the file.

top
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.

Finishing 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.
2. In the Palette window, select the Button component from the Swing Controls
category.
3. 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.

4. Add another JButton to the left of the first, making certain to place it using
the suggested spacing along the JFrame's bottom edge.
5. 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.
6. 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 Navigator 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.

7. Press Ctrl-S to save the file.

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.

top
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 ( )
in the GUI Builder's toolbar. The form opens in its own window, allowing you to test it prior
to building and running.
top
Deploying GUI Applications

In order for the interfaces you create with the GUI Builder to work outside of the IDE, the
application must be compiled against classes for the GroupLayout layout manager and also
have those classes available at runtime. These classes are included in Java SE 6, but not in
Java SE 5. If you develop the application to run on Java SE 5, your application needs to use
the Swing Layout Extensions library.

If you are running the IDE on JDK 5, the IDE automatically generates your application code
to use the Swing Layout Extensions library. When you deploy the application, you need to
include the Swing Layout Extensions library with the application. When you build the
application (Build > Build Main Project), the IDE automatically provides a copy of the
library's JAR file in the application's dist/lib folder. The IDE also adds each of the JAR files
that are in the dist folder to the Class-Path element in the application JAR file's manifest.mf file.

If you are running the IDE on JDK 6, the IDE generates your application code to use the
GroupLayout classes that are in Java SE 6. This means that you can deploy the application to
run on systems with Java SE 6 installed and you do not need to package your application with
the Swing Layout Extensions library.

Note: If you create your application using JDK 6 but you need the application to also run on
Java SE 5, you can have the IDE generate its code to use the Swing Layout Extensions library
instead of the classes in Java SE 6. Open the ContactEditorUI class in the GUI Editor. In the
Navigator, right-click the Form ContactEditorUI node and choose Properties in the popup
menu. In the Properties dialog box, change the value of the Layout Generation Style property
to Swing Layout Extensions Library.
Distributing and Running Standalone GUI Applications

To prepare your GUI application for distribution outside of the IDE:

Zip the project's dist folder into a ZIP archive. (The dist folder might also contain a lib
folder, which you would also need to include.)
To run your application, right-click the project name and select Run in the context menu. In
the Run Project dialog select the main class name (my.contacteditor.ContactEditorUI if speaking
about the project you have just created) and click OK. Your application is up and running.

To run a standalone GUI application from the command line:

1. Navigate to the project's dist folder.


2. Type the following:

java -jar <jar_name>.jar

Aplicatii.
Sa se creeze interfata conform tutorialului de mai sus.

Sa se atribuie actiuni elementelor meniurilor


Sa se proiecteze ferestrele corespunzatoare pentru conversie, ca in figururile
alaturate.
Atribuirea actiunilor corespunzatoare butoanelor.
Sa se creeze apoi fisierul jar corespunzator.
Unitatea de invatare 3 - COMPONENTELE
PACHETULUI SWING
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.

Exist mai multe tipuri de aplicaii Java cum ar fi: stand-alone- aplicaii java sine
stttoare: appleturi- aplicaii java care se execut pe partea de client; servleturi-
aplicaii java care se execut pe partea de server etc.

O aplicaie este un program care ruleaz pe calculator n sistemul de operare al


computerului. Crearea unei aplicaii n Java este similar ca n orice alt limbaj de programare.

Aplicatiile de sine statatoare se impart, dupa tipul interfetei cu utilizatorul in:


a. Aplicatii de consola cu interfata orientata pe caracter precum interfata sistemului de operare
dos, sau interfata la livel de consola din UNIX. Aplicaiile bazate pe consol sunt programe
Java care se execut de la un prompt de comand i nu prezint nici un ecran bazat pe GUI.
Astfel de programe au rezultate bazate pe consol.(Fig. 1)
Fig. 1 Aplicaie consol

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.
Aplicaiile bazate pe GUI sunt programele Java care ruleaz de sine stttoare i pot s accepte
date introduse de utilizator prin intermediul unuei ferestre bazate pe o interfa grafic(GUI).

Aplicaii Web
Acestea sunt aplicaii care sunt bazate pe web i necesit un browser web pentru
execuie. Aplicaiile web fac uz de un server pentru a stoca date i de fiecare dat cnd un
utilizator solicit s execute cererea, cererea este trecut pe la server pentru ateptarea unui
rspuns adecvat. Alicaiile ce se execut pe partea de client sunt cele ncrcate de pe un server
i apoi executate de programe speciale, cum ar fi browserul web. Un applet este un program
java ce ruleaz n cadrul unui browser web i ncorporeaz o main virtual Java. Tehnologia
appleturilor este similar, ntr-un anumit sens, cu a subprogramelor JavaScript. Fiierul cu
extensia .class al unui applet este stocat pe un server web i poate fi accesat de ctre un client
prin intermediul unei pagini care conine acel applet. La ncrcarea paginii, codul appletului
este transferat pe maina-client i va fi executat cu ajutorul mainii virtuale incluse in browser.
De la apariia sa, java a fost mbuntit mereu, transferndu-se ntr-un mediu de
dezvoltare pentru o larg varietate de aplicaii, cum ar fi aplicaii de tip client/server, aplicaii
internet sau aplicaiile standard independente.
TEHNOLOGIA JFC (SWING)
Swing nu a existat n primele versiuni de Java. 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.
Abstract Window Toolkit AWT definete un set de controale de baza,
ferestre si dialog boxes ce suporta o interfaa grafica utilizabila dar extrem de
limitata. Un motiv pentru natura limitata a AWT este ca traduce diferitele
componente vizuale n corespondentele specifice platformei utilizate sau legturi.
Acest lucru nseamn ca look-and-feel ul componentei este definit de platforma
si nu de Java. Deoarece componentele AWT folosesc resurse de cod nativ sunt
definite ca heavyweigh (de categorie grea).
Principalele pachete ce se folosesc n proiectarea i dezvoltarea interfeelor
grafice sunt java.awt, java.awt.event, javax.swing. Acestea sunt incluse n
pachetul JDK (Java Development Kit) care conine clase fr de care nu se pot
dezvolta aplicaiile java.
De la lansarea aplicaiei, Java AWT-ul (Abstract Window Toolkit) a fcut
parte din JDK dar nu a fost suficient pentru a suporta interfee grafice complexe,
totui putea suporta majoritatea operaiilor valabile ntr-un formular HTML.

Java Foundation Classes (JFC) reprezint un set de librrii fcute pentru a


ajuta programatorii n dezvoltarea aplicaiilor pentru diferite corporaii. Swing
este doar una dintre cele 5 librrii care alctuiesc JFC.

De asemenea JFC cuprinde i Abstract Window Toolkit (AWT), Accessibility


API i 2D API precum i suport pentru capabilitile de tip drag and drop.
AWT (Abstract Window Toolkit) - este interfa cu utilizatorul inclus
n toate versiunile de Java Development Kit (JDK).
Accessibility
Pachetul Accessibility ofer ajutor utilizatorilor care au probleme cu
interfeele tradiionale. Poate fi folosit mpreun cu componente precum
instrumente cu comand vocal sau tastaturi n limbajul braille pentru a permite
accesul la componentele Swing. Pachetul este mprit n dou pri: API-ul
Accessibility, care este inclus n Swing i API-ul Accesibility Utilities care este
distribuit separat.
2D API conine clase folosite n implementarea formelor complexe, fonturi
i culori. Clasele 2D API nu fac parte din pachetul Swing.
Drag and drop - funcia drag and drop este una din cele mai cunoscute i
folosite n interfeele grafice. Utilizatorul poate selecta un obiect innd
click pe acesta i l poate muta ntr-o alt fereastr. Funcia drag and drop
nu face parte din clasa Swing.
Clasele i legturile dintre ele sunt artate n figura

Figura Legturile dintre clasele ce formeaz JFC

Caracteristicile tehnologiei JFC


Caracteristic Descriere
Componente GUI Componente GUI: Ferestre, dialoguri, meniuri, butoane,
Swing liste etc.
Componentele grafice pot avea acelai aspect, independent
Suport pentru aspect
de platform, sau aspecte corespunztoare anumitor platfome
Suport pentru Inputul de la utilizator poate fi obinut prin cititoare de ecran
accesibilitate i monitoare Braille.
Permite ncorporarea elementelor de grafic 2D, text,
Grafic 2D imagine n aplicaii i applet-uri. De asemenea, include
suport performant pentru imprimare.
Extinde aceast facilitate, realiznd comunicarea ntre
Suport Drag-and-Drop
aplicaiile Java i cele native.
Permite dezvoltarea aplicaiilor ce prelucreaz text ce
Internaionalizare
conine caractere corespunztoare diferitelor limbi.

"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 dintr-un singur printe
numit JComponent (care este derivat din clasa AWT Container).
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.aw, 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).
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

Un GUI Swing este compus din doua elemente principale: componente si


containere. Totui, aceasta distincie este mai mult conceptual deoarece toate
containerele sunt de asemenea si componente. Diferena ntre cele doua se gsesc
n scopul destinat. Termenul folosit n general este ca o componenta este un
control vizual independent cum ar fi un slider sau un push button.
Un container cuprinde un grup de componente, prin urmare un containere
este un tip special de componenta care este conceput pentru a tine alte
componente. Totui pentru ca o componenta sa fie afiat trebuie sa fie inuta ntr-
un container. Prin urmare toate GUI urile Swing vor avea cel puin un container.
Deoarece containerele sunt componente, o componenta poate tine si alte
componente. Aceasta permite Swing sa defineasc ce este o ierarhie container la
baza creia trebuie sa fie container un top-level.

Componente
In general componentele Swing sunt derivate din clasa JComponent.
Singura excepie la aceasta sunt cele 4 containere top-level descrise n urmtoarea
seciune. JComponent furnizeaz funcionalitate comuna pentru toate
componentele. Ca de exemplu, JComponent suporta aspectul bazat pe plug in.
JComponent motenete din clasa AWT Container si Component. Rezulta ca o
componenta swing este construita si compatibila cu componenta AWT.
Toate componentele Swing sunt reprezentate de clase si definite n pachetul
javax.swing. Urmtorul tabel arata numele claselor pentru componentele Swing
(inclusiv cele folosite ca si container).

JApplet JButton JCheckBox JCheckBoxMenuItem


JColorChooser JComboBox JComponent JDesktopPane
JDialog JEditorPane JFileChooser JFormattedTextField
JFrame JInternalFrame JLabel JLayer
JLayeredPane JList JMenu JMenuBar
JMenuItem JOPtionPane JPanel JPasswordField
JPopupMenu JProgressBar JRadioButton JRadioButtonMenuItem
JRootPane JScroolBar JScroolPane JSeparator
JSlider JSpinner JSplitPane JTabbedPane
JTable JTextArea JTextField JTextPane
JTogglebutton JToolBar JToolTip JTree
JViewport JWindow

De notat ca toate clasele component ncep cu litera J. De exemplu, clasa


pentru un label este JLabel; clasa pentru un buton tip push este JButton; si clasa
pentru bara scrool este JScrollBar.

Containere
Swing definete doua tipuri de containere. Primele sunt containere top-
level1: JFrame, JApplet, JWindow, and JDialog. Aceste containere nu motenesc
JComponent. Dar n schimb motenesc din AWT clasele Component si Container.
Spre deosebire de celelalte componente Swing care sunt lightweight containerele

1
Nivel nalt.
top-level sunt containere heavyweight. Aceasta face containerele top level un caz
special pentru librria de componente Swing.
Dup cum si numele precizeaz un container top-level trebuie sa fie la baza
ierarhiei de componente. O componenta top-level nu este coninut n nici un alt
container. De asemenea orice ierarhie de componente trebuie sa nceap cu un
container top-level. Cel mai folosit n aplicaii este JFrame iar cel mai folosit
pentru Applet este JApplet.
Al doilea tip de containere suportat de Swing sunt containerele lightweight.
Containerele lightweiht motenesc JComponent. Un exemplu de containere de
categorie uoar este JPanel, care este un container general. Containerele de
categorie uoar sunt de obicei folosite n organizarea si gestionarea grupurilor
asemntoare de componente pentru ca un container uor poate fi coninut de alt
containere. Prin urmare se folosete Containerele lightweight ca JPanel pentru a
crea subgrupuri de controale asemntoarea ce sunt coninute ntr-un alt container.

Panouri de coninut de nivel nalt


Fiecare container de nivel nalt definete un set de panouri. La cel mai nalt
nivel n ierarhie sta o instana a JRootPane.
JRootPane este un container minimal ce are ca scop gestionarea celorlalte
panouri. De asemenea, ajuta la gestionarea barei de meniu care este opional.
Panourile care umple panoul rdcina sunt denumite glass pane, content pane, si
layered pane.
Glass pane este un panou top-level. St deasupra si acoper complet toate
celelalte panouri. Implicit este o instana transparenta a JPanel. Panoul Glass are
activate interacionri cu mouse-ul ce afecteaz ntreg containerul (fat un control
individual) sau de exemplu pentru a desena peste oricare alta componenta. n
majoritatea cazurilor nu este neaprata folosirea acestuia dar n caz de necesitate
el exist. Layered pane este o instana a JLayeredPane. Layered pane permite
componentelor sa li se acorde o valoare de adncime. Aceasta valoare determina
care componenta suprapune pe cealalt. (Astfel, layered pane permite specificare
unei ordini pe axa Z pentru o componenta, dei acest lucru nu este ceva ce este
necesar ntotdeauna.) Layered pane ine content pane -ul si opional bara de
meniu.
Dei glass pane - ul si layered pane urile sunt parte integrata a operaiilor
unui container de nivel nalt si are atribuii importante, o mare parte din ceea ce
ofer se ntmpl n spatele aplicaiei. Panoul cu care aplicaia va interaciona cel
mai mult este content pane u, deoarece acesta este panoul n care se adaug
componentele vizuale. Cu alte cuvinte, atunci cnd adugai o component, cum
ar fi un buton, ntr-un container de nivel nalt, va fi adugat n content pane. n
mod implicit, panoul de coninut este o instan opaca a JPanel.
Pachetele Swing
Swing este un subsistem foarte mare i face uz de mai multe pachete care
sunt in tabelul alturat.
javax.swing.* javax.swing.plaf.basic javax.swing.text
javax.swing.border javax.swing.plaf.metal javax.swing.text.html
javax.swing.colorchooser javax.swing.plaf.multi javax.swing.text.html.parser
javax.swing.event javax.swing.plaf.nimbus javax.swing.text.rtf
javax.swing.filechooser javax.swing.plaf.synth javax.swing.tree
javax.swing.plaf javax.swing.table javax.swing.undo

Pachetul principal este javax.swing. Acest pachet trebuie s fie importat n orice
program care utilizeaz Swing. Acesta conine clasele care implementeaz
componentele Swing de baz, cum ar fi butoane, check boxes si etichetele.

Principalele componentele Swing definite in pachetul javax.swing.*;


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
- 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.
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 getContentPane():


JFrame win = new JFrame("Student la Informatica");

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 1

===
APLICAIE 2

Pentru a accesa continutul unei ferestre se va folosi


functia getContentPane():
Container c = win.getContentPane()

import javax.swing.*;
public class Aplic {
public static void main(String args[]) {
JFrame win = new JFrame("Aplicatia mea");
win.setSize(200, 200);
win.setLocation(30,100);
win.setResizable(false);
win.getContentPane().add(new JLabel("text pt
eticheta"));
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setVisible(true);
}}
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.

Exemple de componente din biblioteca javax.swing

JButton Un simplu buton de comand care poate fi apsat printr-un


click de mouse
JCheckBox Un buton care poate fi bifat
JComboBox 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
JFileChooser O component care asigur un mecanism simplu pentru
selectarea unui fiier
JLabel O component care conine un ir textual sau o imagine (nu
reacioneaz la evenimente de introducere/editare text)
JList O component care permite utilizatorului s selecteze unul
sau mai multe dintre elementele care le conine
JRadioButton Un buton de stare on/off. De obicei sunt organizate n
grupuri dintre care unul singur poate fi selectat pe poziia
on
JScrollPanel O component care gestioneaz o poriune vizualizabil
prin derularea coninutului n cadrul unui view
JSlider O component care permite utilizatorului s selecteze o
valoare prin rularea unui indicator pe o scal (asemenea
unui poteniometru)
JTextArea O zon care poate gzdui mai multe linii de text editabile
sau nu
JTextField O zon pentru introducerea unei singure linii de text

Principalele metode folosite n manipularea obiectelor JLabel:


Metoda Aciune
String getText() Obine Stringul afiat de ctre obiectul JLabel
void setText(String text) Stabilete printr-un String textul ce va fi afiat
int getHorizontalAlignment() Obine un ntreg care indic modul de aliniere a
coninutului etichetei relativ la axa x
int getVerticalAlignment() Obine un ntreg care indic modul de aliniere a
coninutului etichetei relativ la axa y
Icon getIcon() Obine obiectul Icon afiat de ctre obiectul
JLabel
void setIcon(Icon icon) Stabilete obiectul Icon afiat de componenta
JLabel
Component getLabelFor() Obine componenta care este etichetat folosind
obiectul JLabel
void Stabilete componenta care va fi etichetat cu
setLabelFor(Component c) obiectul JLabel
void Stabilete prin ntregul specificat modul de
setHorizontalAlignment(int aliniere relativ la axa x
alignament)
void Stabilete prin ntregul specificat modul de
setVerticalAlignment(int aliniere relativ la axa y
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();
}
}
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 Aciune
JTextField () Creeaz un nou cmp gol
JTextField (int columns) Creeaz un nou obiect JTextField fr coninut
de lungimea indicat (n coloane)
JTextField(String text) Creeaz un nou obiect JTextField coninnd
textul specificat
JTextField(String text, int Creeaz un nou obiect JTextField coninnd
columns) textul specificat i avnd (afind) lungimea
indicat (n coloane)

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.

Principalele metode ale componentei JTextField sunt:


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

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.
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

are
Container

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));

Observatie: distribuirea, localizarea si poziionarea obiectelor


ntr-o fereastr poate fi controlat folosind un anumit model de
gestionare -layout manager- care este utilizat 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
buton de comand (din clasa java.swing.JButton din Swing) se
realizeaz prin metoda:
var_JButton.setBounds(x, y, lime, lungime);

Adugarea unei componente (add) 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.
Pentru accesarea i configurarea propriului layout manager un
container are la dispoziie metodele getLayout i setLayout:

public LayoutManager getLayout();


public void setLayout(LayoutManager manager);

Distribuia Java furnizeaz mai multe clase care


implementeaz interfaa LayoutManager printre care
FlowLayout, BorderLayout, GridLayout, CardLayout,
GridBagLayout, BoxLayout, OverlayLayout.
Unele se gsesc n package-ul javax.swing, iar altele n
java.awt.
Caracteristicile de baz ale layout manager-ilor standard:

Componenta Descriere
FlowLayout Dispune sau aeaz componentele de la
stnga spre dreapta, de sus n jos. Este
layout manager-ul implicit(default) pentru
JPanel
BorderLayout Afieaz pn la cinci componente,
poziionate ca north nord, south
sud, east est, west vest i center
centru. Este layout manager-ul implicit
pentru panoul de componente al JFrame.
GridLayout Aeaz componentele ntr-un grid
bidimensional.
CardLayout Componentele sunt afiate pe rnd, dispuse
fiind prin suprapunere (parial).
GridBagLayout Afieaz componentele vertical i orizontal
funcie de un set re restricii specifice. Este
cel mai complex i mai flexibil layout
manager.
BoxLayout Afieaz componentele fie o singur linie
orizontal fie pe o singur coloan
vertical. Este layout-managerul implicit
pentru containerul Box din biblioteca
Swing.
OverlayLayout Afieaz componentele aa nct referinele
de aliniere ale lor indic acelai loc. Prin
urmare sunt dispuse sub forma unei stive:
unele deasupra celorlalte.

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() astfel:
add(InstantaButon);
Componente grafice SWING----- Butoane

Observatie: Una dintre clasele fundamentale din package-ul


javax.swing este clasa abstract JComponent, majoritatea
componentelor grafice folosite n Java sunt instane ale acesteia.

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);

import javax.swing.*;
import java.awt.*;
Rezultatul:
Rezultatul:
Rezultat:

Modificrile asupra grupului de componente dintr-un container


dup afiarea acestuia, va determina invalidarea lui. 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:

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");
cb2 = new JCheckBox(Optiune2");
cb1.setSelected(true);
JPanel checkPanel = new JPanel();
checkPanel.setLayout(new GridLayout(0, 1));
//GridLayout documentare parametrii
Aeaz componentele ntr-un grid bidimensional.
checkPanel.add(cb1);
checkPanel.add(cb2);
RadioButton -- JRadioButton
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);
primulbuton setActionCommand(BUTON 1);
//setActionCommand pentru a atasa actiuni butonului
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

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.
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.
JTable
Clasa JTable face parte din Swing si se extinde din Component, utilizeaza cate
un model din mai multe interfete de tip asculttor , cum ar fi
TableModelListener, TableColumnModelListener, ListSelectionListener ...
JTable este de obicei plasat ntr-un JScrollPane.

Fiecare JTable are trei modele


TableModel, TableColumnModel, si ListSelectionModel.
TableModel este folosit pentru a specifica modul n care datele tabelului se
stocheaz. Datele JTable este gestionat intr-o matrice cu dou dimensiuni sau un
vector de vectori. TableModel, de asemenea, este utilizat pentru a specifica modul
n care datele pot fi editate n tabel.
TableColumnModel este utilizat pentru a gestiona toate coloanele tabelului.
ListSelectionModel permite ca pentru tabel sa se definesca un alt mod de selectie,
ca de exemplu intervalul.
Constructorii pentru obiectul JTable sunt:
Tabel 1
JTable Constructors Description
JTable() Create an empty table
Create a table with rows and columns
JTable(int rows, int columns)
empty cell.
Create a table with data specify in
JTable(Object[][] data, Object[] heading) two-dimensional array data and
column heading heading
Create a table with a given
JTable(TableModel dm)
TableModel
Create a table with a given
JTable(TableModel dm, TableColumnModel cm) TableModel and
TableColumnModel.
Create a table with a given
JTable(TableModel dm,TableColumnModel cm,
TableModel, TableColumnModel,
ListSelectionModel sm)
and ListSelectionModel.
Create a table with data in vector of
JTable(Vector data, Vector heading) Vectors data and column headings
headin.
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);

Definirea celui mai simplu meniu este urmtoarea:

import java.awt.*;
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);
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:

Varianta 2
import java.awt.*; import java.awt.event.*;
import javax.swing.*; class MainMenuBar_1 extends JMenuBar{
JFrame frmParent; add(fileMenu);
public MainMenuBar_1() { add(editMenu);
JMenu fileMenu = new add(quitMenu);
JMenu("File"); }}
JMenu editMenu = new public class Meniuri extends JFrame{
JMenu("Edit"); public Meniuri() {
JMenu quitMenu = new this.setJMenuBar(new
JMenu("Quit"); MainMenuBar_1());
// Meniul File: Open, Save, Close this.setDefaultCloseOperation(JFrame.EXI
JMenuItem openItem = new T_ON_CLOSE);
JMenuItem("Open"); this.setSize(500, 500);
JMenuItem saveItem = new this.setVisible(true);
JMenuItem("Save"); }
JMenuItem closeItem = new public static void main(String[] args) {
JMenuItem("Close"); new Meniuri();
//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);
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.
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());

Categoriile de evenimente:

Categoria de Descriere
evenimente
Key Event Apsarea i eliberarea tastelor
Mouse Event Apsarea i eliberarea butoanelor mouse-ului
Drag & drop
Component Event Ascunderea, afiarea, redimensionarea sau
mutarea unei componente
Container Event Adugarea sau ndeprtarea unei componente
dintr-un container
Window Event Deschiderea, nchiderea, minimizarea
(iconificarea), reconstituirea (deiconificarea),
activarea, dezactivarea unei ferestre
Focus Event Preluarea sau pierderea focus-ului de ctre o
component
Action Event Eveniment de nivel nalt indicnd o aciune
definit la nivelul componentei (de exemplu un
buton poate fi apsat, un checkbox poate fi
selectat, apsarea tastei ENTER/RETURN
pentru un cmp de text)
Item Event Eveniment de nivel nalt care are loc atunci
cnd un utilizator selecteaz un checkbox,
buton radio sau opiune dintr-o list
DocumentEvent Generat de ctre un obiect TextComponent
atunci cnd i este modificat coninutul

Actiuni buton

JOptionPane contine trei metode, dup cum urmeaz:

showMessageDialog () care este folosit pentru a afia un mesaj


simplu.
showInputDialog () care este folosita pentru a afia un prompt.
Aceast metod returneaz o valoare ir care este scris de
utilizator.
showConfirmDialog () care solicit ghidul de confirmare (Da /
Nu), prin afiarea mesajului. Aceast metod returneaz o
valoare numeric fie 0 sau 1. Dac facei clic pe butonul "Yes",
apoi metoda returneaza 1 altfel 0
Exemplu 1
Exemplu 2 actiuni buton
Exemplu 3, actiune buton cu incrementare valoare eticheta
Exemplu 4 actiuni pe butoane

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Exemplu4 extends JFrame
{
private JButton button1;
private JButton button2;
private JButton button3;
private JTextField textField;
public Exemplu4()
{
MyButtonListener listener = new MyButtonListener();
button1 = new JButton("1");
button1.setActionCommand("Ati pasat Button 1");
button1.addActionListener(listener);
getContentPane().add(button1, BorderLayout.WEST);
button2 = new JButton("2");
button2.setActionCommand("Ati pasat Button 2");
button2.addActionListener(listener);
getContentPane().add(button2, BorderLayout.CENTER);
button3 = new JButton("3");
button3.setActionCommand("Ati pasat Button 3");
button3.addActionListener(listener);
getContentPane().add(button3, BorderLayout.EAST);
textField = new JTextField(20);
textField.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
String text = ((JTextField)e.getSource()).getText();
button1.setText(text);
button2.setText(text);
button3.setText(text);
} });
getContentPane().add(textField, BorderLayout.NORTH);
} public class MyButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
String actionCommand = e.getActionCommand();
textField.setText(actionCommand);
}
} public static void main(String[] args)
{Exemplu4 frame = new Exemplu4();
frame.pack();
frame.setVisible(true);
}}
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;
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 ");
}}

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! (1-
7)"); 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);
}

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));
}

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");

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() {
// 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.
Unitatea de invatare 4 - 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 stabilete o conexiune cu o baza de date, trimite
secvene SQL, prelucreaz rezultatele .
JDBC: o tehnologie care permite programelor Java sa interactioneze cu baze de
date relationale (folosind limbajul de interogare standard SQL).
JDBC un program prin care se poate stabili conexiuni cu diferite sisteme de baze
de date, e xecuta comenzi (SQL) pentru a crea, actualiza, manipula datele si a
receptiona rezultate cat si pentru a inspecta si manuipula meta-datele bazei de date
JDBC este un API care permite programului sa interactioneze cu un sistem de
gestiune a bazelor de date acesta (un server de baze de date) trebuie sa existe
separat !
Structura generala a unui program utilizand JDBC:
Incarca driver-ul JDBC potrivit sistemului de baze de date utilizat
(prin classname)

Deschidere conexiune (Connection) catre baza de date (folosind


URL)

Creaza instructiuni (Statement) (folosind Connection-ul care a fost


deschis)

Executa instructiunile/ proceseaza rezultatele, daca exista (printr-un


ResultSet returnat)

Inchide Connection

1. Incarca driver-ul JDBC potrivit sistemului de baze de date utilizat (prin


classname)
Un driver JDBC este nregistrat automat de managerul de drivere atunci cnd
clasa driver este ncrcat dinamic prin meoda Class.forName(). Metoda este
static i permite mainii virtuale Java s aloce dinamic, s ncarce i s fac o
legtur la clasa specificat ca argument al metodei. n cazul n care clasa nu este
gsit, se arunc o excepie ClassNotFoundException.
Exemplu pentru nregistrarea driver-ului JDBC-ODBC:
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);
Class.forName("org.apache.derby.jdbc.ClientDriver");

2. Deschide o conexiune (Connection) catre baza de date (folosind URL)

O conexiune este identificat printr-un URL specific. Sintaxa standard pentru


URL-ul
unei baze de date este: jdbc<subprotocol>:<nume>
jdbc arat c se folosete JDBC pentru stabilirea conexiunii;
<subprotocol> este un nume de driver valid;
<nume> este un nume logic sau alias care corespunde bazei de date fizice.
Dac baza de date este accesat prin Internet, atunci seciunea <nume> va fi de
forma
//numeHost:port/numeDB Page

La stabilirea conexiunii la baza de date, se folosete metoda static


getConnection() din clasa DriverManager:

Exemplu 1

Connection con=DriverManager.getConnection(jdbc:odbc:myMessages,
Utilizator,Parola);
Exemplu 2
String url = "jdbc:derby://localhost:1527/student1;create=true";
Connection con =DriverManager.getConnection(url,"root","123");

3. Creaza instructiuni (Statement) (folosind Connection-ul care a fost


deschis)

Statement stmt = con.createStatement();


//metoda createStatement() se aplica unui obiect de tip t Connection;

4. Executia instructiunii

Se poate aplica apoi una din urmtoarele metode:


a. executeUpdate() pentru operaiile de actualizare INSERT,
UPDATE, DELETE, ct i
pentru interogrile SQL DDL de genul CREATE TABLE, DROP TABLE,
ALTER TABLE. Metoda returneaz un ntreg care reprezint fie numrul
nregistrrii afectate, fie
este 0.
Exemplu:
createString = "create table EXAMEN2 (Nume_Curs varchar(32),Ora
varchar(32), Zi int,Luna int,An int , Tip varchar(32), Locatie
varchar(32),persoana_Examinata varchar(32))";

stmt.executeUpdate(createString);

b. executeQuery() pentru interogrile care returneaz mulimi rezultat


(instane ale clasei

ResultSet). Este cazul instruciunilor SELECT.

c. execute() se utilizeaz atunci cnd se obine mai mult de o mulime


rezultat.

5. Inchide Connection

stmt.close();

Observatie: se va folosi pachetul java.sql.*

Aplicatie:
Sa se creeze baza de date Student, iar in aceasta tabela Examen cu structura:
Structura tabele va fi creata cu ajutorul unui program Java. Comensiune ala baza
de date se va face pe baza de user si parola.
Rezolvare:
Se creaza baza de date

Se realizeaza conectarea la baza de date


Se creeaza o aplicatie Java

Se adauga la la proiectul cursant driverul JavaDB utilizat, in cazul nostru

Programul sursa este:


Sa se creeze interfata pentru definirea structurii tabelelor
new AdaugareCursuri().setVisible(true);

Sa se realizeze interfata care populeaza tabelele definite la punctual precedent


Actiunea corespunzatoare butonului Adaugare este:

Connection dB=null;
String s1= jTextField1.getText();
String s2= jTextField2.getText();
String s3= jTextField3.getText();
String s4= jTextField4.getText();
int int1=Integer.parseInt(s1);
//int int3=Integer.parseInt(s3);
String dbURL =
"jdbc:derby://localhost:1527/test45;create=true;user=me;password=mine";
String tableName = "credite";
// jdbc Connection
Connection conn = null;
Statement stmt = null;
try
{
Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
//Get a connection
conn = DriverManager.getConnection(dbURL);
}
catch (Exception except)
{ except.printStackTrace(); }
try
{ stmt = conn.createStatement();
stmt.execute("insert into " + tableName + " values (" +
int1 + ",'" + s2 + "','" + s3 +"','" + s4 +"')");
jLabel6.setText(" Inregistrarea a fost adaugata cu succes");
stmt.close(); }
catch (SQLException sqlExcept)
{ sqlExcept.printStackTrace(); }
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
jTextField4.setText("");
Fisare date introduce

String url =
"jdbc:derby://localhost:1527/test45;create=true;user=me;password=mine";
String tableName = "studenti";
// jdbc Connection
Connection conn = null;
Statement stmt = null;
try
{
Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
//Get a connection
conn = DriverManager.getConnection(url);
}
catch (Exception except)
{
except.printStackTrace();
}
try{
int int1=0;
String s1=new String();
s1=this.jTextField1.getText();
int1=Integer.parseInt(s1);

conn = DriverManager.getConnection(url);

Statement stmt1 = conn.createStatement();


ResultSet rs=stmt1.executeQuery("SELECT * FROM studenti where
matr="+int1);
System.out.println("aa");

while(rs.next())
{jTextField2.setText(rs.getString("nume_st"));
jTextField3.setText(rs.getString("an_st"));
jTextField4.setText(rs.getString("grupa"));
jTextField5.setText(rs.getString("telefon"));
}

jLabel6.setText(" Inregistrarea a fost afisata");


}
catch(SQLException e)
{
JOptionPane.showMessageDialog(rootPane, e.toString(),"Error 1111...",
JOptionPane.INFORMATION_MESSAGE);
}
Unitatea de invatare 5 - 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.

init 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.
stop cnd appletul nu mai este vizibil (pagina Web nu mai este vizibila,
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.
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.
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.

<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);
}}
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);
}
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);
}

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);
}
}
Unitatea de invatare 6 - REALIZAREA
INTERFETELOR PENTRU APLICATII ANDROID

Fiier APK
JAR nearhivat
Componente
Fiier .dex http://source.android.com/devices/tech/dalvik/dex-
format.html
Resurse
Imagini
Fiiere XML

Atentie:

Fiier APK este un JAR nearhivat


Componente
Fiier .dex http://source.android.com/devices/tech/dalvik/dex-
format.html
Resurse
Imagini
Fiiere XML
Manifest
Fiier de informaii

Compiled Android application code file.


Android programs are compiled into .dex (Dalvik Executable) files, which
are in turn zipped into a single .apk file on the device. .dex files can be created
by automatically translating compiled applications written in the Java
programming language.

About the .dex File :

One of the most remarkable features of the Dalvik Virtual Machine (the
workhorse under the Android system) is that it does not use Java bytecode.
Instead, a homegrown format called DEX was introduced and not even the
bytecode instructions are the same as Java bytecode instructions.

Compiled Android application code file.

Android programs are compiled into .dex (Dalvik Executable) files, which
are in turn zipped into a single .apk file on the device. .dex files can be
created by automatically translating compiled applications written in the
Java programming language.

Dex file format:

1. File Header
2. String Table
3. Class List
4. Field Table
5. Method Table
6. Class Definition Table
7. Field List
8. Method List
9. Code Header
10. Local Variable List

Android has documentation on the Dalvik Executable Format (.dex files).


You can find out more over at the official docs: Dex File Format

.dex file is like same as the java class file but it seems to run under DVM.

You can decompile .dex using dexdump tool which is provided in android-
sdk.

Instalarea software-urilor necesare


http://developer.android.com/sdk/index. html

Pentru aplicatii Android se instaleaza Android SDK (Software Development Kit),


care include un set complet de instrumente de dezvoltare (program de depanare,
biblioteci, emulator etc) si plugin-ul pentru Eclipse - ADT (Android Development
Tools).
Android SDK Manager

Dupa ce ati descarcat arhiva de Android SDK, rulati executabilul android.exe


Selectati urmatoarele pachetele corespunzatoare pentru a fi instalate.

ADT

Se instaleaza plugin-ul pentru Eclipse, ADT.


In Eclipse, selectam Help->Install New Software. Apasam butonul
Add si va aparea fereastra urmatoare:

Numele va fi ADT Plugin, iar la Location scriem

https://dl-ssl.google.com/android/eclipse

Creare unei aplicatii Android

Pentru a crea o aplicatie Android vom deschide Eclipse si vom selecta File-
>New->Project, dupa care vom selecta Android Application
Project.
In campurile Application Name si Project Name se va introduce numele
aplicatiei, iar in campul Package Name se va introduce numele pachetului care
va contine aplicatia noastra.
In campul Target SDK se va selecta versiunea de Android pentru care se
creeaza proiectul, iar in campul Minimum Required SDK se va selecta cea
mai veche versiune de Android pe care poate rula aplicatia noastra.
Structura unei aplicatii se poate observa in fereastra de Package Explorer.

In directorul src se gaseste intregul cod sursa; In directorul gen se afla un fisier
Java cu ID-uri catre resurse; In bin vom gasi programul compilat. Directorul
res contine mai multe directoare drawable in care se salveaza imaginile folosite
de aplicatie.

In layout gasim fisierul ce reprezinta interfata


grafica, separata de codul programului.

In directorul res din bin exista fisierul AndroidManifest.xml.

In care s ava scrie detalii despre permisiunile si versiunea aplicatiei etc


Fisierul este de forma:

<?xml version="1.0" encoding="utf-8"?>


<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.ex.utm.ro"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="21" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action
android:name="android.intent.action.MAIN" />

<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>

</manifest>

Pentru a rula aplicatia, este necesar un simulator ce poate fi creat


astfel: Window->AVD Manager
Controale in Android (widget-uri)
http://developer.android.com/reference/android/view/View.html

In Android, un control (pentru care se utilizeaza si denumirea de widget) este de


regula derivat din clasa android.view.View, unde sunt definite cateva
caracteristici de baza cu privire la dimensiuni si la modul de dispunere:

ATRIBUT DESCRIERE
layout_width latimea obiectului
layout_height inaltimea obiectului
layout_marginTop spatiu suplimentar ce trebuie alocat in partea de sus a obiectului
layout_marginBottom spatiu suplimentar ce trebuie alocat in partea de jos a obiectului
layout_marginLeft spatiu suplimentar ce trebuie alocat in partea din stanga a obiectului
layout_marginRight
spatiu suplimentar ce trebuie alocat in partea din dreapta a
obiectului
layout_gravity
modul de pozitionare a elementelor componente in cadrul unui
container
layout_weight
proportia pe care o are controlul, raportata la intregul continut al
containerului
layout_x pozitia pe coordonata x
layout_y pozitia pe coordonata y

Valorile pe care le pot lua atributele layout_width si layout_height


sunt:

match_parent - daca se doreste ca obiectul sa ocupe tot spatiul pe care


il pune la dispozitie containerul sau;
wrap_content - daca se doreste ca obiectul sa fie restrans la
dimensiunile continutului sau.

De asemenea, pot fi specificate valori absolute, exprimate in una din unitatile de


masura:

dp - pixel independent de rezolutie

sp - pixel independent de scala, echivalent cu dp


pt - punct, echivalent cu 1/72 inchi, bazat pe dimensiunile ecranului
px - pixel, corespunzator unui pixel al dispozitivului mobil

Specificarea dimensiunii ecranului unui dispozitiv mobil se face prin indicarea


numarului de pixeli pe orizontala si pe verticala. Pentru a obtine rezolutia
dispozitivului respectiv, se imparte dimensiunea exprimata in pixeli la
dimensiunea exprimata in inchi si apoi se va compara valoarea obtinuta cu una
dintre valorile standard definite pentru incadrarea dispozitivului mobil intr-o
anumita categorie de rezolutie:

120 dpi - ldpi (Low Density)


160 dpi - mdpi (Medium Density)
240 dpi - hdpi (High Density)
320 dpi - xhdpi (Extra High Density)
480 dpi - xxhdpi (Extra Extra High Density)

Formula de conversie intre pixeli (px) si pixeli independenti de rezolutie (dp)


este:

px = dp * (resolution_category) / 160

Se observa ca 1 px este echivalent cu 1 dp pe un ecran cu rezolutia 160 dpi,


considerata drept referinta in Android.

Dimensiunea (exprimata in pixeli) a unui control poate fi obtinuta cu metodele


getWidth si getHeight.
Controale de tip text
http://developer.android.com/reference/android/widget/AutoCompleteTextView.
html

Android pune la dispozitia programatorilor un set complet de controale de tip text,


dintre care cele mai utilizate sunt TextView, EditText,
AutoCompleteTextView si MultiCompleteTextView.

1. TextView

Controlul de tip TextView este utilizat pentru afisarea unui text catre utilizator,
fara ca acesta sa aiba posibilitatea de a-l modifica. Deci ca o componenta de acest
tip nu implementeaza doar functionalitatea unei etichete, ea putand fi utilizata si
pentru a realiza anumite actiuni, in cazul in care continutul pe care il afiseaza are
un format cunoscut ca de exemplu:

http://www.technotalkative.com/android-textview-autolink-attribute/

android:autoLink=web ; android:autoLink=email ;
android:autoLink=phone android:autoLink=map

2. EditText

EditText este o componenta utilizata pentru obtinerea unui text de la utilizator.


Printre functionalitatile sale, sunt incluse posibilitatea de a corecta un text
(proprietatea inputType are valoarea textAutoCorrect) sau de a accepta
doar valori care respecta un anumit format (numar de telefon, adresa de posta
electronica, parola, numar zecimal (cu sau fara semn), data calendaristica, ora).

In mod obisnuit, valoarea introdusa va fi afisata doar pe o linie. Daca se doreste


redimensionarea controlului pe masura ce este introdus un text de dimensiuni
mai mari, va trebui specificata proprietatea
inputType=textMultiLine.

3. AutoCompleteTextView

Controlul de tip AutoCompleteTextView indica utilizatorului anumite


valori cu care poate fi completat, in functie de continutul pe care acesta il are
acesta la un moment dat, pe baza unei liste de sugestii.

AutoCompleteTextView autoCompleteTextView1 =
(AutoCompleteTextView)findViewById(R.id.autoCompleteTextView1);

String[] suggestions = {"bmp", "gif", "png"};


ArrayAdapter<String> arrayAdapter1 = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_utem_1line, suggestions);
autoCompleteTextView1.setAdapter(arrayAdapter1);

Sugestia este oferita pentru intregul continut al componentei, astfel incat daca se
doreste specificarea mai multor cuvinte, nu se va lua in calcul fiecare dintre
acestea.

4. Controale de tip buton

In Android pot fi utilizate mai multe tipuri de butoane, intre care Button
(buton ce are atasat un text), ImageButton (buton ce are atasata o imagine),
ToggleButton si CheckBox (controale ce pot avea doua stari - selectat sau
nu), RadioButton / RadioGroup (grupuri de butoane ce pot avea doua stari
- selectat sau nu, asigurandu-se totodata excluziunea mutuala intre acestea).

5. Button

O componenta de tip buton ce are atasat un text este definita de clasa


android.widget.Button, fiind caracterizata prin proprietatea text, ce
contine mesajul pe care acesta il va afisa.

Intrucat un buton este un tip de control ce interactioneaza cu utilizatorul, pentru


aceasta trebuie definita o clasa ascultator (ce implementeaza
View.OnClickListener) pentru tratarea evenimentelor de tip apasare.
Aceasta defineste o metoda onClick ce primeste ca parametru componenta (de
tip View) care a generat evenimentul respectiv.

6. ImageButton

Un obiect de tip ImageButton (definit de clasa


android.widget.ImageButton) este utilizat pentru afisarea unei imagini,
specificata in fisierul XML prin proprietatea android:src sau programatic
prin intermediul metodei setImageResource.

Imaginea asociata unui buton de tip ImageButton este o resursa din


directorul /res/drawable/ (accesibila in XML prin adnotarea
@drawable/ sau programatic prin referinta sa din clasa R.drawable.

Formatele suportate sunt png, jpeg, gif si bmp.

7. ToggleButton

Un obiect ToggleButton (definit de android.widget.ToggleButton)


este un tip de buton care are asociata o stare cu doua valori (selectat si neselectat),
asemenea unui checkbox sau radiobutton. Implicit, atunci cand este selectat,
acesta afiseaza o bara de culoare verde in partea sa inferioara, iar atunci cand nu
este selectat, o bara de culoare gri. Textele afisate pentru valorile starilor pot fi
controlate in fisierul XML prin intermediul proprietatilor android:textOn
respectiv android:textOff, iar programatic prin metodele setTextOn si
setTextOff.

8. CheckBox

Controlul de tip CheckBox (din clasa android.widget.CheckBox) este


tot un element de tip buton ce poate avea doua stari (selectat si neselectat),
accesibile prin intermediul proprietatii checked (android:checked in
fisierul XML si setChecked() sau toggle() in codul sursa).

Desi este definit un tip de eveniment asociat selectiei sau deselectiei acestei
componente (specificat de interfata
CompoundButton.OnCheckedChangeListener pentru care trebuie
implementata metoda onCheckedChange), de cele mai multe ori nu i se
asociaza o clasa ascultator, verificandu-se starea sa prin intermediul metodei
isChecked la producerea unui alt eveniment.

9. RadioButton / RadioGroup

Un element de tip android.widget.RadioButton este tot un buton cu


doua stari (selectat / neselectat), de obicei utilizat pentru selectia unei singure
optiuni dintr-o lista, excluderea mutuala fiind realizata prin includerea mai
multor obiecte intr-o componenta de tip android.widget.RadioGropup.

Un obiect de tip RadioButton se poate afla si in afara unui grup la fel cum un
obiect de tip RadioGroup poate contine si alte controale decat butoane.

10.Controale de tip multimedia

Android pune la dispozitia utilizatorilor mai multe controale pentru redarea


continuturilor de tip multimedia, dintre care cele mai folosite sunt ImageView
(pentru imagini) si VideoView (pentru continut video).

11.ImageView

Controlul de tip ImageView este utilizat pentru afisarea unei imagini, aceasta
putand proveni:

dintr-o resursa a aplicatiei Android, ce poate fi specificata


o in fisierul XML prin proprietatea
android:src=@drawable/ (se poate indica si codul unei
culori in formatul #RRGGBB)
o sau folosind una din metodele
setImageResource, care primeste ca parametru
identificatorul resursei din clasa R.drawable
setImageBitmap, ce primeste un parametru de tip
Bitmap incarcat din resursa respectiva, ulterior putand fi
realizate si unele modificari
ImageView imageView1 =
(ImageView)findViewById(R.id.imageView1);
Bitmap bitmap1 =
BitmapFactory.decodeResource(this.getResources(),
R.drawable.image1);

12.VideoView

Controlul de tip VideoView este utilizat pentru redarea de continut video, intr-
unul din formatele H.263, H.264 AVC, MPEG-4 SP sau VP8. Continutul
acestui control poate fi specificat prin una din metodele
setVideoPath(String) sau setVideoUri(Uri), prin care se indica
locatia unui fisier stocat pe dispozitiv sau aflat la distanta, pe un server.

Pentru a se putea accesa continutul aflat la distanta, in fisierul


AndroidManifest.xml trebuie sa se specifice o permisiune explicita in
acest sens:
<uses-permission
android:name=android.permission.INTERNET />

Metodele pe care le pune la dispozitie un astfel de obiect pentru controlul


procesului de redare sunt start(), pause(), respectiv stopPlayback().
De asemenea, se pot verifica anumiti parametri ai continutului prin metodele
isPlaying(), getDuration() si getCurrentPosition().

13.Controale pentru gestiunea datei calendaristice si a timpului

Majoritatea bibliotecilor de controale pun la dispozitia dezvoltatorilor


componente pentru gestiunea informatiilor legate de data calendaristica si timp.
In Android, cele mai frecvent uzitate elemente de acest tip sunt DatePicker,
TimePicker, AnalogClock si DigitalClock.

14.DatePicker

Obiectul de tip DatePicker este folosit pentru gestiunea componentelor unei


date calendaristice (zi, luna, an).

Initializarea unei astfel de componente se realizeaza prin metoda init, ce


primeste ca parametrii anul, luna, ziua si o clasa ascultator (ce implementeaza
interfata DatePicker.OnDateChangedListener cu metoda
onDateChanged). Continutul controlului se obtine prin metodele
getDayOfMonth(), getMonth(), respectiv getYear().
15.TimePicker

Obiectul de tip TimePicker este folosit pentru gestiunea componentelor


timpului (ora, minut).

16.AnalogClock

Obiectul de tip AnalogClock este folosit pentru afisarea timpului curent,


folosind un ceas analogic. Utilizatorul nu poate interactiona cu un astfel de
control, insa actualizarea continutului sau este realizata in mod automat.

17.DigitalClock

Obiectul de tip DigitalClock este folosit pentru afisarea timpului curent,


folosind un ceas digital. Utilizatorul nu poate interactiona cu un astfel de
control, insa actualizarea continutului.

Mecanisme pentru dispunerea controalelor (layout)

Controalele Android fac parte din cadrul unui grup (obiect de tip
android.view.ViewGroup) care defineste si modul in care acestea sunt
dispuse in cadrul interfetei grafice precum si dimensiunile pe care le pot lua, motiv
pentru care o astfel de componenta este referita si sub denumirea de layout. Acest
element nu vizeaza insa tratarea evenimentelor legate de interactiunea cu
utilizatorul.

Cele mai utilizate tipuri de grupuri de componente vizuale sunt

LinearLayout
AbsoluteLayout
RelativeLayout
FrameLayout
ScrollLayout
TableLayout
GridLayout.

Elementele de tip layout pot fi imbricate (continute) unele intr-altele, astfel incat
se pot proiecta interfete grafice in care modul de dispunere al controalelor sa fie
foarte complex, prin combinarea functionalitatilor pe care le ofera fiecare dintre
componentele de tip ViewGroup.

Exemplul 1:

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TextView android:id="@+id/txtName"
android:layout_alignParentLeft="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/EditText01"
android:text="EditText left: ">
</TextView>
<EditText
android:id="@+id/EditText01"
android:layout_width="260dip"
android:layout_alignParentRight="true"
android:layout_height="wrap_content"
android:text="EditText right">
</EditText>
<Button android:id="@+id/topBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Buton -center horizontal-"
android:layout_centerHorizontal="true"
android:layout_below="@id/EditText01">
</Button>
</RelativeLayout>

Exemplul 2:

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="fill_parent">
<TextView android:id="@+id/txtName"
android:layout_alignParentLeft="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toLeftOf="@+id/EditText01"
android:text="EditText stanga ">
</TextView>
<EditText
android:id="@+id/EditText01"
android:layout_width="260dip"
android:layout_alignParentRight="true"
android:layout_height="wrap_content"
android:text="EditText dreapta">
</EditText>
<Button android:id="@+id/topBtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Buton -center horizontal-"
android:layout_centerHorizontal="true"
android:layout_below="@id/EditText01">
</Button>
<LinearLayout android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:orientation= "vertical"
android:layout_below="@id/topBtn">
<Button
android:id= "@+id/Button01"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "Acesta este un buton intr-un linear layout"/>
<EditText
android:id= "@+id/EditText01"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "Acesta este un EditText intr-un linear layout"/>
<TextView
android:id= "@+id/TextView01"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "Acesta este un TextView intr-un linear layout"/>
</LinearLayout>
</RelativeLayout>

Depanare aplicatiilor pentru Android

Depanarea este foarte importanta in procesul de realizare a aplicatiilor pentru


dispozitive mobile.

DDMS

Utilitarul pentru depanarea aplicatiilor pentru Android se numeste DDMS


(Dalvik Debug Monitor System)

Activarea se face din meniul:

Window -> Open Perspective -> DDMS

Utilizare

Cele mai importrante functii pe care DDMS le poate indeplini sunt: Afisarea
log-urilor dispozitivelor, afisarea informatiilor despre procesele curente si
controlul simulatoarelor

Hierachy Viewer

Un alt program foarte util pentru depanare este hierachyviewer si afiseaza


parametrii fiecarui View si timpul de incarcare al acestuia. Putem analiza cu
acest program orice aplicatie (componenta) ce ruleaza pe un dispozitiv. Ne
putem astfel inspira asupra modului in care este construita interfata grafica.

Activarea se face din meniul:


Window -> Open Perspective -> Hierarchy Viewer

Vizualizarea ierarhiei de View-uri

La fel ca DDMS, hierachyviewer functioneaza atat cu simulatoare cat si cu


dispozitive reale. La pornire, este afisata lista dispozitivelor conectate. Se alege
un dispozitiv (stanga) si o componenta ce ruleaza pe acel dispozitiv (dreapta) si
se apasa butonul Load View Hierarchy. Daca nu s-a ales nici o componenta,
programul va afisa componenta ce este in capatul Task-ului curent.
Aplicatia 1

Se defineste interfata in fisierul activity_mail.xml folosind modul asistat ca in


figura alaturata, in care s-a definit un element TextView si un Button

Codul corespunzator fisierului xml este in figura de mai jos, in care se observa
ca la evenimentul onClick de pe button se va apela functia apasa_pe_buton(),
functie care va fi definite in programul principal MainActivity

Prin comanda atasata butonului in fisierul xml, :


android:onClick="apasa_pe_buton" se face legatura cu
programul java.
Metoda apasa_pe_buton() arata:
public void apasa_pe_buton(View v)
{
Toast.makeText(this, "Spor la invatat!", Toast.LENGTH_SHORT).show();

In urma executie programului, efectul este cel din figura de mai jos.
Aplicatia 2
Activity_mail.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dip"
android:text="@string/titlu_aplicatie"
android:textSize="16dip" />
<Button
android:id="@+id/afiseaza_mesaj"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/notificare"
android:layout_marginTop="56dp"
android:text="@string/text_afiseaza_notificare" />
<EditText
android:id="@+id/notificare"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="42dp"
android:ems="10"
android:hint="@string/hint_notificare" />
</RelativeLayout>

Fisierul string.xml
MainActivity.java

public class MainActivity extends Activity implements


OnClickListener {

@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Button btnNotificare =
(Button)findViewById(R.id.afiseaza_mesaj);

btnNotificare.setOnClickListener(this);
}

@Override
public void onClick(View v) {
EditText textNotificare =
(EditText)findViewById(R.id.notificare);

Toast toast = Toast.makeText(getApplicationContext(),


textNotificare.getText(), Toast.LENGTH_SHORT);
toast.show();
}}
Efectul actiunii este:

Proiectarea interfetelor grafice pentru aplicatiile Android


Pentru fiecare activitate se va construi un fisier .xml in directorul res/layout care
va descrie continutul interfetei grafice precum si modul de dispunere al
controalelor component, asa cum rezulta din exemplele 1 si 2.
Eclipse pune la dispozitia programatorilor:
un utilitar continand biblioteci de controale, in care interfata grafica poate
fi definita prin operatii de tip drag-and-drop
un editor text in care proprietatile acestor elemente pot fi specificate manual
Se observa ca utilitarul vizual poate fi accesat din panoul Graphical Layout,
putand fi specificate dispozitivul mobil pentru care se proiecteaza interfata
grafica, orientarea ecranului etc.

Editorul de text pentru ecranul precedent arata:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<TextView
android:id="@+id/textView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="10dip"
android:text="@string/titlu_aplicatie"
android:textSize="16dip" />

<Button
android:id="@+id/afiseaza_mesaj"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/notificare"
android:layout_marginTop="56dp"
android:text="@string/text_afiseaza_notificare" />

<EditText
android:id="@+id/notificare"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="42dp"
android:ems="10"
android:hint="@string/hint_notificare" />

</RelativeLayout>

Fiecare control din cadrul interfetei grafice va avea un marcaj corespunzator,


denumirea acestuia fiind identica cu cea a clasei care implementeaza
functionalitatea (in general din pachetul android.widget).

Un control care va fi referit ulterior (fie in codul sursa, fie in fisierul XML) trebuie
sa aiba asociat un identificator, indicat prin proprietatea android:id.

In momentul in care este definit are forma @+id/identificator si


@id/identificator pentru referirile ulterioare.

Pentru o componenta ce defineste un utilizator, se genereaza o referinta in


clasa id din fisierul R.java.

Elementele interfetei grafice sunt caracterizate prin anumite proprietati ca:


pozitionarea, dimensiunile, tipul de date acceptate de la utilizator, informatiile
ajutatoare etc. Fiecare astfel de parametru va fi specificat prin sintaxa
android:proprietate=valoare unde proprietate si valoare
trebuie sa respecte restrictiile definite in clasa ce descrie controlul respectiv.

Observatie: O interfata grafica poate fi definita si in codul sursa daca se


creeaza initial un obiect container (de tip Layout) care va cuprinde toate
controalele, acesta fiind argumentul cu care va fi apelata metoda
setContentView().

Exemplu:

public class MainActivity extends Activity {

@Override
public void addTelephone(){
//form
TableLayout table = (TableLayout)findViewById(R.id.table);
//new row
TableRow tr = new TableRow(NewRequestActivity.this);
LayoutParams ltr = new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT);
ltr.setMargins(0, 0, 0, 2500);
tr.setLayoutParams(ltr);
//new field
EditText et = new EditText(NewRequestActivity.this);
et.setHint("telephone");
et.setInputType(InputType.TYPE_CLASS_NUMBER);
et.requestFocus();
Resources res = getResources();
float fontSize = res.getDimension(R.dimen.input_form) /
getResources().getDisplayMetrics().density;
et.setTextSize(fontSize);

LayoutParams let = new LayoutParams(0, LayoutParams.WRAP_CONTENT, 1);


et.setLayoutParams(let);
ImageView img = new ImageView(NewRequestActivity.this);
img.setTag("img_"+counttelf);
img.setImageResource(R.drawable.more);
img.setBackgroundResource(R.drawable.imagefocused);
img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.setVisibility(View.GONE);
addTelephone();
}
});
LayoutParams limg = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
img.setLayoutParams(limg);
tr.addView(et, 0);
tr.addView(img, 1);
table.addView(tr, ++indextelf);
}
}
Modele bilete pentru examen
Nr 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.
Nr 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).
n dorina de ridicare continu a standardelor desfurrii activitatilor dumneavoastra, va
rugm s completai acest chestionar i s-l transmitei indrumatorului de an.

Disciplina: ________________________
Unitatea de invatare/modulul:__________________
Anul/grupa:__________________________
Tutore:_________________________

Partea I . Coninut

1. Care dintre subiectele tratate in aceasta unitate/modul considerai c este cel mai util i
eficient? Argumentati raspunsul.

2. Ce aplicatii/proiecte din activitatea dumneavoastra dorii s


imbunatatiti/modificai/implementai n viitor n urma cunotinelor acumulate n cadrul acestei
unitati de invatare/modul?

3. Ce subiecte considerai c au lipsit din acesta unitate de invatare/modul?

4. La care aplicatii practice ati intampinat dificultati in realizare? Care credeti ca este motivul
dificultatilor intalnite?

5. Timpul alocat acestui modul a fost suficient?

6. Daca ar fi sa va evaluati cunostintele acumulate din parcurgerea unitatii de invatare/modului,


care este nota pe care v-o alocati, pe o scala de la 1-10?. Argumentati.

Partea II. Impresii generale

1. Acest modul a ntrunit ateptrile dumneavoastr?

n totalitate n mare msur n mic msur


Nu

2) Avei sugestii care s conduc la creterea calitii acestei unitati de invatare/modul?

3) Avei propuneri pentru alte unitati de invatare?Argumentati.

V mulumim pentru feedback-ul dumneavoastr!