Documente Academic
Documente Profesional
Documente Cultură
Curs Interfete JAVA
Curs Interfete JAVA
2
poart denumirea de "main virtual java" (eng. Java Virtual Machine, JVM
denumit mai nou JRE Java Runtime Environment).
compilare
executare
Aplicaiile scrise n Java conin una sau mai multe clase. De regul clasele
sunt coninute n fiiere distincte ale cror nume coincid cu numele claselor. Una
dintre clase va conine metoda principal, main(), care definete punctul de nceput a
aplicaiei.
Dei iniierea n Java folosind un editor simplu, compilatorul javac i
procesorul virtual java poate fi o abordare n nvarea limbajului, n cele ce urmeaz
aplicaiile vor fi dezvoltate folosind unul dintre mediile integrate, NetBeans.
1.
2.
5
n noua ferestr se indic numele proiectului (Greutate), directorul n care va
fi creat (D:\ProiecteJava) i se deselecteaz caseta de validare Create Main Class
deoarece clasa principal va fi creat ulterior.
Rezultatul va fi crearea componentelor proiectului Greutate.
3.
Rezultat:
8
Save All
Comentarii
Programele Java conin explicaii sub forma unor comentarii. Acestea vor
asigura n timp nelegerea diferitelor metode i rolul funcional al variabilelor folosite.
Exemplu de aplicaie scris folosind comentarii:
class Greutate
{
/* Clasa Greutate permite calculul greutatii ideale.
Formula folosita determina greutatea pentru barbati, pentru femei rezultatul
trebuie inmultit cu 0.9.
*/
public static void main ( String[] args )
{
int h, v; // h - inaltimea in cm si v - varsta in ani
double g; // greutatea in kg
h = 178;
v = 36;
g = 50 + 0.75 * (h-150) + 0.25 * (v - 20);
System.out.println("Greutatea ideala (barbat) = " + g + " kg");
System.out.println("Greutatea ideala (femeie) = " + 0.9*g + " kg");
}
}
// Sfarsit main
// Sfarsit clasa Greutate
(comentariu) */.
10
De regul se folosesc comentariile n linie, cel de-al doilea tip fiind folosit
frecvent n timpul depanrii programelor mari i complexe, pentru a suprima din
program anumite zone.
Comentariile care ncep cu /** sunt prelucrate de aplicaia javadoc pentru
realizarea automat a unei pagini web coninnd comentariile programatorului.
Aceast facilitate este folosit pentru documentarea rapid a programelor mari,
compuse din mai multe clase.
Variabile
n Java numele unei variabile, metode sau clase poate fi orice combinaie de
litere i cifre, ncepnd cu o liter.
double
int
strictfp
boolean
else
interface
super
break
extends
long
switch
byte
final
native
synchronized
case
finally
new
this
catch
float
package
throw
char
for
private
throws
class
goto
protected
transient
const
if
public
try
continue
implements
return
void
default
import
short
volatile
do
instanceof
static
while
true
false
null
11
Descriere
Mrime/Reprezentare intern
(numere ntregi)
byte
short
ntreg scurt
int
Intreg
long
ntreg lung
float
Simpl precizie
double
Dubl precizie
char
Un caracter
boolean
O valoare logic
Spre deosebire de alte limbaje, n Java informaiile din tabelul precedent sunt
valabile indiferent de calculatorul pe care se execut programul.
12
pornind de la succesiunea de apeluri de metode care realizeaz afiarea pe ecran a
rezultatelor programului scris mai sus:
System.out.println("Gr. (barbat) = " + g + " kg");
System.out.println("Gr. (femeie) = " + 0.9*g + " kg");
iruri
Pentru a utiliza un ir, n Java trebuie declarat i apoi realizat alocarea
memoriei necesare.
Exemple fundamentale:
int
a[];
//
a = new int[7];
int b[] = {1, 3, 4, 6, 10};
Astfel, dup
irurile pot avea dou sau chiar mai multe dimensiuni. Exemplu:
int [ ] [ ] c;
c = new int [3] [4];
c[0] [2] = 17;
System.out.println("c(0,2) ="+c[0] [2]);
13
Exemplu:
for (i=0; i<a.length; i++)
Clasa String
n Java irurile de caractere sunt obiecte aparinnd clasei String. Declararea
unui ir de caractere poate fi realizat fie scriind:
String unu="Thomas ";
Unirea mai multor obiecte de tip String anterior definite se realizeaz folosind
operatorul '+', astfel:
String trei;
trei=unu+" & " + doi;
Se pot defini desigur iruri de iruri. Declaraia String [ ] args care apare
sistematic n lista de parametri ai metodei main() este un bun exemplu.
Literali
n timpul scrierii unui program, programatorul folosete frecvent literali.
Literalii sunt valori aparinnd tipurilor primitive prezentate. Compilatorul analizeaz
aceste valori, le stabilete tipul, le convertete i le memoreaz n locaii din
memorie. De exemplu, n clasa Greutate aprea atribuirea:
h = 178;
14
Compilatorul va asocia literalului "178" tipul int., va face conversia n binar
corespunztoare i va memora rezultatul ntr-o zon din memorie avnd o lungime
de 4 octei. La fel, n expresia greutii:
g = 50.0+0.75*(h-150)+0.25*(v-20);
compilatorul va considera c 50.0, 0.75 i 0.25 sunt double (numere reale n dubl
precizie) iar 150 i 20 sunt int (numere ntregi).
Exemple fundamentale:
Literal
Tipul de dat
178
int
8864L
long
37.266
double
37.266D
double
87.363F
float
26.77e3
double
'c'
char
true
boolean
false
boolean
15
i < (lim + 1)
identic cu
if (corect == false) . . .
Conversiile de tip
Cnd
ntr-o
expresie
intervin
operanzi
de
tipuri
diferite,
operanzii
corespunznd unui tip mai restrictiv se convertesc automat spre tipul mai general
astfel nct nu se produce pierdere de informaie.
Dac rezultatul unei expresii este float sau double i este atribuit unei
variabile de tip ntreg, compilatorul va sesiza posibila pierdere de informaie i va
semnala o eroare.
16
(nume-tip) expresie
expresie este convertit n tipul specificat :
x = Math.sqrt((double)n)
alfa = (float)a / j ;
--
x = n++ ;
atribuie 5 lui x
x = ++n ;
atribuie 6 lui x
n general n Java,
exp1 op= exp2 ;
echivaleaz cu
Exemplu fundamental:
x *= y + 1 ;
echivaleaz cu :
x = x * (y + 1) ;
i nu cu
x=x*y+1;
17
Expresiile condiionale
Pentru a calcula expresia z = max(a, b) ;
se poate scrie
if (a > b)
max = a ;
else
max = b ;
Instruciunea de decidere - if
Ansamblul de instruciuni cuprinse ntre acolade formeaz o instruciune
compus sau un bloc de instruciuni.
if (expLogica )
{
mai multe instruciuni
}
if (expLogica )
instruciune;
else
instruciune;
if (expLogica )
{
mai multe instruciuni
}
else
{
mai multe instruciuni
}
if (expLogica )
instruciune;
if (expLogica )
{
18
else
{
mai multe instruciuni
}
Instruciunea while
Instruciunea while permite realizarea unei structuri repetitive (ciclu)
condiionate anterior. Corpul ciclului poate fi executat o dat, de mai multe ori sau
de loc.
Exemplu fundamental:
int contor = 1;
while ( contor <= 3 )
{
System.out.println("Contor = "+contor);
contor = contor + 1; // sau mai bine contor++
}
System.out.println("La revedere!");
instruciune
Instruciunea do
while ( condiie )
{
una sau m.
m.instruciuni
}
19
Exemplu:
g = 9.81;
t = 0;
do
{
d = (g * t * t ) / 2;
System.out.println( t + " " + d);
t = t + 1;
}
while (d <= 500);
Instruciunea for
Instruciunea for este preferat ori de cte ori trebuie realizat un ciclu care
folosete un contor. Ea poate fi ns folosit ns n toate cazurile n care trebuie s
realizm un ciclu, i reprezint o modalitate compact i elegant de scriere a
acestora.
Dac naintea unui ciclu trebuie realizate mai multe iniializri, acestea pot
scrise n for una dup alta, desprite prin virgule:
class Suma
{
public static void main ( String[] args )
{
int [] a = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, sum;
for (i=0,sum = 0; i<a.length; i++)
sum = sum + a[i];
System.out.println("Suma elementelor sirului a este: "+sum);
}
}
20
Oricare dintre cele trei pri ale instruciunii for pot lipsi. Lipsa condiiei de
reluare este echivalent cu a scrie o condiie care este ntotdeauna adevrat.
Ieirea dintr-un astfel de ciclu se poate face folosind instruciunea break.
Exemplu:
for ( ; ; )
{
..
break;
..
}
Instruciunea switch
Instruciunile de ciclare prezentate, while, do i for sunt folosite pentru
realizarea blocurilor de instruciuni a cror execuie ncepe cu prima linie i este
controlat de ctre programator.
switch (expresie)
{
case constanta_1 : instruciuni
case constanta_2 : instruciuni
...
default : instruciuni;
}
Fiecare dintre punctele de unde poate ncepe execuia blocului este etichetat
printr-o constant avnd valoare ntreag. Dac expresia de testat corespunde
uneia dintre constante, execuia blocului ncepe din punctul indicat de aceasta.
Cazul default este facultativ.
21
Exemplu :
switch (t)
{
case 's' :
rez = Math.sin(Math.PI * x / 180.);
System.out.println("rezultatul este : "+rez);
break;
case 'c' :
rez = Math.cos(Math.PI * x / 180.);
System.out.println("rezultatul este : "+rez);
break;
case 't' :
rez = Math.sin(Math.PI * x / 180.)/Math.cos(3.14159 * x / 180.);
System.out.println("rezultatul este : "+rez);
break;
default:
System.out.println("Caracter incorect!");
}
numele obiectului ale crui date trebuie prelucrate fie de numele clasei creia i
22
aparine metoda.
parametrii
transmii
momentul
apelului,
ca
cazul
metodelor
care
Vizibilitatea variabilelor
Vizibilitatea unei variabile se definete ca zona din program n care aceasta
este cunoscut deci poate fi accesat. Regulile privind vizibilitatea variabilelor n
Java pot fi reprezentate grafic.
zona de vizib. a
var. clasei
class vizvar {
declaraii variabile membre
public void metoda_1( declaratii parametri)
zona de vizib. a
param. metodei
zona de vizib. a
param. excepiei
}
Din punct de vedere al locului declarrii, o variabil poate fi membr a clasei
(declarat n afara oricrei metode) sau local (declarat n interiorul unei metode,
de obicei la la nceputul acesteia sau la nceputul unui bloc din interiorul acesteia).
Variabilele locale aparinnd unor blocuri separate sunt diferite, chiar dac
poart acelai nume. Se recomand totui folosirea unor nume de variabile distincte
i mai ales sugestive, care s ajute programatorul n urmrirea logicii programului.
Unei variabile membre a clasei i se aloc spaiu n memorie n momentul
crerii unei instane a clasei folosind operatorul new.
23
Variabilele locale exist pe timpul execuiei blocului n care au fost declarate
i i nceteaz existena n momentul ieirii din acesta.
24
Caseta de validare
n Java
componentele unei interfee grafice sunt obiecte aparinnd unei colecii de clase
(cunoscut sub denumirea Swing). Obiectele grafice pot fi reprezentate sub forma
unei structuri arborescente, rdcina acesteia fiind un container principal.
Containerul principal poate fi un obiect aparinnd uneia dintre clasele urmtoare:
1. JFrame - pentru aplicaii Windows obinuite,
2. JApplet pentru miniaplicaii care pot fi integrate n pagini web sau
3. JDialog pentru ferestre de dialog.
Fiecare container conine un panou (content pane) pe care sunt dispuse
obiecte grafice (controalele Windows) i poate integra eventual o bar cu meniuri
derulante.
25
26
Informaiile din ferestra anterioar indic faptul c mediul va creea o clas
Exemplu, care va fi adugat pachetului exemplu. n Java clasele sunt coninute n
pachete (echivalentul spaiilor de nume din .NET). Pentru clasele proprii aplicaiei
NetBeans ofer varianta alternativ a includerii lor ntr-un pachet implicit (defaultpackage) dar se recomand crearea unui pachet distinct. Pentru pachetul creat
mediul va aduga pe disc un director nou purtnd numele pachetului, facilitnd astfel
accesul la fiierele coninnd clasele aplicaiei i arhivarea acestora.
n cazul claselor derivate din JFrame sau JDialog mediul de dezvoltare va
include n acestea n mod automat metoda main() acestea devenind astfel clase
principale.
27
28
Rezultatul va consta n afiarea zonei utile a ferestrei urmtoarei aplicaii.
Se
Not: Dac tabul Design nu este vizibil, tracerea la afiarea ferestrei aplicaiei
se poate realiza si din meniul aplicaiei (Wiew / Editors / Design).
29
Dac ferestrele necesare nu sunt afiate se va impune afiarea lor folosind
meniul Window. De exemplu pentru Palette se va selecta Window / Palette.
Pentru aplicaia considerat s-au adugat trei etichete (obiecte din clasa
JLabel), trei casete de text (obiecte din clasa JTextField) denumite h, v i g, o caset
de validare (obiect din clasa JCheckBox) denumit s i dou butoane (JButton).
Pentru schimbarea numelui unui control se selecteaz controlul i se editeaz
numele afiat n fereastra Inspector.
30
Pentru butonul Calcul codul metodei va fi:
):
31
Clas de mapare
byte
Byte
short
Short
int
Integer
long
Long
char
Character
float
Float
double
Double
boolean
Boolean
byte - Byte.parseByte(aString)
short - Short.parseShort(aString)
int - Integer.parseInt(aString)
long - Long.parseLong(aString)
32
-
float - Float.parseFloat(aString)
double - Double.parseDouble(aString)
boolean - Boolean.valueOf(aString).booleanValue();
double v = 3.14;
String sir = "" + v;
Deoarece n expresia atribuit variabilei sir primul termen este ir, operatorul
+ va fi considerat ca fiind operator de concatenare iar variabila v va fi automat
convertit n String.
33
Casete de text
Casetele de text sunt obiecte aparinnd clasei JTextField. Coinutul unei
casete de text este de regul un obiect de tip String. n timpul executrii programului
coninutul casetei poate fi preluat folosind metoda getText() i poate fi impus folosind
metoda setText(). Proprietile care sunt de obicei impuse sunt:
-
Opiune
Butoane
Butoanele sunt controale Windows destinate declanrii unei aciuni.
nelegerea modului n care se specific aciunea (metoda) care trebuie s fie
executat la declanarea unui anumit eveniment este posibil doar prin evidenierea
unor particulariti ale modului n care programarea obiectual este implementat n
Java.
34
se realizeaz folosind conceptul de interfa (eng. interface). O interfa poate fi
privit ca fiind o clas mai aparte, care conine un numr de metode abstracte care
trebuie suprascrise n cadrul clasei care o folosete. Suprascrierea unei metode a
unei interfee presupune scrierea unei metode avnd acelai nume cu cel al metodei
corespunztoare din definiia interfeei dar un coninut adaptat aplicaiei. Evident nu
se pot creea obiecte avnd ca tip o interfa n locul unei clase.
Declararea faptului c o clas suprascrie metodele unei interfee (sau ale mai
multor interfee) se realizeaz printr-o directiv implements:
class nume_clas implements interfa_1 [interfa_2 ...]
Exemplu :
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class CelsConv implements ActionListener
{
...
Aa cum deja se tie, obiectul referit prin this este obiectul curent care n
acest mod este indicat ca fiind listener (asculttor). Metoda apelat la producerea
evenimentului (clic pe buton) denumit n programare handler de eveniment, va fi
cea coninut n clasa creia i aparine obiectul declarat ca listener.
Aceasta este modalitatea prin care se "instituie" supravegherea i
interceptarea apsrii butoanelor butonCalcul i butonGata.
35
Interfaa ActionListener, implementat n clasa CelsConv, conine doar o
metod, actionPerformed().
Deoarece pot exista mai multe butoane ale cror selectri declaneaz aceeai
metod (n exemplul dat exist dou butoane), metoda actionPerformed() va
implementa un algoritm de identificare a sursei evenimentului.
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == butonCalcul)
{
double tempData = Double.parseDouble(tempCelsius.getText());
int tempFahr = (int)(tempData * 1.8 + 32);
tempCelsius.setText(""+tempFahr);
}
else
System.exit(0);
}
36
apelat
suprascrise
cadrul
metodei
interfeei
implementate,
Metoda aferent
37
n continuare se trece la editarea codului metodei, specific aplicaiei.
38
39
Corespunztor se va interveni n constructorul clasei dnd variabilei sens
valoarea true.
40
Pentru al doilea buton "Gata", funcia de tratare a evenimentului declanat la
acionarea sa va opri aplicaia.
Rezultat posibil:
41
Mediul
de
italicActionPerformed().
programare
afieaz
automat
numele
metodei,
42
modific
numele
metodei
(italicActionPerformed
->
43
Controale cu list
procesarea evenimentelor.
Controller
Model
View
44
Tip
Metoda
returnat
Aciune
void
addItem(Object obj)
void
Object
getSelectedItem()
int
getSelectedIndex()
void
removeAllItems()
Golete lista
void
removeItem(Object obj)
void
removeItemAt(int index)
getItemCount()
int
Exemple:
S se realizeze o aplicaie care afieaz n ferestr o imagine selectat
dintr-o list de imagini.
Pentru rezolvarea problemei se realizeaz o nou aplicaie Windows n
fereastra creia se adaug trei controale: dou de tip JLabel i unul de tip
JComboBox.
45
46
Pentru a putea funciona mai trebuie doar s se adauge clasei o metod care
s fie apelat la schimbarea elementului din list selectat. Evenimentul generat la
selectarea unui alt element din list este actionPerformed.
47
Formarea numelui imaginii care va fi afiat n controlul imagine se realizeaz
prin alturarea a trei iruri de caractere: "Imagini/" + nume + ".gif". Variabila nume
primete ca valoarea irul de caractere selctat. Rezult deci c n directorul Imagini
trebuie s existe patru fiiere avnd denumirile Pasare.gif,
48
JListBox
Controlul de tip JListBox permite s se selecteze o valoare sau mai multe
valori dintr-o list predefinit. i n cazul acestui control, definirea listei poate fi
realizat n etapa de proiectare a aplicaiei sau ulterior, n timpul execuiei.
Dac aplicaia se dezvolt folosind NetBeans, obiectul folosit ca model difer
pentru cele dou situaii. n cazul n care lista este definit n momentul proiectrii
aplicaiei mediul va creea un obiect aparinnd unei clase interioare anonime care
implementeaz interfaa AbstractListModel:
String sir;
sir = (String) listaStg.getModel().getElementAt(poz);
...
initComponents();
model_lista = new DefaultListModel();
lista.setModel(model_lista);
...
49
Tip returnat
Metoda
Aciune
void
void
addElement(Object obj)
void
clear()
Golete lista
sau
removeAllElements()
boolean
contains(Object obj)
Object
firstElement()
Object
int[]
getSelectedIndices()
int
indexOf(Object obj)
void
insertElementAt(Object
isEmpty()
void
removeElement(Object
obj)
void
removeElementAt(int
index)
Exemplu:
S se realizeze o aplicaie care adaug ntr-o list elemente selectate ntr-o
alt list.
Se presupune c prima list, din stnga, conine ingrediente pentru o pritur.
Ingredientele selectate vor fi adugate n lista din dreapta.
50
Pentru realizarea interfeei s-au adugat ferestrei iniiale dou panouri
(JPanel) avnd proprietatea border setat pe TitleBorder:
51
Se va modifica apoi constructorul clasei asfel nct ldr s fie asociat listei din
dreapta, listaDr.
52
Metoda conine preluarea n irul select[] de tip int a indicilor elementelor
selectate n listaStg.
obiectul ldr elementele din lista din stnga ale cror poziii au fost memorate n irul
select[]. Pentru aceasta se apeleaz n ciclu metoda addElement(). Preluarea unui
element din lista din stnga se realizeaz apelnd metoda getElement() pentru
obiectul model obinut prin apelul metodei getModel().
JTable
Controlul de tip JTable este folosit pentru afiarea datelor ntr-o form
tabelar. Un obiect de tip JTable realizeaz doar afiarea datelor, acestea fiind
coninute ntr-un obiect asociat (TableModel, de regul un tablou bidimensional).
JTable
TableModel
naintea crerii unui ibiect din clasa JTable este necesar crearea obiectului
care conine datele. Acesta poate aparine unei clase definite de programator, de
regul derivat din AbstractTableModel (clas abstract) sau poate aparine clasei
DefaultTableModel. n NetBeans a doua variant este cea implicit.
n NetBeans adugarea unui obiect din clasa JTable provoac inserarea n
fapt a dou obiecte, un jScrollPanel (container) i un jTable coninut n primul.
53
Evident pot fi suprascrise i metodele care nu sunt abstracte dac este
necesar specializarea modului lor de operare. n exemplul prezentat n continuare a
fost suprascris metoda getColumnName().
Folosirea acestei metode pentru popularea cu date a unui control JTable
presupune:
1. Declararea unui obiect din clasa Vector:
private Vector<String[]> data = new Vector();
AbstractTableModel :
tabel.setModel(new AbstractTableModel() {
String[] colum = new String[]{"Numar", "Nume", "Localitate"};
public int getRowCount() {
return data.size();
}
public int getColumnCount() {
return colum.length;
}
public Object getValueAt(int rowIndex, int columnIndex) {
return columnIndex == 0 ? "" + (rowIndex + 1) : data.get(rowIndex)[columnIndex];
}
public String getColumnName(int column) {
return colum[column];
}
});
Rezultat:
54
Not: n Java clasa Vector este folosita pentru a creea iruri de lungime
variabil. Lungimea unui Vector poate crete sau scade dup nevoile aplicaiei. n
examplul dat s-au adugat elemente (data.add(...)) s-au extras elemente (data.get())
i s-a folosit lungimea vectorului (data.size()).
n timpul execuiei programului datele pe care acesta le conine pot evolua.
Practic structurii de tip Vector care conine datele i se adauga noi elemente sau i se
suprim elemente. Pentru a determina punerea de acord a reprezentrii grafice cu
modelul se va apela metoda updateUI(). Exemplu :
55
56
Rezultat :
Asocierea obiectului care conine valorile (model) s-a realizat prin apelul
metodei setModel(), care are ca parametru un obiect din clasa DefaultTableModel.
Constructorul folosit are doi parametri.
obiecte din clasa Object iar al doilea este un ir de obiecte din clasa String (iruri de
caractere, denumirile nscrise n capul coloanelor). n celulele unui astfel de tablou
pot fi puse obiecte de diferite naturi deoarece n Java clasa Object este rdcina
ntregii ierarhii de clase.
Observaie : n exemplul precedent obiectul folosit ca model nu are nume.
Pentru modificarea datelor din tabel pentru a obine o referin la acest obiect se va
scrie tabel1.getModel().
57
n tabelul urmtor au fost incluse cteva dintre metodele folosite pentru
editarea obiectului model aparinnd clasei DefaultTableModel i asociat unui
JTable.
Tip
Metoda
returnat
Aciune
void
addRow(Object[] obj)
Object
int
getRowCount()
void
void
removeRow(int linie)
void
void
int col)
(linie, coloan)
setColumnIdentifiers(String [])
impune
numele
scris
capul
coloanelor
public Tabeleex2() {
initComponents();
tabel1.getColumn("Fumator").setCellRenderer(new AfisareBool());
tabel1.getColumn("Nr. Crt.").setCellRenderer(new AfisareInt());
tabel1.getColumn("Nr. Crt.").setPreferredWidth(40);
tabel1.getColumn("Numele si prenumele").setPreferredWidth(240);
nr = 1;
}
58
Clasa AfisareInt reprezint valoarea ntreag din coloana Nr. Crt. sub forma
unui control JLabel avnd textul centrat pe orizontal:
determin automat.
Tot n constructor se iniializeaz contorul de linii nr (declarat de tip int).
Metoda asociat butonului etichetat cu Adauga este urmtoarea :
59
Ea iniializeaza variabila sir cu un ir de obiecte folosind valorile din
controalele nume si fumator precum i valoarea contorului nr.
n continuare se preia obiectul model (prin apelul metodei getModel()) al
controlului tabel1 (JTable) i se adaug acestuia irul de obiecte sir.
n final se incrementeaz contorul nr (nr++), i se aduc controalele nume i
fumator la starea iniiala :
nume.setText("");
fumator.setSelected(false);
Meniuri
Meniurile permit definirea unui set extins de aciuni i selectarea uneia dintre
ele. Pentru a defini meniul unei aplicaii trebuie creat o bar de meniuri (obiect
aparinnd clasei JMenuBar), un ansamblu de meniuri derulante (obiecte de tip
JMenu) i pentru fiecare meniu derulant, un ansamblu de opiuni (obiecte aparinnd
clasei JMenuItem).
Exemplu:
60
Sa se realizeze proiectul DemoMeniu avnd interfaa din imagine.
clic
Se va selecta cu mouse-ul JMenubar i se va realiza adugarea sa printr-un
clic cu mouse-ul n fereastra aplicaiei.
selectat
selectat
61
3. Se adaug meniului Imagini opiunile Pasare, Caine, Pisica, Iepure i
Iesire. Efectul selectrii primelor patru intrri va fi schimbarea imaginii afiate n
centrul ferestrei iar ultima opiune va opri aplicaia.
selectat
modificare proprietate text
62
Rezultat:
selectat
5. Celui de-al doilea meniu derulant i se adaug trei opiuni: Albastru, Rosu i
Verde.
6. Se adaug aplicaiei dou controale din clasa JLabel. Acestea vor conine
o imagine respectiv denumirea imaginii afiate.
63
Pentru controlul poza se va impune un coninut iniial folosind proprietatea
icon , aa cum se vede n continuare.
64
Rezultat:
dublu clic
Pentru ultima opiune din primul meniu derulant (Iesire) se va aduga apelul
metodei exit(0):
65
Pentru prima opiune din meniul Imagini, metoda care trebuie executat este
urmtoarea:
Pentru prima opiune din meniul Culori metoda care trebuie executat este
urmtoarea:
Ferestre de dialog
n Java ferestrele de dialog sunt controale Windows din clasa JDialog.
Controalele adugate ulterior n fereastra de dialog se adaug controalelor clasei de
baz.
Desenarea n Java
Interfeele aplicaiilor create pn n prezent au inclus de regul un container
din clasa JFrame n care au fost adugate un ansamblu de controale Windows.
Coninutul acestora a fost impus folosind proprietile lor.
Exist ns cazuri n care coninutul unui control Windows este o reprezentare
grafic a unor date ale aplicaiei.
66
necesar declararea unei noi clase, derivat de regul din clasa JPanel n cadrul
creia s fie suprascris metoda n care se realizeaz reprezentarea grafic a
obiectelor clasei. Fereastra unei astfel de aplicaii ar putea deci conine pe lng
controale JPanel obinuite, adugate pentru a grupa controalele Windows destinate
interaciunii cu aplicaia, un obiect aparinnd noii clase i care va conine
reprezentarea grafic a datelor aplicaiei.
Exemplu:
S se realizeze o aplicaie care permite desenarea n centrul unui panou
(control JPanel) a unui dreptunghi sau a unui oval avnd dimensiunile impuse ntr-o
fereastr de dialog.
1.
Se creaz proiectul nou denumit figuri (File / New Project / General / Java
Application):
67
Butonul Date
68
b.
Cel mai frecvent se folosete prima form, afiarea unei astfel de ferestre fiind
realizat prin apelul metodei statice showMessage(). Exemplu:
Pentru a putea
introduce datele necesare s-au adugat dou etichete (JLabel), dou controale din
clasa JTextField redenumite h i v i un buton etichetat Ok care nchide fereastra.
69
Pentru
Desenarea n Java
Controalele Windows deja utilizate au o geometrie predefinit. Programatorul
poate interveni ntr-o oarecare msur asupra aspectului acestora folosind fereastra
de proprieti (dimensiuni, plasare n cadrul containerului, etichete, fonturi etc) dar nu
le poate desena. Clasele crora le aparin aceste obiecte grafice suprascriu metoda
paint(), n cadrul creia se realizeaz reprezentarea grafic a obiectului. Ori de cte
ori are loc un eveniment care impune redesenarea obiectului (obiectul devine vizibil,
70
containerul n care este dispus se modific, etc.) metoda paint() este apelat n mod
automat.
Aplicaiile care conin reprezentri grafice care trebuie realizate prin program
necesit definirea unei clase noi, derivat de regul din JPanel. n noua clas se va
suprascrie metoda paint(), codul acesteia realiznd reprezentarea dorit. Metoda
paint() va fi apelat automat, ca i n cazul controalelor standard, ori de cte ori este
necesar. Apelul ei direct din program este interzis. Dac este necesar refacerea
reprezentrii grafice ca urmare a modificrii datelor pe baza creia este realizat
reprezentarea, va fi apelat metoda repaint() care va fora redesenarea prin apelul
metodei paint().
n aplicaia
71
public class panouDesen extends JPanel {
public panouDesen() {
}
public void paint(Graphics g) {
int hh = Integer.parseInt(h.getText());
int vv = Integer.parseInt(v.getText());
g.clearRect(0, 0, getWidth(), getHeight());
int x = getWidth() / 2 - hh / 2;
int y = getHeight() / 2 - vv / 2;
if (jRadioButton1.isSelected()) {
g.drawOval(x, y, hh, vv);
} else {
g.drawRect(x, y, hh, vv);
}
}
}
72
73
Dup selectarea variantei Surround with try {... din lista propus, metoda
paint() va ncepe astfel:
Metodele folosite la desenare precum i alte metode ale clasei Graphics mai
frecvent utilizate sunt prezentate n tabelul urmtor.
Tip
Metod
returnat
void
clearRect(int x,
int y,
Explicaie
int width,
Umple
dreptunghiul
indicat
prin
int height)
void
drawImage(Image img,
ImageObserver observer)
int x,
int y,
74
void
void
setColor(Color c)
Impune
culoarea
folosit
pentru
desenare.
void
drawRect(int x,
int y,
int width,
Deseneaz un dreptunghi.
int y,
int width,
int height)
void
drawOval(int x,
int height)
void
void
setFont(Font font)
Plasarea
obiectului
supdes
fereastra
aplicaiei
poziia
75
pune n comentariu apelul metodei repaint() i, dup introducerea unui set de
dimensuini valide se redimensioneaz fereastra aplicaiei.
Applet-uri
Una dintre caracteristicile limbajului Java este faptul c permite realizarea de
miniaplicaii care pot fi transferate prin Internet i executate n fereastra unui browser
pentru Web. O astfel de miniaplicaie poart numele de applet java.
Fiierul
2.
76
Deoarece unui applet i lipsete metoda main(), pentru a-l rula n NetBeans
se va selecta n meniul contextual afiat la selectarea fiierului care conine applet-ul
opiunea Run File.
77
Pentru testarea applet-ului se poate ncrca ntr-un browser fiierul creat de
NetBeans n directorul build. n exemplul considerat acesta poart numele
figuri.html.
78
79
http://dev.mysql.com/downloads/connector/j/5.0.html.
plasarea
fiierului
mysql-connector-java-5.0.6-bin.jar
directorul
Rezultat:
80
apelat pentru comenzile SELECT iar a doua pentru comenzi ca INSERT, UPDATE
sau DELETE.
ResultSet rs = stmt.executeQuery(fraza_SQL);
(ResultSet)
controalele
windows
corespunztoare:
JTextField,
Exemplu fundamental:
S se realizeze o aplicaie care permite introducerea ntr-o baz de date a
raselor de cini.
81
b. Tabelul talie :
82
c. Tabelul scop :
d. Tabelul caine :
83
84
5.
6.
85
comboTara
comboTalia
comboDestinatia
nume
jButton1
jButton2
86
a. iniComboTara() :
87
b. iniComboTalia() :
c. iniComboDest() :
88
b. Butonul Abandon
Executarea aplicaiei
Aplicaiile din exemplele prezentate au fost lansate n execuie exclusiv din
mediul de programare NetBeans. n procesul de construire a proiectului (Build /
Build Main Project) mediul de programare creaz n directorul \dist un fiier
executabil.
dublu clic
89
Acesta poate fi lansat n execuie ca orice aplicaie Windows, din Windows
Explorer, cu un dublu clic.