Documente Academic
Documente Profesional
Documente Cultură
FACULTATEA DE INFORMATICA
PROIECTAREA INTERFEŢELOR
GRAFICE
- 2009 -
1
Cuprins
Modulul I. JAVA. GENERALITATI
Modulul II. GRAPHIC USER INTERFACE
Modulul III. UTILIZARE NETBEANS
Modulul IV. COMPONENTELE SWING
Modulul V. LUCRU CA BAZE DE DATE IN JAVA
Modulul VI. APPLET-URI
Modulul VII. APLICATII WEB IMPLEMENTATE IN
JAVA
Modulul VIII. ALTE APLICATII
Bibliografie
Model bilet examen
JAVA. GENERALITĂŢI
Java este un mediu de programare ce oferă utilizatorului cadrul necesar şi uneltele necesare
pentru dezvoltarea aplicaţiilor Java. Java este o tehnologie ce oferă suport dezvoltării de
aplicaţii distribuite, independente de platformă.
Programele Java pot rula pe diferite tipuri de platforme, cu condiţia ca pe aceste
platforme să fie instalată o maşină virtuală Java deasupra platformei respective. Avantajul
limbajului Java, comparativ cu alte limbaje de programare este conexiunea strânsă cu
tehnologia Internet.
Caracteristicile limbajului Java care l-au făcut şi-l fac un limbaj de succes pe piaţa
actuală de software sunt prezentate in continuare:
Simplitate
Limbajul Java prezintă concepte fundamentale care sunt deosebit de simple.
Programarea Java se poate învăţa în câteva săptămâni. Părţile redundante din alte limbaje au
fost îndepărtate şi s-au păstrat doar părţile strict necesare.
Tot în vederea simplităţii, tehnologia Java conţine aşa numitul Garbage Colector,
care face ca programatorul să nu mai aibă grija dezalocării zonelor de memorie anterior
alocate. Pentru cunoscătorii limbajului C++ acest lucru înseamnă că nu mai e nevoie de
delete după new.
Orientat pe obiecte
Limbajul Java , spre deosebire de C/C++, este în întregime orientat pe obiecte. Nu
există o aplicaţie în care să nu existe cel puţin un obiect, o clasă. În Java, orice, cu excepţia
câtorva tipuri de date fundamentale, este un obiect. Tehnologia programării orientate pe
obiecte (OOP – Object Oriented Programming) este singura care satisface cerinţele actuale
ale dezvoltării software.
Robust
Se măreşte gradul de siguranţă al codului. Sunt două nivele de verificare pentru
mărirea gradului de siguranţă: unul la compilare (prezent în marea majoritate a limbajelor) şi
unul în timpul rularii. Ca urmare un program este mai puţin supus erorilor.
Securitatea
Într-o lume în care calculatoarele nu mai pot exista ca enităţi solitare, fără a fi
conectate în reţea, problema securităţii este una din cele mai stringente. Problema care se
pune este aceea a existenţei unui nivel de securitate în cadrul limbajului.Unul din principalele
avantaje ale limbajului Java care l-au făcut atât de popular este gradul de securitate.
Programele Java sunt făcute să ruleze în sisteme distribuite, şi calculatoarele pe care ele
lucrează nu pot fi sigure de provenienţa programelor.
Dinamic
Java este un limbaj dinamic prin faptul că multe decizii privind evoluţia programului
se iau în momentul rulării, la runtime. Datorită faptului că multe din aplicaţiile Java sunt
preluate de pe Internet sub forma de applet-uri chiar în momentul execuţiei lor, deci din reţea,
aceste programe pot fi actualizate să facă faţă noilor cerinţe, utilizatorul dispunând în orice
moment de cea mai nouă variantă.
Independent de platformă
Unul din marile avantaje ale limbajului Java este independenţa de platformă. Se
impunea această independenţă de platformă, ţinând cont de ideea de lucru în medii distribuite.
3
De fapt un program Java lucrează pe o singură maşină: maşina virtuală Java ( Java Virtual
Machine- JVM ).
Ca urmare a utilizării emulatorului un program Java poate rula pe orice platformă
pentru care există un emulator Java. Partea negativă este caă folosirea emulatorului duce la
marirea timpului de execuţie. Soluţia este compilarea just-in-time (JIT) care transformă
întregul program Java în program maşină înainte de execuţia lui.
Compilatoarele just-in-time lucrează ca şi interpretoarele doar că conversia nu se face
la nivel de instrucţiune ci la nivel de program, crescând considerabil viteza de execuţie a
programului Java.
Suport pentru multithreading
Multithreading-ul este cel care permite ca un program să execute mai multe sacini
aparent în acelaşi timp, utilizând mai multe fire de execuţie (thread-uri).
Java oferă suport multithreading la nivel de limbaj deci la cel mai jos nivel (clasa
Thread) oferindu-i utilizatorului posibilitatea de a crea un nou fir de execuţie ca şi cum ar
creea oricare alt obiect. Mai mult, Java permite comunicarea între firele de execuţie precum şi
sincronizara lor.
Interconexiunea cu browsere WWW
Acesta este unul din avantajele care a facut limbajul Java aşa de popular. Multe din
firmele care dezvoltă browsere WWW au implementat maşina virtuală Java în interiorul
acestor browsere.
Amintim cele mai utilizate browsere care suportă Java: Netscape Navigator al firmei
Netscape şi Internet Explorer al firmei Microsoft.
Având în vedere aceste caracteristici, Java s-a conturat ca un limbaj performant, care s-a
impus în lumea informaticii.
Pachetul JDK
4
Cuvântul cheie import este folosit pentru a face cunoscută utilizarea unei
clase dintru-un package sau a unui întreg package.
Exemplu:
import java.sql.*;
import java.awt.Graphics;
import java.applet.Applet;
5
metode din obiecte disponibile pe diferite computere ce sunt conectate în
reţea.
package java.security
Pachet ce priveşte asigurarea unui mecanism de securitate al sistemului
software dezvoltat.
package java.sql
Pachetul se foloseşte în vederea lucrului cu bazele de date.
package java.text
Pachetul este utilizat pentru lucrul cu texte.
package java.util
Oferă suport pentru lucrul cu liste, vectori, dicţionare, informaţii legate de
dată şi timp.
package java.util.zip
Este utilizat în aplicaţii ce presupun utilizarea unor algoritmi de
compresie şi decompresie
javac HelloJava.java
java HelloJava
jre HelloJava
javadoc HelloJava.java
appletviewer
Utilitarul este utilizat pentru testarea appleturilor. Programul lansează în
execuţie o maşină virtuală Java. Este un browser minimal de WWW care
suportă toate caracteristicile Java ale mediului jdk din care provine.
7
Moştenirea – Se poate defini o clasă, folosind o clasă definită anterior pe baza
unei relaţii de apartenenţă ce există între ele. O clasă poate aparţine unei clase
anterior definite. Prima se numeşte clasă derivată iar cea de a doua se numeşte
clasa de bază .
class Dreptunghi;
public abstract class Patrulater;
//clasă abstractă şi publică
9
MODULU II
Graphic User Interface
Interfaţa grafică sau, mai bine zis, interfaţa grafică cu utilizatorul (GUI), este un
termen cu înţeles larg care se referă la toate tipurile de comunicare vizuală între
un program şi utilizatorii săi. Aceasta este o particularizare a interfeţei cu
utilizatorul (UI), prin care vom înţelege conceptul generic de interacţiune între
un program şi utilizatorii săi.
Biblioteca de clase care oferă servicii grafice se numeşte java.awt, AWT
fiind prescurtarea de la Abstract Window Toolkit şi este pachetul care care a
suferit cele mai multe modificări în trecerea de la o versiune JDK la alta.
Structura de clase din Swing este asemănătoare cu cea din AWT,
în sensul că toate componentele interfeţei grafice sunt derivate dintr-
10
un singur părinte numit JComponent (care este derivat din clasa AWT
Container).
Pachetul de clase Swing reprezintă soluţia furnizată de Sun
pentru crearea unor interfeţe utilizator grafice complet portabile pe
orice platformă.
În Swing, toate numele claselor încep cu litera J, şi atunci când
este posibil, numele este acelaşi cu cel al clasei AWT pe care o
înlocuieşte.
La fel ca la AWT, punctul de plecare pentru un program bazat pe
Swing, este clasa JFrame sau clasa JApplet.
import java.awt.*;
public class exemplu1{
public static void main(String args[]) {
12
Modulu III
Utilizare NETBEANS
Aplicatia 1 .Crearea unui nou proiect
NetBeans IDE Java Quick Start Tutorial
Acest ghid oferă o introducere foarte simplu şi rapid, pentru fluxul de lucru NetBeans IDE de mers pe jos
vă prin crearea unui simplu "Hello World" Java Console cerere. Odată ce aţi terminat cu acest tutorial,
După ce terminaţi acest tutorial, puteţi trece la trasee de învăţare, care sunt legate de la documentare,
Training & pagina de sprijin. Partii de învăţare prevăd tutoriale cuprinzătoare care evidenţiază 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" aplicaţie, puteţi sări peste acest tutorial si sari direct la trasee de învăţare.
• Configurarea de proiect
• Etapele următoare
Pentru a completa acest tutorial, aveţi nevoie de următoarele produse software şi resurse.
versiunea 6 sau
Java Development Kit (JDK)
versiunea 5
Configurarea de proiect
2. În IDE, alegeti File> New Project (Ctrl-Shift-N), aşa cum se arată în figura de mai jos.
13
3. În expertul New Project, extindeţi categoria Java şi selectaţi aplicaţie Java aşa cum se arată în
figura de mai jos. Apoi, faceţi clic pe Next.
4. În numele şi locaţia de start a expertului, faceţi următoarele (după cum se arată în figura de
mai jos):
14
5. Faceţi clic pe Terminare.
inclusiv fişierele sursă, biblioteci care depinde codul dvs., şi aşa mai departe.
• Fereastra Navigator, pe care o puteţi utiliza pentru a naviga rapid între elemente din cadrul
clasei selectat.
15
Adăugarea 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. Puteţi adăuga "Hello World!" mesaj de la codul
scheletului prin înlocuirea linie:
cu linia:
System.out.println ( "Hello World!");
A memora modificarea prin alegerea Fişier> Salvare.
/ *
* Pentru a schimba acest şablon, alegeti Tools | Template-uri
16
* Şi deschide şablon în editor.
* /
HelloWorldApp pachet;
Din cauza Compilarea IDE pe caracteristica Salvare, tu nu trebuie să compilaţi manual proiectului dvs.
pentru a rula în IDE. Când salvaţi un fişier sursă Java, IDE automat compilează ea.
Dacă există erori de compilare, acestea sunt marcate cu simbolurile roşu în marginile din stânga şi din
dreapta a Editor Source. Simbolurile, în marginea din stânga a indica erorile pentru liniile
corespunzătoare. Simbolurile în marja de dreptul de a afişa toate zonele din dosar care au erori, inclusiv
erori, în linii care nu sunt vizibile. Aveţi posibilitatea să cursorul peste un semn de eroare pentru a
obţine o descriere a erorii. Aveţi posibilitatea să faceţi clic pe un simbol în marja de dreptul de a sări la
linia cu eroarea.
17
După ce aţi scris şi testa rula aplicaţia dvs., puteţi utiliza comanda "curate" şi Generare pentru a
construi cererea dumneavoastră, în vederea detaşării. Când utilizaţi Clean şi comanda Construirea, IDE
opereaza un construi script care îndeplineşte următoarele atribuţii:
Puteţi vedea construi iesiri prin deschiderea fereastra Fişiere şi extinderea nodul HelloWorldApp.
18
Aplicatia 2 .Proiectarea unei GUI leagăn în NetBeans IDE
Această ghiduri tutorial vă prin procesul de creare a interfaţa grafică (GUI) pentru o aplicaţie numită
ContactEditor folosind NetBeans IDE GUI Builder. În acest proces, veţi layout GUI un front-end care vă
permite de a vizualiza şi edita informaţiile de contact ale persoanelor fizice sunt incluse într-o bază de
date angajat.
• Adaugarea de componente
• Redimensionare Components
• Aliniaţi Componente
Pentru a completa acest tutorial, aveţi nevoie de următoarele produse software şi resurse.
versiunea 6 sau
Java Development Kit (JDK)
versiunea 5
Noţiuni de bază
GUI IDE lui Builder face posibil de a construi aspect profesional GUIs, fără o înţelegere profundă a
managerilor de aspect. Puteţi stabili formularele, prin plasarea componentelor în cazul în care le doriţi.
Deoarece toate dezvoltare Java în IDE are loc în cadrul proiectelor, va trebui mai întâi pentru a crea un
nou proiect ContactEditor în care pentru a stoca surse şi fişiere alt proiect. Un proiect IDE este un grup
de fişiere sursă Java, plus datele sale asociate Meta, inclusiv proiecte specifice de fişiere proprietăţi, o
furnică construi script care controlează construi şi rula setări, şi un fişier de project.xml unor hărţi Ant
19
obiective pentru a IDE comenzi. În timp ce aplicaţii Java adesea consta din mai multe proiecte de IDE, în
sensul de acest tutorial, vom construi o aplicatie simpla, care este stocată în întregime într-un singur
proiect.
1. Alege File> New Project. Alternativ, aveţi posibilitatea să faceţi clic pe pictograma
Proiect Nou în bara de instrumente IDE.
După crearea noua aplicaţie, este posibil să fi observat că Pachetele dosarul Sursa în fereastra de
Proiecte conţine un <default gol package> nod. Pentru a începe construirea interfata noastra, avem
nevoie de a crea un container Java în cadrul căruia vom plasa componentele necesare alte GUI. În acest
pas vom crea un recipient cu ajutorul componentei JFrame şi locul recipientul într-un ambalaj nou.
1. În fereastra Proiecte, faceţi clic dreapta pe nodul ContactEditor şi a alege nou> JFrame
Form.
Acum, că ne-am creat un nou proiect pentru a aplicaţiei noastre, sa ia un minut pentru a ne familiariza
cu interfaţă GUI Builder lui. Pentru a explora interfaţă GUI Builder cu un demo interactiv, faceţi clic pe
Vizualizare pictograma Demo.
20
Când ne-am adăugat recipient JFrame, IDE a deschis formularul de nou-create ContactEditorUI într-
o filă Editor cu o bară de instrumente care conţine mai multe butoane, aşa cum se arată în ilustraţie
precedent. Formularul ContactEditor deschis, având în vedere Builder GUI's Design si trei ferestre
suplimentare, a apărut în mod automat de-a lungul marginilor IDE lui, permiţându-vă să navigheze, să
organizaţi şi edita forme GUI cum ai construi ei.
• Design Area. Ferestrei Builder GUI's primare pentru crearea şi editarea forme Java GUI. Sursa
a Barei de instrumente şi butoanele de design comuta vă permit să vizualizaţi codul sursă al unei clase
sau o vizualizare grafică a componentelor sale GUI. Butoanele suplimentare bara de instrumente
furnizează acces convenabil la comenzi comune, cum ar fi alegerea între Selecţia şi moduri de conectare,
alinierea componente, setarea pentru componente auto-redimensionare comportament, şi previewing
forme.
21
• Inspector. Oferă o reprezentare a tuturor componentelor, atât vizuale şi non-vizuale, în
cererea dumneavoastră ca o ierarhie copac. Inspector oferă, de asemenea feedback vizual despre ceea
ce componenta în arborele este în prezent în curs de editare în Builder GUI, precum şi vă permite să
organizaţi componente în panourile disponibile.
• Palette. O listă personalizabil de componente disponibile care conţin file pentru a JFC / Swing,
AWT, precum şi componente JavaBeans, precum şi managerii de aspect. În plus, puteţi crea, eliminaţi, a
Dacă faceţi clic pe butonul Sursa, IDE afişează Java aplicaţiei codul sursă în Editorul cu secţii de cod care
sunt generate automat de către constructor GUI indicat de zonele de albastru, numit pazita Blocuri.
Blocuri pazita sunt zone protejate care nu sunt editabile în Vezi sursa. Aveţi posibilitatea să editaţi
numai codul care figurează în zonele albe de Editor atunci când, în Vezi sursa. Dacă aveţi nevoie pentru
a face modificări la Codul într-un bloc pazita, făcând clic pe butonul Design revine editorului IDE la
Builder GUI în care puteţi efectua modificările necesare la forma. Când salvaţi modificările, actualizările
IDE sursele fişierului.
Notă: Pentru dezvoltatorii de avansat, o Customizer Palette este disponibil care vă permite să adăugaţi
elemente personalizate de la JAR-uri, biblioteci, sau în alte proiecte la Palette.
Concepte de bază
GUI IDE lui Builder rezolvă problema de bază de Java crearea de GUI prin fluidizarea fluxului de lucru,
Design" paradigma cu regulile de layout simplu, care sunt uşor de înţeles şi de folosit. Pe măsură ce
pune în formularul dvs., Generatorul mediu grafic oferă orientări vizual sugerând spaţierea optime şi de
aliniere a componentelor. În fundal, Builder GUI traduce deciziile de design într-un UI funcţionale care
este implementat folosind managerul de GroupLayout nou layout şi Swing alte construcţii. Pentru că
foloseşte un model dinamic de aspect, GUI's construit cu Builder GUI se comportă ca şi v-aţi aştepta la
runtime, de adaptare pentru a acomoda orice modificările pe care le face fără a modifica raporturile
definite între componente. Ori de câte ori îl redimensionaţi forma, locales comutator, sau specifica un alt
aspectul, GUI reglează automat de a respecta uite ţintă şi Introduceri simt şi compensează.
Designul fără
În GUI IDE lui Builder, vă puteţi construi formularele dvs. pur şi simplu prin punerea componente în
cazul în care doriţi să le ca şi cum aţi folosit de poziţionare absolută. GUI Cifrele Builder în care atribute
de aspect sunt necesare şi apoi generează codul pentru tine în mod automat. Nu trebuie să te privesc cu
introduceri, ancore, umple, şi aşa mai departe.
22
Automat Componenta de poziţionare (snapping)
Pe măsură ce adăugaţi componente de la o formă, Builder grafic oferă feedback vizual care ajută în
componente de poziţionare bazat pe sistemul de operare sa ne uitam si sa se simta. Generator grafic
oferă sfaturi utile inline şi feedback-ul vizual în ceea ce priveşte alte componente în cazul în care ar
trebui să fie introduse pe formularul dvs., în mod automat se rupă componente în poziţia de-a lungul
liniilor directoare. Aceasta face ca aceste sugestii bazate pe poziţiile de componente care au fost deja
introduse in forma, permiţând în acelaşi timp padding să rămână flexibile, astfel încât arată diferit ţintă şi
Visual Feedback
Builder GUI prevede, de asemenea feedback-ul vizual în ceea ce priveşte componenta de ancorare şi
înlănţuirea relaţii. Aceşti indicatori vă permit să identifice rapid diversele relaţii de poziţionare şi
componenta fixarea comportament care afectează modul în GUI dvs. vor apărea atât şi să se comporte în
timpul rulării. Aceasta viteza procesului de proiectare GUI, permiţându-vă să creaţi rapid cu aspect
profesional interfete vizuale pe care locul de muncă.
Sa incepem cu inceputul
Acum, că aţi familiarizat-vă cu interfaţă GUI Builder lui, este timpul să înceapă în curs de dezvoltare UI
de aplicare noastre ContactEditor. În această secţiune vom arunca o privire la utilizarea Palette IDE de a
adăuga diferitelor componente GUI de care avem nevoie pentru a forma nostru.
Vă mulţumim pentru Drum liber IDE a paradigmei de proiectare, tu nu mai trebuie să lupte cu managerii
dumneavoastră. Tot ce trebuie sa faci este drag şi drop (sau murături şi plop), componentele care aveţi
nevoie pentru a forma dvs. de GUI aşa cum se arată în ilustraţii care urmează.
Deşi GUI IDE lui Builder simplifică procesul de creare a Java GUI, este adesea util să schiţeze aşa cum
Deoarece am adăugat deja un JFrame ca formularul nostru de top a lui recipient de nivel, următorul pas
este de a adăuga o pereche de JPanels care ne va permite să cluster componentele UI nostru folosind
frontierele intitulata. Se referă la următoarele ilustraţii şi anunţul "IDE's Pick şi a cădea în apă", atunci
când realizarea acestui comportament.
23
Pentru a adăuga un JPanel:
1. În fereastra Palette, selectaţi componenta Panoul din categoria Swing, făcând clic pe şi
de eliberare a butonul mouse-ului.
2. Mutaţi cursorul în colţul din stânga sus a formularului În Generatorul GUI. În cazul în
care componenta este situată aproape de marginile containerului de sus şi stânga,
liniile directoare orizontale şi verticale de aliniere par să indice marjele de preferat.
Faceţi clic pe formularul de a plasa JPanel în această locaţie.
Apoi, avem nevoie pentru a redimensiona JPanel pentru a face loc pentru componentele vom loc în ea
un pic mai târziu, dar hai sa ia un minut să subliniez un alt de vizualizare Generatorul GUI lui
caracteristici prima. În scopul de a face acest lucru avem nevoie pentru a deselecta JPanel tocmai le-am
adăugat. Pentru ca nu am adăugat un titlu de frontieră încă, panoul dispare. Remarca, totuşi, că, atunci
când treci cursorul peste JPanel, marginile sale schimbare la lumina gri, astfel încât poziţia sa poate fi
văzut în mod clar. Ai nevoie doar să faceţi clic oriunde în cadrul componentei selectaţi din nou aceasta şi
1. Selectaţi JPanel tocmai l-aţi adăugat. De redimensionare mic patrat mânere reapare
în jurul perimetrului componenta a lui.
2. Faceţi clic şi ţineţi redimensiona mâner pe marginea din dreapta a JPanel şi trageţi
până la orientarea alinierea punctate apare apropiere de marginea formular.
24
3. De presă al redimensiona mânerul pentru a redimensiona componenta.
Acum, că am adăugat un panou să conţină informaţii nostru Numele UI lui, avem nevoie să repetaţi
procesul pentru a adăuga un alt mod direct de mai jos prima pentru e-mail de informare. Referindu-se la
următoarele ilustraţii, se repetă anterioare două sarcini, acordând o atenţie pentru a poziţionare
Generatorul GUI's sugerat. Observaţi că distanţa a sugerat verticală între JPanels doi este mult mai
restrâns decât că, la margini. După ce aţi adăugat JPanel al doilea, redimensionati-o astfel încât să
25
26
Pentru că vrem să se facă distincţia vizual funcţii în superioare şi inferioare ale GUI secţiunile noastre,
avem nevoie pentru a adăuga un titlu de frontieră şi pentru fiecare JPanel. În primul rând vom realiza
acest lucru, folosind fereastra de Proprietăţi, apoi vom încerca le folosind meniul pop-up.
5. Faceţi clic pe elipsa (...) lângă proprietatea Font, Bold selectaţi pentru stilul de font, şi
introduceţi 12 pentru Dimensiune. Faceţi clic pe OK pentru a ieşi din dialog.
6. Selectaţi în partea de jos JPanel şi repetaţi paşii 2 până la 5, dar de data aceasta
faceţi clic dreapta pe JPanel şi accesul Properties fereastră cu ajutorul meniul pop-up.
Adresa de e-mail pentru titlul de proprietate.
Acum, avem nevoie să adăugaţi componente care va prezenta informatii reale de contact în lista noastre
de contact. În cadrul acestei responsabilităţi vom adăuga patru JTextFields că va afişa informaţiile de
contact şi a JLabels care vor să le descrieţi. În timp ce realizarea acestui, observaţi liniile directoare
orizontale şi verticale care afişează GUI Builder, sugerând componenta preferat spaţiere astfel cum sunt
definite de către dvs. sistemului de operare uite si sa se simta. Acest lucru asigură faptul că GUI-ul este
în mod automat făcut respectând obiectivul sistemului de operare privim si sa se simta la rulare.
2. Mutaţi cursorul peste Numele JPanel am adaugat mai devreme. În cazul în care apar
linii directoare care să indice că JLabel este poziţionat în colţul din stânga sus al JPanel
cu o marjă mică la marginile de sus şi din stânga, faceţi clic pentru a plasa etichetă.
Inainte de a merge mai departe, avem nevoie pentru a edita textul de afişare a JLabel tocmai le-am
adăugat. Deşi aveţi posibilitatea să editaţi componenta textul afişat în orice moment, cea mai uşoară
cale este de a face acest lucru ca le adăugaţi.
Acum, vom adăuga o JTextField astfel încât să putem obţine o bucatica din caracteristică Builder GUI de
valoarea iniţială de aliniere.
27
Pentru a adăuga un JTextField la formularul de:
JTextField fixează în poziţie în formularul de aliniat cu valoarea iniţială JLabel lui, aşa
cum se arată în ilustraţia următoare. Observaţi că JLabel mutat în jos, uşor în vederea
alinierii cu valoarea iniţială mai înalt câmpul de text a lui. Ca de obicei, un nod
reprezentând componenta se adaugă la fereastra Inspector.
Înainte de a trece mai departe, avem nevoie pentru a adăuga un JLabel suplimentare şi JTextField
imediat la dreapta, ale celor tocmai le-am adăugat, după cum se arată în ilustraţia următoare. De
această dată intră Last Name: ca JLabel a textului de afişare şi se lasă de text JTextFields "substituent
2. Glisaţi marginea JTextField dreptul redimensiona mânerul spre marginea din dreapta a
anexând JPanel.
3. În cazul în care liniile directoare verticale alinierea apar sugerând marja dintre câmpul
de text şi marginea din dreapta a JPanel, eliberaţi butonul mouse-ului pentru a
redimensiona JTextField.
28
Adăugarea de multiple Componente la formularul
Acum, vom adăuga Titlu: şi Nick: JLabels care descriu două JTextFields că vom adăuga într-un
minut. Vom alege şi de plop componentelor în timp ce apăsaţi tasta Shift, pentru a le adăuga rapid la
forma. Realizarea acestui În timp ce, din nou, observaţi că Builder GUI afişează liniile orizontale si
verticale care sugerează spaţierea preferat componenta.
1. În fereastra Palette, selectaţi componenta etichetă din categoria Swing, făcând clic pe
şi de eliberare a butonul mouse-ului.
2. Mutaţi cursorul peste formularul de mai jos, direct prenume: JLabel am adaugat mai
devreme. În cazul în care liniile directoare par să indice că marginea JLabel noului
stânga este aliniat cu cel al JLabel de mai sus şi o marjă mică există între ele, Shift-
click pentru a JLabel primul loc.
3. În timp ce încă mai apăsând tasta Shift, faceţi clic pe un alt loc pentru a JLabel
imediat la dreapta din prima. A face anumite pentru a elibera tasta Shift înainte to
poziţionarea JLabel al doilea. Dacă uitaţi să eliberaţi tasta Shift to înainte de
poziţionare JLabel ultima, pur şi simplu apăsaţi tasta Escape.
The JLabels se adaugă la formularul de crearea unui al doilea rând, aşa cum se arată
în ilustraţia următoare. Nodurile reprezentând fiecare componentă se adaugă la
fereastra Inspector.
Înainte de a trece mai departe, avem nevoie pentru a edita numele JLabels ", astfel că vom putea vedea
29
Numele JLabels "noi sunt afişate în forma şi sunt deplasate ca urmare a lăţimi lor
editate, după cum se arată în ilustraţia următoare.
Introducerea Componente
Adesea, este necesar să se adauge o componentă între componente care sunt deja plasate într-un
formular. Ori de câte ori când adăugaţi o componentă între două componente existente, Generatorul
GUI automat ture-le pentru a face loc pentru noi componente. Pentru a demonstra acest lucru, vom
introduce un JTextField între JLabels am adăugat anterior, aşa cum se arată în următoarele două
ilustraţii.
2. Mutaţi cursorul peste Titlu: şi Nick: JLabels de pe rândul al doilea, astfel încât
JTextField suprapunerile, cât şi este aliniat la liniile de bază ale acestora. Dacă
întâmpinaţi dificultăţi de poziţionare noul câmp de text, aveţi posibilitatea să fixaţi-l la
orientarea stânga JLabel Pseudonim aşa cum se arată în prima imagine de mai jos.
JTextField fixează în poziţie între cele două JLabels. Schimbările din extrema dreaptă
JLabel spre dreapta a JTextField pentru a veni în sugerat orizontale de offset.
30
Avem încă mai trebuie să adăugaţi un JTextField suplimentare pentru a forma în care se va afişa porecla
fiecare contact pe partea dreapta a formularului.
2. Mutaţi cursorul în partea dreaptă a etichetei Nickname şi faceţi clic pe la locul câmpul
de text.
2. În cazul în care liniile directoare verticale alinierea apar sugerând marja dintre câmpul
de text şi marginile JPanel, eliberaţi butonul mouse-ului pentru a redimensiona
JTextField.
Moving Forward
Alinierea este unul dintre aspectele cele mai fundamentale de a crea profesional-GUIs caută. În
secţiunea precedentă am luat o bucatica de caracteristici alinierea IDE lui în timp ce adăugând JLabel şi a
componentelor JTextField la formularul nostru de ContactEditorUI. Apoi, vom arunca o privire mai în
adâncimea la caracteristicile de aliniere Generatorul GUI ca lucram cu diferitele componente cu alte avem
nevoie pentru a aplicaţiei noastre.
Componenta Aliniere
De fiecare dată când adăugaţi un element la un formular, Builder GUI în mod eficient aliniază-le, aşa
cum rezultă din liniile directoare de aliniere care apar. Uneori este necesar, cu toate acestea, pentru a
specifica relaţii diferite între grupuri de componente, de asemenea. Mai devreme am adaugat patru
JLabels de care avem nevoie pentru GUI ContactEditor noastre, dar am făcut, nu le-a alinia. Acum vom
alinia două coloane ale JLabels, astfel încât marginile lor dreptul de linia de sus.
31
deosebire de JTextFields doi că am întins la marginea din dreapta a formularul nostru, introdus
comportamentul componentelor "resizeability nu este setat automat.
2. Cu atât JTextFields selectat, faceţi clic dreapta pe nici unul dintre ele şi a alege Auto
Redimensionarea> orizontale din meniul pop-up.
2. Cu JTextFields selectată, faceţi clic dreapta pe oricare dintre ele şi să alegeţi Set
dimensiunea implicită din meniul pop-up.
The JTextFields sunt toate setate la aceeaşi lăţime şi indicatorii se adaugă la marginea
de sus a fiecărei, furnizarea de feedback vizual al relaţiilor componente.
Acum, avem nevoie pentru a adăuga un alt JLabel descrie JComboBox care va permite utilizatorilor să
selecteze formatul de informare a aplicaţiei noastre ContactEditor vor fi afişate.
The JLabel fixează într-un drept aliniat la poziţia cu coloana de JLabels de mai sus, aşa
cum se arată în ilustraţia următoare. GUI actualizează Builder liniile de alinierea
statutului indicând componente spaţierea, precum şi ancorarea relaţii.
Ca şi în exemplele anterioare, faceţi dublu clic pe JLabel pentru a selecta textul ei de afişare şi apoi
introduceţi Display Format: pentru numele afişat. Observaţi că atunci când JLabel fixează în poziţie,
Ori de câte ori le adăugaţi sau să mutaţi componente care include un text (JLabels, JTextFields, şi aşa
mai departe), IDE sugerează aliniamente care se bazează pe liniile de bază ale textului în componente.
32
Când am introdus JTextField mai devreme, de exemplu, iniţial sa a fost în mod automat aliniate la
JLabels adiacente.
Acum, vom adăuga caseta combo care va permite utilizatorilor să selecteze formatul de informaţii pe
care a aplicaţiei noastre ContactEditor vor fi afişate. Aşa cum am adăuga JComboBox, vom alinia de
bază sale cu cea a textului JLabel lui. Comunicarea, din nou, liniile directoare de bază de aliniere care
par a ne ajuta cu poziţionare.
2. Mutaţi cursorul imediat de la dreptul de JLabel tocmai le-am adăugat. Când orientarea
orizontală pare să indice că valoarea iniţială JComboBox este aliniat cu linia de bază a
textului în JLabel şi distanţa dintre cele două componente este sugerat, cu o orientare
verticală, faceţi clic pe la poziţia caseta combo.
Modele de editare componenta este dincolo de domeniul de aplicare a acestui tutorial, asa ca, pentru
33
Am ajuns un start bun clădire GUI noastre ContactEditor, dar hai sa iei câteva minute pentru
recapitulare ceea ce am învăţat în timp ce vom adăuga câteva mai multe dintre componentele interfata
noastra cere.
Până acum ne-am concentrat pe adăugarea de componente pentru a GUI noastre ContactEditor folosind
liniile directoare alinierea IDE de a ne ajuta cu poziţionare. Este important să se înţeleagă, totuşi, că o
altă parte integrantă din plasarea componentei este de ancorare. Deşi nu am discutat-o inca, v-aţi luat
deja profita de această facilitate fără să o ştie. După cum sa menţionat anterior, ori de câte ori când
adăugaţi un element la un formular, IDE sugerează aspectul ţintă şi de poziţionare simt lui preferat cu
liniile directoare. Odată plasate, componente noi sunt, de asemenea, ancorate la cel mai apropiat de
margine de container sau componente pentru a se asigura că relaţiile componente sunt menţinute în
timpul rulării. În această secţiune, vom concentra pe realizarea sarcinilor într-un mod mai simplificat
Generatorul GUI vă permite să se stabilească formularele rapid şi uşor prin raţionalizarea gesturi de flux
de lucru tipic. Ori de câte ori să adăugaţi un element la un formular, Builder GUI automat fixează-le în
poziţiile preferate şi stabileşte relaţiile necesare înlănţuirea astfel încât vă puteţi concentra pe proiectarea
2. Mutaţi cursorul peste formularul de mai jos imediat E, cu JPanel partea de jos a lui
titlu-mail. În cazul în care liniile directoare par să indice că este poziţionat în colţul din
stânga sus al JPanel cu o marjă mică la marginile de sus şi din stânga, faceţi clic pe la
locul JLabel.
3. Faceţi dublu clic pe JLabel pentru a selecta textul ei de afişare. Apoi, de tip E-mail:
si apasati Enter.
JLabel fixează în poziţia preferată în formă, ancorat la marginile de sus şi din stânga a
anexând JPanel. La fel ca înainte, un nod corespunzător reprezentând componenta se
adaugă la fereastra Inspector.
Pentru a adăuga un JTextField:
Acum, avem nevoie pentru a adăuga JList care va afişa întregul ContactEditor noastre lista de contacte.
34
Pentru a adăuga şi a redimensiona o JList:
2. Mutaţi cursorul imediat de mai jos e-mail Adresa JLabel am adaugat mai devreme.
În cazul în care liniile directoare par să indice că marginile JList lui de sus şi din stânga
sunt aliniate cu marjele de preferat de-a lungul marginii JPanel de stânga şi JLabel de
mai sus, faceţi clic pentru poziţia JList.
3. Glisaţi JList a redimensiona la mâner dreapta spre dreapta a anexând JPanel până la
liniile directoare de aliniere par să indice că este aceeaşi lăţime ca şi JTextField de mai
sus.
JList fixează în poziţia desemnat de către liniile directoare aliniere şi nodul sale
corespunzătoare este afişat în fereastra de Inspector. Comunicarea, de asemenea, că
forma extinde pentru a acomoda JList nou adăugat.
Din moment ce JLists sunt utilizate pentru a afişa liste lungi de date, au de obicei nevoie de adăugarea
unui JScrollPane. Ori de câte ori când adăugaţi o componentă care necesită o JScrollPane, Builder GUI
adaugă automat pentru tine. Deoarece JScrollPanes sunt componente non-vizuale, trebuie să se
folosească de Inspector în scopul de a vizualiza sau edita orice JScrollPanes că Builder GUI creat.
Componenta de calibrare
Acesta este adesea benefic pentru a stabili mai multe componente conexe, cum ar fi butoane în
dialogurile modale, care urmează să fie de aceeaşi dimensiune pentru consistenţă vizuale. Pentru a
demonstra acest pas vom adăuga patru JButtons pentru a forma ContactEditor nostru care ne va permite
să adăugaţi, să editaţi şi elimina intrările individuale din lista noastre de contact, aşa cum se arată în
următoarele ilustraţii. Apoi, vom stabili cele patru butoane care urmează să fie de aceeaşi dimensiune
2. Mutaţi JButton peste marginea din dreapta a e-mail Adresa JTextField în JPanel mai
mici. În cazul în care liniile directoare par să indice că iniţială a JButton şi marginea
din dreapta sunt aliniate cu cea a JTextField, Shift-click pentru a loc primul buton de-a
lungul marginea JFrame dreptul. Lăţimea JTextField a diminuării populaţiei active
pentru a veni în JButton atunci când eliberaţi butonul mouse-ului.
3. Mutaţi cursorul peste colţul din dreapta sus a JList în JPanel mai mici. În cazul în care
liniile directoare par să indice că marginile JButton lui de sus şi dreapta sunt aliniate cu
cea a JList, Shift-Click pentru locul al doilea buton de-a lungul marginii JFrame dreptul.
4. Adăugaţi două JButtons suplimentare de mai jos cele două pe care deja am adăugat
pentru a crea o coloană. A face anumite poziţia JButtons, astfel încât distanţa între
sugerat este respectat şi coerente. If you forget to release the Shift key prior to
positioning the last JButton, simply press the Escape key.
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.
35
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.
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.
1. Add a JLabel named Mail Format to the form below the JList. Make certain the label
36
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.
37
To add JRadioButtons to a ButtonGroup:
1. In the Palette window, select the Button Group component from the Swing 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
Inspector's Other Components area.
4. In the Properties window, choose buttonGroup1 from the buttonGroup property combo box.
We've managed to rough out our ContactEditor application's GUI, but there are still a few things
remaining to do. In this section, we'll take a look at a couple of other typical layout tasks that the GUI
Builder streamlines.
De finisare Up
Now we need to add the buttons that will enable users to confirm the information they enter for an
individual contact and add it to the contact list or cancel, leaving the database unchanged. In this step,
we'll add the two required buttons and then edit them so that they appear the same size in our form
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 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 Inspector window. The JButton components' code is also added to
the form's source file which is visible in the Editor's Source view. Each of the JButtons
are set to the same size as the button with the longest name.
The last thing we need to do is delete the placeholder text in the various components. Note that while
removing placeholder text after roughing out a form can be a helpful technique in avoiding problems with
component alignments and anchoring relationships, most developers typically remove this text in the
process of laying out their forms. As you go through the form, select and delete the placeholder text for
each of the JTextFields. We'll leave the placeholder items in both the JComboBox and JList for a later
tutorial.
38
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.
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/lib folder to the Class-Path element in the
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
39
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 Inspector, expand the ContactEditorUI node
and choose Form ContactEditorUI. In the Properties window, change the value of the Layout
Generation Style property to Swing Layout Extensions Library.
• Zip the project's dist folder into a ZIP archive. (The dist folder might also contain a lib
Ensure that the manifest.mf file references the currently installed version of the Swing Layout Extensions
Library.
40
Modulu IV
Componentele Swing
Swing este un subset JFC (Java Foundation Classes) şi constă
dintr-o serie de componente vizuale care extind (îmbunătăţesc)
componentele AWT, şi furnizează noi facilităţi precum tabele şi
arbori. Structura de clase din Swing este asemănătoare cu cea din
AWT, în sensul că toate componentele interfeţei grafice sunt
derivate dintr-un singur părinte numit JComponent (care este
derivat din clasa AWT Container).
Pachetul de clase Swing reprezintă soluţia furnizată de Sun
pentru crearea unor interfeţe utilizator grafice complet portabile pe
orice platformă.
În Swing, toate numele claselor încep cu litera J, şi atunci când
este posibil, numele este acelaşi cu cel al clasei AWT pe care o
înlocuieşte.
La fel ca la AWT, punctul de plecare pentru un program bazat pe
Swing, este clasa JFrame sau clasa JApplet.
Componente atomice
JLabel, JButton, JCheckBox, JRadioButton, JToggleButton, JScrollBar, JSlider,
JProgressBar, JSeparator
Componente complexe
JTable, JTree, JComboBox, JSpinner, JList, JFileChooser, ColorChooser,
JOptionPane
Meniuri
JMenuBar, JMenu, JPopupMenu, JMenuItem, JCheckboxMenuItem,
JRadioButtonMenuItem
Containere intermediare
JPanel, JScrollPane, JSplitPane, JTabbedPane, JDesktopPane, JToolBar
Clasa JWindow permite crearea unei ferestre fara bara de titlu, meniu,
butoane sistem etc.
Clasa JDialog permite crearea de ferestre de dialog. Ferestrele de dialog
sunt dependente de ferestrele parinte de tip Frame.
Observatie:
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Pentru oganizarea elementelor într-o fereastra se vor folosesc panouri din swing
ca: JPanel (simple) si JScrollPane (cu bare de derulare).
APLICAŢIE
42
import javax.swing.*;
import java.awt.*;
class Aplic {
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.pack();
win.show();
}
}
Butoane
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
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.
RadioButton
Butoanele radio sunt elemente de control care retin o anumita stare, la fel cu cele
de marcaj. Deosebirea principala consta in faptul ca toate butoanele radio
incluse in acelasi grup logic sunt mutual exclusive. Pentru gestionarea grupurilor
de butoane radio se va folosi clasa ButtonGroup, respectiv metoda add() care
adauga un buton la grup.
Si pentru butoanele radio se pot apela metodele setSelected(boolen marcat)
pentru a stabili marcajul prin program, respectiv getSelected() pentru a afla
starea marcajului.
public Butoane() {
JButton b1 = new JButton("ButonA");
JButton b2 = new JButton("ButonB");
this.setLayout(new GridLayout(1,0));
add(b1);
add(b2);
44
}
}
class CheckBoxuri extends JPanel {
public CheckBoxuri() {
JCheckBox cb1 = new JCheckBox("Optiune1");
cb1.setSelected(true);
JCheckBox cb2 = new JCheckBox("Optiune2");
cb2.setSelected(true);
JCheckBox cb3 = new JCheckBox("Optiune3");
cb3.setSelected(true);
this.setLayout(new GridLayout(0,1));
add(cb1);
add(cb2);
add(cb3);
}
}
class ButoaneRadio extends JPanel {
public ButoaneRadio() {
// Creare radio butoane
JRadioButton butonAlb = new JRadioButton("Alb");
butonAlb.setActionCommand("Alb");
butonAlb.setSelected(true);
JRadioButton butonRosu = new JRadioButton("Rosu");
butonRosu.setActionCommand("Rosu");
JRadioButton butonVerde = new JRadioButton("Verde");
butonVerde.setActionCommand("Verde");
// Gruparea butoanelor
ButtonGroup group = new ButtonGroup();
group.add(butonAlb);
group.add(butonRosu);
group.add(butonVerde);
// Adaugarea butoanelor
this.setLayout(new GridLayout(0,1));
add(butonAlb);
add(butonRosu);
add(butonVerde);
}
}
public class Desen_aplicatie extends JFrame {
45
Butoane panouButoane = new Butoane();
CheckBoxuri panouCheckBoxuri = new CheckBoxuri();
ButoaneRadio panouButoaneRadio = new ButoaneRadio();
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).
APLICAŢIE
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
class ListBox1 extends JScrollPane {
private JList 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;
49
Un frame este o fereastră cu scop general prin intermediul cărei utilizatorii
interacţionează în mod obişnuit cu aplicaţia. Într-o aplicaţie există cel puţin un
frame care va servi drept fereastra principală.
Un dialog este o fereastră cu scop limitat destinată în primul rând afişării unor
informaţii cum sunt mesajele de eroare sau pentru preluarea unor răspunsuri
simple (standard) gen da sau nu.
Menirea unui unui astfel de frame este să găzduiască obiectele GUI cu care va
interacţiona utilizatorul aplicaţiei. Distribuirea, localizarea sau poziţionarea
obiectelor într-o fereastră poate fi controlată folosind un anumit model de
gestionare -layout manager- care este desemnat prin metoda setLayout(). Dacă
se optează pentru poziţionarea absolută (fără nici un factor de relativizare a
obiectelor funcţie de mărimea ferestrei de exemplu) atunci metoda setlayout()
este apelată în felul următor:
setLayout(null);
În acest fel obiectele (butoane, căsuţe de text, grupuri de opţiuni etc.) vor fi
afişate întotdeauna la coordonatele stabilite de programator. Spre exemplu
poziţionarea şi dimensionarea unui boton de comandă (clasa java.awt.Button
sau javax.swing.JButton în Swing) se realizează prin metoda:
Plasarea unor componente GUI într-un cadru implică în Java două declaraţii sau
specificaţii:
1. declararea în clasa derivată din Frame (sau JFrame) a membrilor care
desemnează componentele grafice ce vor fi afişate la execuţie;
50
2. la instanţierea ferestrei respective (sau mai exact a clasei derivate din
Frame) se va specifica explicit (în cadrul constructorului) instanţierea
componentelor grafice şi apoi afişarea lor prin metoda add():
add(InstanţăButon);
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class frame extends JFrame implements ActionListener,
WindowListener{
// Declar doua componente care vor apartine cadrului FrameTest
Button b1;
Button b2;
// In constructorul FrameTest activez butoanele, fereastra coresponzatoare
// cadrului FrameTest, obiectele receptoare pentru evenimetele butoanelor
// si cele receptoare pentru evenimentele ferestrei
public frame(){
// stabilsc titlul ferestrei
this.setTitle("Frame Test");
// inregistrez obiectul care va trata evenimentele ferestrei
// adica (insusi cadrul TestFrame)
this.addWindowListener(this);
setLayout(null);
// instantiez butoanele, le stabilesc dimensiunile,
// inregistrez obiectele care vor trata evenimentele lor (cadrul FrameTest)
// si le activez in cadrul FrameTest
b1 = new Button("OK");
b2 = new Button("Cancel");
b1.setBounds(50, 100, 50, 50);
b2.setBounds(50, 180, 50, 50);
b1.addActionListener(this);
b2.addActionListener(this);
add(b1);
add(b2);
// stabilesc dimensiunile ferestrei cadrului FrameTesti o afisez
setSize(300, 300);
setVisible(true);
}
// metoda in care tratez evenimentele butonului b1 care va inchide fereastra
// si va incheia procesul de executie
public void actionPerformed(ActionEvent event){
if (event.getSource().equals(b1))
setVisible(false);
System.exit(0);
}
51
// Implementez metodele cerute de interfata WindowListener
// la care se conformeaza obiectul care trateaza evenimentele ferestrei
// (adica insusi cadrul FrameTest)
public void windowActivated(WindowEvent event){}
public void windowClosing(WindowEvent event){
System.exit(0);
}
public void windowClosed(WindowEvent event){}
public void windowDeactivated(WindowEvent event){}
public void windowIconified(WindowEvent event){}
public void windowDeiconified(WindowEvent event){}
public void windowOpened(WindowEvent event){}
// metoda main care instantiaza cadrul TestFrame, afisind astfel fereastra
// cu cele doua butoane
public static void main(String[] args) {
frame frm = new frame();
}
}
Containere
Un obiect care poate conţine componente se numeşte container. Acestea sunt
modelate de către clasa abstractă java.awt.Container. Un aspect important, care
simplifică lucrul cu intefeţele grafice, constă în faptul că această clasă este, la
rândul ei, derivată din clasa Component. Prin urmare un Container poate conţine
un alt Container. De asemenea clasa Swing JComponent este o subclasă a clasei
Container. Cum orice JComponent poate conţine alte componente putem spune
că:
Componentă
are
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 colecţie de alte componente.
Componentele sunt adăugate unui container prin metoda add(). De exemplu
setul următor de instrucţiuni creează un JPanel şi adaugă două butoane:
54
JPanel p = new JPanel;
p.add(new JButton(”Ok”));
p.add(new JButton(”Cancel”));
Containere top-level
Un container top-level este un container care nu este inclus în nici un alt
container. Clasele Swing JApplet, JDialog, JFrame şi JWindow reprezintă
containerele top-level din Swing.
Container-ul standard pentru o aplicaţie de interfaţă grafică este JFrame.Un
JFrame este o fereastră cu titlu şi margini bine definite care poate fi mutată,
redimensionată, minimizată (iconificată) etc. De asemenea un JFrame poate
avea o bară de meniu. Sunt însă două lucruri mai deosebite ce merită menţionate
în legătură cu această clasă: deşi este o clasă derivată în primul rând din
java.awt.Container nu este totuşi o subclasă a JComponent, iar în al doilea rând
aceasta delegă responsabilitatea gestiunii componentelor sale unui alt obiect de
tip JRootPane.
Un JRootPane derivă din JComponent şi are ca principală responsabilitate
gestionarea conţinutul unui alt container. Un astfel de obiect este un compozit
incluzând printre altele un (panou) content pane care de obicei este un JPanel şi
reprezintă aria de lucru dintr-un JFrame, excluzând titlul, marginile şi meniul.
Lucrurile par destul de complicate însă ceea ce trebuie reţinut este faptul că un
JFrame are un JRootPane care conţine un „panou de componente” (un „content
pane”). Pentru a obţine referinţa panoului de componente al unui JFrame se
apelează la metoda getContentPane() care returnează un obiect de tip
java.awt.Container.
55
unui obiect de tip layout manager, care trebuie să implementeze interfaţa
java.awt.LayoutManager.
Această interfaţă specifică metodele tuturor tipurilor de layout manager. În
unele cazuri este folosită interfaţa java.awt.LayoutManager2 care extinde
interfaţa originală LayoutManager.
Pentru accesarea şi configurarea propriului layout manager un container
are la dispoziţie metodele getLayout şi setLayout:
public LayoutManager getLayout();
public void setLayout(LayoutManager manager);
Iată în continuare câteva exemple privind modul cum sunt afişate componentele
folosind diverse tipuri LayoutManager:
Exemplu
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
Rezultatul:
56
Exemplu
import javax.swing.*;
import java.awt.*;
Exemplu
import javax.swing.*;
import java.awt.*;
Exemplu
Modificările asupra grupului de componente dintr-un container după afişarea
acestuia, va conduce la invalidarea containarului. Aceast fapt poate fi verificat
prin metoda isValid() care va returna o valoare booleană. Revalidarea unui
container echivalează cu reafişarea lui şi se realizează prin metoda validate().
Exemplu
import java.awt.*;
import javax.swing.*;
Evenimente şi „ascultători”
După cum am menţionat într-unul din paragrafele anterioare, interacţiunile
interfeţelor utilizator grafice se bazează pe paradigma evenimentelor. Anumite
evenimente sunt de nivel scăzut cum ar fi apăsarea şi eliberarea unei taste,
mutarea cursorului mouse-lui sau apăsarea unui buton al acestuia, iar altele sunt
de nivel înalt cum ar fi selectarea unei opţiuni dintr-un meniu, apăsarea unui
“buton” (componenta grafică) sau introducere de text într-un câmp.
Evenimentele de nivel înalt implică de fapt mai multe de nivel mai scăzut. De
exemplu introducerea de text într-un câmp implică mutarea cursorului mouse-
ului, apăsarea butonului mouse-ului şi apăsarea şi eliberarea mai multor taste.
60
• JContentPane reprezintă un container Swing în care vor fi adăugate
toate celelalte componente (controale sau alte container-e) şi la nivelul
căruia este stabilită “politica” de dispunere a acestora (noţiunea de
layout manager).
• JMenuBar va fi obiectul prin intermediul căruia sunt gestionate
eventualele meniuri bară ataşate applet-ului sau frame-ului
respective.
• JGlassPane reprezintă un container transparent care este aşezat peste
toate celelalte componente şi container-e şi permite interceptarea
evenimentelor legate mouse, precum şi posibilitatea schiţării unor
obiecte grafice peste întregul conţinut fără să afecteze vreo
componentă existentă.
Referinţele acestor obiecte pot fi obţinute astfel:
JRootPane rp = getRootPane();
JLayeredPane lp = getLayeredPane();
JMenuBar mb = getJMenuBar();
Container cp = getContentPane();
Component gp = getGlassPane();
Pentru a obţine un obiect JLabel care afişează un text simplu putem construi o
astfel de etichetă ca în exemplul următor:
import java.awt.*;
import javax.swing.*;
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLook
AndFeel");
new ExempluJLabel().show();
}
}
Iată rezultatul:
62
Câmpuri pentru text JTextField
Biblioteca SWING introduce, pentru a gestiona câmpurile care pot primi text din
partea utilizatorilor, componenta JTextField ce lucrează asemănător 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
Constructor Acţiune
JTextField () Creează un nou câmp gol
JTextField (int columns) Creează un nou obiect JTextField fără conţinut
de lungimea indicată (în coloane)
JTextField(String text) Creează un nou obiect JTextField conţinând
textul specificat
JTextField(String text, int Creează un nou obiect JTextField conţinând
columns) textul specificat şi având (afişând) lungimea
indicată (în coloane)
63
public class test extends JFrame{
public test(){
Container cp = getContentPane();
JLabel jlabel = new JLabel("Student la Universitatea Titu Maiorescu");
cp.setLayout(new FlowLayout());
cp.add(jlabel);
JTextField informatie = new JTextField();
//cp.setLayout(new FlowLayout());
cp.add(informatie);
informatie.setText("Informatie cu JTextField");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 100);
}
public static void main(String[] args) throws Exception{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLook
AndFeel");
new test().show();
}
}
Rezultatul este:
64
Butoane – AbstractButton şi JButton
În Swing, toate butoanele sunt derivate din clasa AbstractButton care furnizează
baza pe care sunt construite toate clasele pentru butoane din Java. Iată ierarhia
de moştenire pentru această clasă:
java.lang.Object
| ___ java.awt.Component
| ___ java.awt.Container
| ___ javax.swing.JComponent
| ___ javax.swing.AbstractButton
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
text.setText("Ai apasat pe buton");
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300, 300);
}
public static void main(String[] args) throws Exception{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLook
AndFeel");
new exemplu1().show();
}
65
}
Rezultatul este:
Principalii constructori care pot fi folosiţi pentru instanţierea acestei clase sunt:
Constructor Acţiune
JCheckBox()
66
JCheckBox(String text)
JCheckBox(String text, Construieşte un JCheckBox ce afişează textul
Boolean selected) specificat şi indică dacă este, sau nu, selectat
iniţial
JCheckBox(Icon image)
JCheckBox(String text, Icon
icon)
67
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLook
AndFeel");
new exemplu1().show();
}
}
Rezultatul ar trebui să fie următorul:
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLook
AndFeel");
new exemplu1().show();
}
}
Rezultatul este:
Crearea meniurilor
Modelul orientat obiect al meniurilor în Swing are următoarele caracteristici:
70
- bară principală reprezintă o instanţă a clasei JMenuBar, sau, pentru
meniurile contextuale, JPopUpMenu;
- meniurile accesebile din bara principală sunt obţinute din clasa JMenu;
- elementele individuale ale unui menu (instanţă JMenu) sunt construite
pe baza clasei JMenuItem care are următoarele subclase:
JCheckBoxMenuItem, JRadioButtonMenuItem şi JMenu. Prin urmare un
element individual dintr-un meniu poate fi, la rândul său, un al submenu
(instanţă JMenu);
Ca urmare definiţia celui mai simplu meniu ar putea fi următoarea:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
//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);
71
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 următorul rezultat:
TEME PRACTICE
Se vor testa cel putin 5 exemple din acest modul, se vor comenta şi
vor fi incluse într-un “PROJECT” cu numele studentului.
72
MODULU V
Lucru ca baze de date in JAVA
Aplicaţiile care folosesc baze de date sunt, în general, sunt aplicaţii 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 regăsirii acestora. Uzual, o bază de date este memorată într-unul
sau mai multe fişiere. Crearea unei baze de date - se face cu aplicaţii specializate oferite
de producătorul 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 aplicaţie ş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 interfeţe scrise în Java, furnizând mecanisme
standard pentru proiectanţii aplicatiilor de baze de date.
Pachetul care oferă suport pentru lucrul cu baze de date este java.sql.
Folosind JDBC este usor să transmitem secvenţe SQL către baze de date relaţionale.
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 aşa 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.
Bineînţeles, scriind codul sursă în Java, ne este asigurată portabilitatea programului.
Deci, iată două motive puternice care fac combinaţia Java - JDBC demnă de luat în seamă.
Fiind robust, sigur, usor de folosit, usor de înteles, Java este un excelent limbaj pentru
a dezvolta aplicaţii de baze de date. Tot ceea ce-i lipseste este modalitatea prin care aplicatiile
Java pot comunica cu bazele de date. Aici vine însa JDBC-ul care oferă acest mecanism.
In linii mari, JDBC face trei lucruri: stabileşte o conexiune cu o baza de date, trimite
secvenţe SQL, prelucrează rezultatele .
O conexiune (sesiune) la o bază de date reprezintă un context prin care sunt trimise
secvenţe SQL şi primite rezultate. Intr-o aplicaţie pot exista mai multe conexiuni simultan la
baze de date diferite sau la aceeasi baza.
Clasele si interfetele responsabile cu realizarea unei conexiuni sunt:
- clasa DriverManager, ce se ocupă cu înregistrarea driverelor ce vor fi folosite în aplicatie
- interfata Driver, pe care trebuie să o implementeze orice clasa ce descrie un driver
clasa DriverPropertyInfo
- interfata Connection, descrie obiectele ce modelează o conexiune propriu-zisă cu baza de
date
73
Primul lucru pe care trebuie să-l facă o aplicaţie în procesul de conectare la o baza de
date este să încarce în memorie clasa ce implementeaza driver-ul necesar comunicării cu
respectiva baza de date. Acest lucru poate fi realizat prin mai multe modalitati:
1. DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
2. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
3. System.setProperty("jdbc.drivers", "sun.jdbc.odbc.JdbcOdbcDriver");
4. java -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver
Odată ce un driver JDBC a fost încarcat în memorie, acesta poate fi folosit la stabilirea
unei conexiuni cu o bază de date. Având în vedere faptul că pot exista mai multe drivere
înregistrate în memorie, trebuie să avem posibilitea de a specifica pe lângă identificatorul
bazei de date si driverul ce trebuie folosit.
Aceasta se realizează prin intermediul unei adrese specifice, numită JDBC URL, ce
are urmatorul format:
jdbc:sub-protocol:identificator_baza_de_date
Metoda folosită pentru realizarea unei conexiuni este getConnection din clasa
DriverManager si poate avea mai multe forme:
Connection c = DriverManager.getConnection(url);
Connection c = DriverManager.getConnection(url, username, password);
Connection c = DriverManager.getConnection(url, dbproperies);
- crearea de secvenţe SQL ce vor fi folosite pentru interogarea sau actualizarea bazei
- aflarea unor informaţii legate de baza de date (meta-date)
Clasa Connection asigură suport pentru controlul tranzacţiilor din memorie către baza de
date prin metodele commit, rollback, setAutoCommit .
74
Connection c = DriverManager.getConnection(url);
Statement s = c.createStatement();
ResultSet r = s.executeQuery ("SELECT * FROM un_tabel ORDER BY o_coloana");
s.executeUpdate("DELETE * FROM un_tabel");
Metoda executeQuery trimite interogari SQL către baza de date şi primeşte răspuns
într-un obiect de tip ResultSet.
Interfaţa ResultSet
Interfaţa ResultSetMetaData
Declaraţii
Interfaţa Statement
Defineşte metode pentru executarea declaraţiilor SQL care nu conţin parametrii de
marcaj (markers)
Realizarea unei conexiuni se face astfel:
Fiecare obiect conexiunepoate crea mai multe declaraţii. Astfel pentru obiectul
anterior se poate adăuga:
75
Obţinerea unor date din tabele se face:
Utilizarea metodei execute() este condiţionată de existenţa unui string SQL. În acest
caz actulizează fie un cont, fie un obiect ResultSet .
Valoarea returnată este true dacă primul rezultat este un obiect ResultSet şi false dacă
se actualizează un cont.
Pentru crearea unui tabel se poate utiliza secvenţa:
import java.sql.*;
public class creare {
public static void main(String args[])
{ Connection con;
// The connection to the database.
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:stud");
Statement stmt = con.createStatement();
catch(ClassNotFoundException e){
System.out.println(e.toString());
}
catch(SQLException e){
System.out.println(e.toString());
}
}
}
76
Probleme propuse
1. Sa se realizeze o interfata cu care se realizeaza incarcarea unei tabele. Tabela
se numeste cursuri.
Rezolvare
.........
Connection dB=null;
ResultSet results=null;
String sql;
String s1= jTextField1.getText();
String s2= jTextField2.getText();
String s3= jTextField3.getText();
int i,j;
i=Integer.parseInt(s1);
j=Integer.parseInt(s3);
String url="jdbc:odbc:Facultate";
String d;
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{
System.out.println("Nu s-a putut incarca driver-ul");
}
try{
dB = DriverManager.getConnection(url);
PreparedStatement pstmt = dB . prepareStatement ("INSERT INTO
Cursuri(id_curs,nume_curs,nr_credite)" + "Values('" + i + "','" + s2 + "','" + j + "');");
pstmt.executeUpdate();
// System.out.println("Inregistrarea a fost adaugata cu succes.");
jLabel4.setText(" Inregistrarea a fost adaugata cu succes");
}
catch(SQLException e)
{
System.err.println("SQLException: " + e);
}
77
2. Sa se realizeze o interfata cu ajutorul careia se localizeaza dupa un ID un
student in tabela Studenti.
Rezolvare
.........
Connection dB=null;
ResultSet results=null;
String sql;
String s1=jTextField1.getText();
String url="jdbc:odbc:Facultate";
String num,d="",d1="";
int i,j=0,cr=0;
i=Integer.parseInt(s1);
System.out.println(i);
try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e)
{
System.out.println("Nu s-a putut incarca driver-ul");
}
try
{
dB = DriverManager.getConnection(url);
Statement stmt=dB.createStatement();
results=stmt.executeQuery ("SELECT nume,credite FROM Studenti WHERE
"+"(nr_matricol='" +s1+ "') ");
while(results.next())
{
d=results.getString("nume");
d1=results.getString("credite");
cr=Integer.parseInt(d1);
}
jTextField2.setText(d); jTextField3.setText(d1); }
catch(SQLException e) { System.err.println("SQLException: " + e); }
78
4. Aplicatie practica pentru Conectarea la o bază de
date MySQL
Acest document care demonstrează cum se instituie o conexiune la o bază de date MySQL de la
NetBeans IDE 6.7. Odata conectat, puteţi începe lucrul cu MySQL în baza de date a IDE Explorer prin
crearea de noi baze de date şi tabele, popularea tabele cu date, şi rulează SQL queries pe structuri de
date şi de conţinut. Acest ghid este conceput pentru incepatori, cu o înţelegere de bază de gestionare a
bazei de date, care doresc să aplice cunoştinţele lor de a lucra cu MySQL în NetBeans IDE.
MySQL este un popular sistem Open Source de gestionare a bazelor de date relaţionale
(RDBMS), frecvent utilizate în aplicaţii de web, datorită vitezei sale, flexibilitate şi fiabilitate.
MySQL angajează SQL, sau Structured Query Language, pentru accesarea şi de prelucrare a
datelor conţinute în bazele de date.
Continut
• A se vedea de asemenea,
79
Pentru a urma acest tutorial, aveţi nevoie de următoarele produse software şi resurse.
Notă: Acest ghid presupune că aveţi deja RDBMS MySQL instalat si configurat pe computer. Dacă
instalaţi pentru prima dată, vă rugăm să consultaţi documentaţia oficială MySQL pentru ajutor.
NetBeans IDE 6.7 vine bundled cu suport pentru RDBMS MySQL. Înainte de a putea accesa baza de
date MySQL Server în NetBeans IDE, trebuie să configuraţi MySQL proprietăţile Server.
1. În fereastra Servicii, extindeţi nodul Baze de date, faceţi clic dreapta pe MySQL server nodul si
alegeti Properties.
2. IDE localhost intră ca numele de gazdă implicit de server şi 3306 ca număr implicit serverul
de port. Dacă această informaţie este corectă, introduce numele de utilizator Administrator
MySQL server.
5. În calea / URL-ul pentru a admin domeniul instrument, tip sau răsfoiţi la locaţia a cererii dvs.,
cum ar fi MySQL Administrare Admin Tool MySQL, phpMyAdmin, sau alt web-bază unelte de
administrare.
80
Notă: mysqladmin este instrumentul de MySQL admin găsit în folderul bin din directorul de
instalare MySQL. Este un instrument de linie de comandă şi nu Ideal pentru utilizarea cu IDE.
Tip de nici un argument pentru instrumentul admin în domeniul Argumente.
6. În cale pentru a porni de comandă, tastaţi sau răsfoiţi la locaţia de comanda a începe MySQL.
Pentru a găsi comanda început, căutaţi mysqld în folderul bin din directorul de instalare
MySQL.
Notă: binar recomandat pentru Unix şi NetWare este mysql_safe Comandă începe pot varia,
de asemenea, în cazul în care MySQL a fost instalat ca parte a unei instalaţii AMP.
Tip de nici un argument pentru comanda începe în domeniul Argumente.
7. Din cale pentru a opri câmpul de comandă, tastaţi sau răsfoiţi la locaţia de oprire comanda
MySQL. Aceasta este, de obicei calea spre mysqladmin în folderul bin din directorul de
8. Când aţi terminat, fila Proprietăţi Admin ar trebui să semene cu figura de mai jos. Dacă sunteţi
satified cu configuraţia dvs., faceţi clic pe OK.
Înainte de a vă puteţi conecta la o bază de date MySQL Server, trebuie să se asigure mai întâi că MySQL
Bază de date Server se execută pe calculatorul dumneavoastră. MySQL Server nod în cadrul Serviciului
indică dacă MySQL Server Bază de date este conectat, după cum se arată în următoarea imagine.
81
După ce asigurându-se că MySQL Server Bază de date se execută pe maşina dvs., faceţi clic dreapta pe
Colecţii de date> MySQL nod Server în fereastra Servicii şi alegeţi Connect.
Atunci când sa extins, nodul MySQL server afişează toate bazele de date disponibile MySQL.
Un mod comun de a interacţiona cu bazele de date se face printr-un editor SQL. NetBeans IDE are un
editor de built-in SQL pentru acest scop. Editor SQL este, în general, accesibile prin intermediul
Comandamentului Execute opţiune din meniul clic dreapta din nodul conectare (sau de noduri copil nod
conexiune's). Acum, că sunteţi conectat la serverul de MySQL, puteţi crea o instanţă nouă bază de date
utilizând Editorul SQL. În sensul acestui tutorial, va crea o instanţă numit MyNewDatabase:
1. În fereastra Servicii, faceţi clic dreapta pe nodul MySQL Server şi alegeţi creez baza de date.
Creaţi MySQL Bază de date deschide caseta de dialog.
2. În Creare MySQL Bază de date caseta de dialog, tastaţi numele bazei de date noi. Vom folosi
MyNewDatabase pentru acest tutorial. Lasă caseta de selectare neselectată în acest moment.
82
Notă: Puteţi acorda, de asemenea, acces deplin la un utilizator dat. În mod implicit, numai
utilizatorul admin are permisiunile pentru a efectua anumite comenzi. Drop jos listă vă permite
Acum, că aţi conectat la MyNewDatabase, puteţi începe explorarea cum să creaţi tabele, popula-le cu
date, şi modifica datele menţinută în tabele. Acest lucru vă permite să aruncaţi o privire mai atentă la
funcţionalitatea oferite de Explorer Baza de date, precum şi un sprijin NetBeans IDE pentru fişiere SQL.
MyNewDatabase este în prezent gol. În IDE, este posibil să adăugaţi un tabel de baza de date, fie
utilizând Crează masă de dialog, sau de către le-a introdus o interogare SQL şi rularea direct de la Editor
că există trei subfoldere: Mese, Vizualizari şi proceduri. Alegeţi Execute Command din dosarul
tabelele din baza de date Explorer. O pânză-martor se deschide în Editor SQL în fereastra
principală ..
În NetBeans IDE 6.7 Beta, atunci când vă extindeţi-un nod în baza de date conexiune, noduri
schemă apar mai multe.
2. În editorul SQL, tastaţi în interogare de mai jos. Aceasta este o definiţie tabel pentru tabelul de
consilier care eşti pe cale de a crea.
83
4. SMALLINT id UNSIGNED NOT NULL AUTO_INCREMENT,
5. VARCHAR Prenumele (50),
6. VARCHAR nickname (50),
7. VARCHAR NumeDeFamilie (50),
8. de telefon VARCHAR (25),
9. VARCHAR de e-mail (50),
10. memberSince DATA DEFAULT '0000-00-00 ',
11. PRIMARY KEY (id)
);
Notă: Interogări format în Editorul SQL sunt analizat şi executat în Structured Query Language
(SQL). SQL aderă la stricte reguli de sintaxă care ar trebui să fie familiarizat cu atunci când se
lucrează într-un editor IDE lui. La execută o interogare, feedback-ul de la motorul de SQL este
generat în fereastra de ieşire indică dacă execuţia a avut succes sau nu.
12. Pentru a executa interogarea, fie faceţi clic pe Run SQL ( ), Buton pe bara de sarcini din
partea de sus (Ctrl-Shift-E), sau faceţi clic dreapta în cadrul Editor SQL şi alegeţi Run Declaratie.
IDE genereaza tabelul de consilier în baza de date, şi primiţi un mesaj similar cu următorul în
fereastra Output.
13. Pentru a verifica modificările, faceţi clic dreapta pe nodul tabelele din baza de date Explorer şi
alegeţi Refresh. Actualizează Actualizează opţiune UI Explorer bazei de date componentă a stării
actuale a bazei de date specificate. Reţineţi că nodul nou tabel Consilier ( ) Afişează
acum în conformitate cu tabelele din baza de date explorer. Dacă vă extindeţi tabelul de nod
puteţi vedea coloanele (câmpurile) le-aţi creat, incepand cu cheia primară ( ).
primară. Reţineţi că, atunci când selectaţi caseta de cheie de validare, Index şi casetele de
selectare unice sunt, de asemenea, selectate automat şi caseta de selectare Null este deselectat.
Acest lucru se datorează faptului că cheile primare sunt utilizate pentru a identifica un rând unic
în baza de date, precum şi de forma implicit tabel index. Pentru ca toate rândurile trebuie să fie
identificate, chei primare nu poate conţine o valoare Null.
4. Pentru nume de coloană, introduceţi id. Pentru Tip de date, alegeţi SMALLINT din lista
5. Repetaţi această procedură prin specificarea toate câmpurile rămase, după cum se arată în
tabelul de mai jos.
6. Sunteti a crea un tabel numit Sub rezerva, care va deţine date pentru fiecare dintre
următoarele înregistrări.
o Nume: numele a subiectului
85
Asiguraţi-vă că dvs. Creaţi câmpurile din tabelul de dialog se potrivesc cu cele de mai sus, apoi
faceţi clic pe OK. IDE generează tabel Subiect in baza de date, şi puteţi vedea un nod nou
tabel Subiect ( ) Imediat de afişare în conformitate cu tabelele din baza de date Explorer.
În scopul de a lucra cu datele de masă, puteţi face uz de Editor SQL în NetBeans IDE. Prin rularea
interogări SQL pe o bază de date, puteţi adăuga, modifica şi şterge datele menţinute în structuri de baza
de date. Pentru a adăuga un nou record (RL) la tabel Consilier, faceţi următoarele:
1. Alegeţi Execute Command din dosarul tabelele din baza de date Explorer. O pânză-martor se
deschide în Editor SQL în fereastra principală.
În fereastra de iesire, puteţi vedea un mesaj care indică faptul că interogarea a fost executat cu
succes.
5. Pentru a verifica faptul că nou record a fost adăugată la tabelul de consilier, în baza de date
Explorer, faceţi clic dreapta pe tabelul de nodul Consilier şi alegeţi vizualizarea de date. Un
nou SQL Editor panoul se deschide în fereastra principală. Când alegeţi vizualizarea de date, o
interogare pentru a selecta toate datele din tabelul este generat automat în regiunea superioară
a Editor SQL. Rezultatele declaraţie sunt afişate într-o vizualizare tabel în regiunea inferioară.
În acest exemplu, afişează tabelul de consilier. Reţineţi că un rând nou a fost adăugat cu
O altă modalitate de a gestiona datele tabel, în NetBeans IDE este prin rularea unui script de externe,
SQL direct în IDE. Dacă aţi creat un script de SQL în altă parte, aveţi posibilitatea să deschideţi pur şi
simplu în NetBeans IDE şi a alerga it în Editorul de SQL.
Pentru scopuri demonstrative, ifpwafcad.sql descărcaţi şi a salva it într-o locaţie de pe computer. Acest
script creează două tabele similar cu ceea ce tocmai aţi creat de mai sus (Consilier şi sub rezerva),
86
Pentru ca script-ul suprascrie aceste tabele în cazul în care acestea există deja, a şterge Consilier şi
tabele Subiect acum, astfel, devine evident că tabele noi sunt create atunci când rularea script-ului.
1. Faceţi clic dreapta pe nodul selectat tabelul din baza de date Explorer şi alegeţi Delete.
2. În Confirmare ştergeri obiect de dialog care se afişează, faceţi clic pe Da. Reţineţi că nodul de
masă este în mod automat eliminat din baza de date Explorer.
Notă: Puteţi şterge tabelul de mai mult decât înainte de acest Apare caseta de dialog.
1. Alegeti File> Open File din meniul IDE principal. În browser-ul de fişiere naviga la locaţia unde
aţi salvat anterior ifpwafcad.sql şi faceţi clic pe Open. Script-ul se deschide automat în
Editorul de SQL.
2. A face conexiunea la MyNewDatabase sigur că este selectat din meniul drop-down de conectare
3. Faceţi clic pe Run SQL ( ), Buton pe task bar Editor SQL lui. Script-ul este executat
împotriva baza de date selectată, precum şi orice feedback-ul este generat în fereastra de iesire.
fereastra Durata şi alegeţi Refresh. Actualizează Actualizează opţiune UI Explorer bazei de date
componentă a stării actuale a bazei de date specificate. Reţineţi că cele două tabele noi de la
script-ul SQL acum o afişaţi ca noduri tabelul de la MyNewDatabase în Explorer baza de date.
5. Alegeţi vizualizarea de date de la meniul clic dreapta a unui nod tabel selectat pentru a vedea
datele conţinute în tabele noi. În acest mod, puteţi compara datele de tabel cu datele cuprinse
în script-ul SQL pentru a vedea că ele se potrivesc.
87
MODULU VI. APPLET-uri
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
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 operaţiei de compilare rezultă fişierul cu extensia .class care este încarcat în
pagina şi interpretat de browser. Vezi figura 5.1 şi 5.2.
89
Figura 5.1 Applet rulat în Netbeans
90
<HEAD>
<TITLE>Applet HTML Page</TITLE>
</HEAD>
<BODY>
<!--
*** GENERATED applet HTML launcher - DO NOT EDIT IN 'BUILD' FOLDER ***
If you need to modify this HTML launcher file (e.g., to add applet parameters),
copy it to where your applet class is found in the SRC folder. If you do this,
the IDE will use it when you run or debug the applet.
Tip: To exclude an HTML launcher from the JAR file, use exclusion filters in
the Packaging page in the Project Properties dialog.
For more information see the online help.
-->
<H3><HR WIDTH=‘‘100%”>Applet HTML Page<HR WIDTH=‘‘100%”></H3>
<P>
<APPLET codebase=‘‘classes” code=‘‘aa/imagini.class” width=350
height=200></APPLET>
</P>
<HR WIDTH=‘‘100%”><FONT SIZE=-1><I>Generated by NetBeans IDE</I></FONT>
</BODY>
</HTML>
În figura 5.1 se poate observa pricipalele metode specifice unui Applet. Un applet nu
poate să:
• citească sau scrie documente pe calculatorul client;
• deschidă conexiuni cu alte maşini , decât pe cea de pe care provine – host;
• pornească programe încărcate pe maşina client
• citeasca diverse proprietati ale sistemului de operare al clientului
import java.applet.*;
import java.awt.*;
public class GetParam extends Applet {
String a,b,c;
public void init(){
if((a=getParameter(”arg1”))==null)
a=‘‘nu exista aceste parametru a in documentul testat”;
if((b=getParameter(”arg2”))==null)
b=‘‘nu exista aceste parametru b in documentul testat”;
if((c=getParameter(”arg3”))==null)
c=‘‘nu exista aceste parametru c in documentul testat”;
if((a=getParameter(”arg1”))==null)
a=‘‘nu exista aceste parametru a in documentul testat”;
}
public void paint(Graphics g) {
g.drawString(”a=‘‘+a,20,20);
g.drawString(”b=‘‘+b,20,40);
g.drawString(”c=‘‘+c,20,60);
}}
91
Prin încarcarea în browser a fişierului .class rezultă imaginea din figura 5.3
Exemplu 1
import java.applet.Applet;
import java.lang.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.*;
public class listacomplexa extends Applet
implements ActionListener{
private List lista;
private Button buton;
public void init()
{lista=new List(3,true);
lista.add("red");
lista.add("blue");
lista.add("green");
lista.add("yellow");
add(lista);
buton=new Button("Afiseaza");
add(buton);
buton.addActionListener(this);
92
}
public void actionPerformed(ActionEvent e)
{if(e.getSource()==buton)
{String[] sel=lista.getSelectedItems();
String sir=" ";
Exemplu 2
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
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();
93
public class Canvasnou extends Canvas
{
public void paint(Graphics g)
{
g.drawString("mesaj",15,15);}
Exemplu 4
import java.applet.Applet;
import java.awt.event.ActionListener;
import java.awt.event.*;
import java.awt.*;
}
if(e.getSource()==afisare){
String texttot=mesaj.getText();
String sir="sirul este"+texttot;
showStatus(sir);
}
}
Exemplu 5
package p1;
import java.applet.Applet;
import java.awt.Color;
import java. awt.Graphics;
94
public class triunghi extends Applet{
public void paint (Graphics g)
{g.setColor(Color.blue);
deseneaza_triunghi(g,20,20,10,11);
g.drawString("Aria este"+ aria_triunghi(10,11),30,30);
g.setColor(Color.magenta);
deseneaza_triunghi(g,100,100,60,70);
g.drawString("Aria este"+ aria_triunghi(60,70),150,180);
}
private void deseneaza_triunghi(Graphics g, int bottomx, int bottomy, int baza, int
inaltime)
{int rightx = bottomx + baza;
int topx = bottomx + baza/2;
int topy = bottomy + inaltime;
g.drawLine(bottomx, bottomy, rightx, bottomy);
g.drawLine(rightx, bottomy, topx, topy);
g.drawLine(topx, topy, bottomx, bottomy);
}
95
MODULUL VII. Aplicatii WEB implementate in Java
Acest document vă va duce, prin bazele utilizării NetBeans IDE pentru a dezvolta aplicatii web. Acesta
demonstrează cum să creaţi o simpla cerere de web, implementa-l la un server şi a vizualiza prezentarea
sa într-un browser. Aplicatia foloseste o JavaServer Pages ™ (JSP) pagina să vă rog să introduceţi
numele dumneavoastră. Apoi, foloseste o componenta JavaBeans ™ să persiste numele în cursul sesiunii
• Rezolvarea problemelor
• A se vedea de asemenea,
Pentru a urma acest tutorial, aveţi nevoie de următoarele produse software şi resurse.
Note:
Apache Tomcat containerul servlet 6.0.x. Trebuie să instalaţi unul dintre acestea să lucreze prin acest
tutorial.
• Pentru a profita de Java NetBeans IDE lui EE 5 capabilităţi, utilizaţi un server de aplicatii, care
este în deplină conformitate cu Java EE 5 caietul de sarcini, cum ar fi GlassFish Application Server V2
UR2. Dacă utilizaţi un server diferit, consultaţi Notele de lansare şi de întrebări frecvente pentru
problemele cunoscute şi de workarounds. Pentru informaţii detaliate despre serverele sprijinit şi Java
Platform EE, a se vedea Notele de lansare.
96
• Dacă aveţi nevoie pentru a compara proiectul cu o soluţie de lucru, puteţi descărca aplicaţia
proba.
1. Alege File> New Project (Ctrl-Shift-N) din meniul principal. Sub Categorii, selectaţi Java Web.
În cadrul proiectelor, selectaţi aplicatii Web, apoi faceţi clic pe Next.
3. Specificaţi Locatia Proiectului la orice director de pe computer. În sensul acestui tutorial, acest
4. (Opţional) Selectaţi Utilizare dedicate Pliant pentru stocarea caseta de selectare Bibliotecile şi
specificaţi locaţia pentru bibliotecile folder. A se vedea Sharing Biblioteci de proiect pentru mai
multe informaţii pe această opţiune.
dumneavoastră. Doar serverele care sunt înregistrate cu IDE sunt listate. Reţineţi că calea
Contextul (de exemplu, de pe server) devine / HelloWeb, care se bazează pe numele-aţi dat
6. Selectaţi versiunea de Java EE doriţi să le utilizaţi cu aplicaţia dvs. şi faceţi clic pe Următorul.
script-ul. Proiectul HelloWeb se deschide în IDE. Pagina de bun venit, index.jsp, se deschide în
Editor Sursa în fereastra principală. Puteţi vizualiza structura proiectului fişierul în fereastra Files
Crearea şi editarea fişierelor sursă este funcţia cea mai importantă pe care IDE serveşte. La urma
urmei, care este, probabil, ceea ce petrece cea mai mare dintr-o zi fac. IDE oferă o gamă largă de
97
instrumente care pot compliment orice dezvoltator stilul lui personal, indiferent dacă tu prefer la codul
totul cu mâna sau doresc IDE pentru a genera bucăţi mari de cod pentru tu.
2. Faceţi clic dreapta pe Pachete Sursa nodul şi a alege nou> Java Class. NameHandler
3. În editorul Sursa, declara o variabilă de coarde tastând următoarea linie în mod direct de mai
String name;
4. Se adaugă următorul constructor la clasa:
NameHandler publice ()
5. Adăugaţi următoarea linie în NameHandler () constructor:
nume = null;
Vizibilitate Domenii "este în mod implicit setat la privat, şi vizibilitate evaluatorilor" la public,
care indică faptul că modificatorul de acces pentru clasa declaraţie variabile, va fi specificat drept
2. Faceţi clic pe Refactor. Reproducător şi metode de setter sunt generate pentru câmpul nume.
Modificator pentru variabila de clasă este setat la privat, în timp ce reproducător şi metode de
setter sunt generate cu modificatori publice. Clasa Java acum ar trebui să arate similar cu
următorul.
3. Pachetul org.mypackage.hello;
4.
5. / **
6. *
7. * @ Author nbuser
8. * /
9.
10. public class NameHandler (
11.
12. Numele privat String;
13.
98
14. / ** Creează o nouă instanţă de NameHandler * /
15. NameHandler publice () (
16. nume = null;
17. )
18.
19. getname public String () (
20. Numele de returnare;
21. )
22.
23. setName public void (String nume) (
24. this.name = nume;
25. )
26.
)
2. În Palette (Ctrl-Shift-8) situat în partea dreaptă a Source Editor, extindeţi Formularele HTML şi
trageţi un element Formular de până la un punct, după tag-uri <h1> în Editorul de Source.
o Acţiune: response.jsp
o Metoda: GET
4. Glisaţi un element de introducere a textului pentru un punct chiar înainte de </ form> tag-ul,
99
o Nume: Nume
o Tip: text
Faceţi clic pe OK. O <input> HTML tag-ul, se adaugă între etichetele <form>.
5. Glisaţi un element de buton la un punct chiar înainte de </ form> tag-ul. Specificaţi
următoarele valori:
o Label: OK
o Tip: submit
6. Tip Introduceţi numele dumneavoastră: chiar înainte de prima <input> tag-ul, apoi
modificaţi implicit Hello World! Textul dintre tag-uri <h1> la intrarea pe formular.
7. Format Faceţi clic dreapta pe cadrul Editor Sursa şi alegeţi (Alt-Shift-F), pentru a ordonat
formatul codul dumneavoastră. Fişierul dvs. index.jsp ar trebui să apară acum similară cu
următoarea:
8. <html>
9. <head>
10. <meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
11. <title> JSP Page </ title>
12. </ head>
13. <body>
14. <h1> Formular de intrare </ h1>
15.
16. <form Form" name="Name de intrare action="response.jsp">
17. Introduceţi numele dumneavoastră:
18. <input type="text" name="nume" />
19. <input type="submit" value="OK" />
20. </ form>
21. </ body>
</ html>
Noua JSP expertul fişierul se deschide. Numele fişierului de răspuns, şi faceţi clic pe
2. În paleta de la dreptul de Sursa Editor, extindeţi JSP şi glisaţi un element Utilizaţi Bean la un
punct chiar sub tag-ul <body> în Editorul Source. Utilizarea de dialog Inserare Bean se
100
o ID: mybean
o Clasa: org.mypackage.hello.NameHandler
Faceţi clic pe OK. Observaţi că tag-ul <jsp:useBean> se adaugă sub tag-ul <body>.
3. Glisaţi un set de fasole element de proprietate de la paleta de la un punct chiar înainte de <h1>
tag-ul şi faceţi clic pe OK. În tag-ul <jsp:setProperty> care apare, a º terge atributul gol
valoarea şi modifică după cum urmează.
valoare de proprietate în diferite moduri. În acest caz, datele introduse de utilizator care provin
din index.jsp devine un nume / pereche valoare care este trecut la obiectul cererii. Când
numele unei proprietăţi cuprinse în obiectul cererii. Prin urmare, prin stabilirea de
proprietate pentru nume, puteţi recupera valoarea specificată de date introduse de utilizator.
4. Schimbaţi textul dintre tag-urile <h1> astfel încât aceasta să arată astfel:
Faceţi clic pe OK. Observaţi că <jsp:getProperty> tag-ul este acum adaugă între etichetele
<h1>.
6. Format Faceţi clic dreapta pe cadrul Editor Sursa şi alegeţi (Alt-Shift-F), pentru a ordonat
formatul codul dumneavoastră. <body> Tag-uri de fişier dvs. response.jsp ar trebui să apară
IDE foloseste o furnică construi script pentru a construi şi rula aplicaţii web dumneavoastră. IDE
genereaza construi script-ul functie de optiunile pe care le specificaţi în expertul New Proiectului, precum
şi cele de la Proiectul proiectului caseta de dialog Proprietăţi (În fereastra de Proiecte, alegeti Properties
din meniul nodul proiectului click dreapta).
1. În fereastra Proiecte, faceţi clic dreapta pe nodul de proiect HelloWeb şi alegeţi Run (F6).
Notă: În mod implicit, proiectul a fost creat cu compilaţi pe caracteristica Salvare activat, deci
nu este nevoie de a compila codul primul dvs. pentru a rula aplicaţia în IDE. Pentru mai multe
2. Introduceţi numele dumneavoastră în caseta de text, apoi faceţi clic pe OK. Afişează
response.jsp pagină, oferindu-vă cu un salut simplu.
Notă: Aplicaţia ilustrate mai sus dislocaţi la Web Tomcat Server. Dacă v-aţi înregistrat şi selectat un
alt server ţintă în schimb, nu veţi avea un fişier META-INF/context.xml. De exemplu, dacă serverul dvs.
este GlassFish, veţi avea un fişier WEB-INF/sun-web.xml ca descriptor de desfăşurare dumneavoastră.
102
MODULUL VIII. ALTE APLICATII
* ProiectZiuaFrame.java
*
*/
package my.ProiectZiua;
/**
*
* @author profesor
*/
public class ProiectZiuaFrame extends javax.swing.JFrame {
103
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLO
SE);
jLabel1.setText(" Ziua saptamanii (cifre)");
jTextField1.setText("jTextField1");
jTextField2.setText("jTextField2");
jButton1.setText("Transformare");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("Clear");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jButton3.setText("Exit");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(layout.createSequentialGroup()
.addGap(32, 32, 32)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.TRAILING)
.addComponent(jButton3)
104
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING, false)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.TRAILING, false)
.addComponent(jLabel2,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jLabel1,
javax.swing.GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE))
.addGap(43, 43, 43)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING, false)
.addComponent(jTextField2)
.addComponent(jTextField1,
javax.swing.GroupLayout.DEFAULT_SIZE, 164, Short.MAX_VALUE)))
.addGroup(layout.createSequentialGroup()
.addGap(61, 61, 61)
.addComponent(jButton1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton2))))
.addContainerGap(19, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(layout.createSequentialGroup()
.addGap(37, 37, 37)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addGap(33, 33, 33)
105
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.TRAILING)
.addComponent(jTextField2,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2))
.addGap(45, 45, 45)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2))
.addGap(46, 46, 46)
.addComponent(jButton3)
.addContainerGap(39, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ProiectZiuaFrame().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration
/*
* Calculator.java
*
107
/** Creates new form Calculator */
public Calculator() {
initComponents();
}
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLO
SE);
jButton1.setText("+");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("-");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jButton3.setText("*");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
108
jButton4.setText("/");
jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton4ActionPerformed(evt);
}
});
jButton5.setText("^");
jButton5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton5ActionPerformed(evt);
}
});
jButton6.setText("Clear");
jButton6.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton6ActionPerformed(evt);
}
});
jButton7.setText("Exit");
jButton7.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton7ActionPerformed(evt);
}
});
jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("Calcula
tor"));
jLabel1.setText("Nr 1");
jLabel2.setText("Nr 2");
jLabel3.setText("Rezultat");
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.
LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
109
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.
Alignment.TRAILING)
.addComponent(jLabel3,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE)
.addComponent(jLabel2,
javax.swing.GroupLayout.Alignment.LEADING,
javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE)
.addComponent(jLabel1,
javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.
Alignment.LEADING)
.addComponent(jTextField3,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.PREFERRED_SIZE, 239,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jTextField1,
javax.swing.GroupLayout.Alignment.TRAILING,
javax.swing.GroupLayout.DEFAULT_SIZE, 239, Short.MAX_VALUE)
.addComponent(jTextField2,
javax.swing.GroupLayout.DEFAULT_SIZE, 239, Short.MAX_VALUE))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.
LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(22, 22, 22)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.
Alignment.BASELINE)
.addComponent(jLabel1)
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(20, 20, 20)
110
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.
Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(jTextField2,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(27, 27, 27)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.
Alignment.BASELINE)
.addComponent(jLabel3)
.addComponent(jTextField3,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(35, Short.MAX_VALUE))
);
jPanel1.getAccessibleContext().setAccessibleName("Calculator");
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(layout.createSequentialGroup()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jPanel1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE))
.addGroup(layout.createSequentialGroup()
.addGap(21, 21, 21)
.addComponent(jButton1,
javax.swing.GroupLayout.PREFERRED_SIZE, 43,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(17, 17, 17)
111
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.TRAILING, false)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING,
layout.createSequentialGroup()
.addComponent(jButton6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton7))
.addGroup(layout.createSequentialGroup()
.addComponent(jButton2,
javax.swing.GroupLayout.PREFERRED_SIZE, 44,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(25, 25, 25)
.addComponent(jButton3,
javax.swing.GroupLayout.PREFERRED_SIZE, 44,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(21, 21, 21)
.addComponent(jButton4,
javax.swing.GroupLayout.PREFERRED_SIZE, 47,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(16, 16, 16)
.addComponent(jButton5)))))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE,
Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(layout.createSequentialGroup()
.addGap(19, 19, 19)
.addComponent(jPanel1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(26, 26, 26)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(jButton1)
.addComponent(jButton2)
.addComponent(jButton3)
112
.addComponent(jButton5)
.addComponent(jButton4))
.addGap(29, 29, 29)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING, false)
.addComponent(jButton7,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton6,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap(29, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Calculator().setVisible(true);
}
});
}
/*
* ConvertorUI.java
*
package my.Convertor;
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLO
SE);
setTitle("Celsius Convertor_Lupoaie");
jTextField1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jTextField1ActionPerformed(evt);
}
});
jLabel1.setText("Celsius");
jButton1.setText("Convert");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jLabel2.setText("Fahrenheight");
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING, false)
.addComponent(jTextField1)
.addComponent(jButton1,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addGap(26, 26, 26)
116
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.LEADING)
.addComponent(jLabel1,
javax.swing.GroupLayout.DEFAULT_SIZE, 139, Short.MAX_VALUE)
.addComponent(jLabel2,
javax.swing.GroupLayout.DEFAULT_SIZE, 139, Short.MAX_VALUE))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADIN
G)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(jTextField1,
javax.swing.GroupLayout.PREFERRED_SIZE,
javax.swing.GroupLayout.DEFAULT_SIZE,
javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel1))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELAT
ED)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignme
nt.BASELINE)
.addComponent(jButton1)
.addComponent(jLabel2))
.addContainerGap(76, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new ConvertorUI().setVisible(true);
}
});
}
118
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. Scrieţi setul de comenzi pentru realizarea unei aplicaţii Java care va creea o
fereastră ca cea din figura alăturată. Explicaţi instrucţiunile 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
119
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();
}
}
120
EXEMPLE DE ACTIUNI PE UN BUTON
float nr1,nr2,rezultat;
nr1=Float.parseFloat(jTextField1.getText());
nr2=Float.parseFloat(jTextField2.getText());
rezultat=nr1+nr2;
jTextField3.setText(String.valueOf(rezultat));
jTextField1.setText("");
jTextField2.setText("");
jTextField3.setText("");
int temp;
temp=(int)(Double.parseDouble(jTextField1.getText())*1.8+32);
jLabel2.setText(temp+" Fahrenheit");
System.exit(0);
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;
}
121
Bibliografie
1. Stefan Tanasa, Cristian Olaru, Stefan Andrei, "Java de la 0 la
expert", Editura Polirom, 2003
2. Jim Keogh – Java fara mistere, Ed Rosetti Educational, 2004
3. Ştefan Tănasă, Cristian Olaru, Ştefan Andrei – Java de la 0 la
expert, Polirom, 2003
4. The SWING Tutorial
(http://java.sun.com/docs/books/tutorial/uiswing/)
5. Matthew Robinson, Pavel Vorobiev - Swing, Second Edition,
Manning, 1999
6. David M. Geary - Graphic Java 2, Prentice Hall, 2000
7. www.netbeans.org
8. www.sun.com
9. http://java.sun.com/docs/books/tutorial/getStarted/cupojava/netbea
ns.html
10. http://www.roseindia.net/java/example/java/swing/graphics2D/creat
e-animation.shtml
11. http://java.sun.com/docs/books/tutorial/uiswing/examples/compone
nts/index.html
122
Nota finală care se va acorda fiecărui student va
conţine următoarele componente în procentele
menţionate:
- colocviu final 60%
- lucrari practice/ proiect, etc. 20%
-teste pe parcursul semestrului 10%
-teme de control 10%
123
Exemplu 1
124
Exemplu 2
6.
125