Documente Academic
Documente Profesional
Documente Cultură
Curs 9 Java
Curs 9 Java
Curs 9
CREAREA DE INTERFETE GRAFICE PENTRU APPLETURI
Realizarea unei astfel de interfete in limbajul Java se bazeaza in principal pe
biblioteca AWT ( Abstract Windowing Toolkit ) , care contine un set de clase pentru
crearea si folosirea unor astfel de interfete grafice pentru utilizator .
AWT
Dupa cum am mai spus AWT reprezinta un set de clase care ne ajuta - printre altele sa cream o interfata grafica utilizator care sa reactioneze la datele de intrare primite de
la mouse sau tastatura .
Deoarece Java este un limbaj independent de platforma AWT ofera modalitatea de a
proiecta o interfata care sa fie la fel reprezentata si cu aceleasi caracteristici pe orice
sistem pe care ar rula . Folosind pachetul AWT avem de luat in calcul mai multe
elemente care compun o interfata grafica :
-
Toate clasele AWT sunt bineinteles incluse in pachetul java.awt . Pentru a le putea
folosi trebuie importat acest pachet explicit la inceputul codului nostru sursa .
Importarea intregului pachet are ca rezultat disponibilizarea pentru programator a
tuturor componentelor , containerelor si administratorilor de dispunere folositi pentru
realizarea unei interfete grafice . O alta modalitate de a putea folosi clasele necesare
este si importarea individuala a claselor necesare .
COMPONENTELE INTERFETEI GRAFICE
Acestea sunt pozitionate in cadrul interfetei pe care o construim prin adaugarea lor
intr-un container . Acesta este chiar el o componenta si deci poate fi la randul sau
adaugat in alt container . Cel mai usor mod de a demonstra cum se proiecteaza o
interfata este folosirea containerului cu care am lucrat in ultimele cursuri - clasa
Applet .
Datorita faptului ca un Applet este un container putem folosi metoda add() in cadrul
unui applet pentru a adauga o componenta direct in fereastra Applet .
Fiecare componenta AWT la randul ei este o clasa , deci componenta este creata
propriu-zis prin crearea unui obiect al clasei respective .
De exemplu , clasa Button reprezinta butoanele din cadrul unei interfete grafice . Un
buton se creaza specificand eticheta sa in metoda constructorului , ca mai jos :
Button butonNou=new Button("Apasa aici");
Parametru de tip string primit de constructor se refera la textul care se va afisa pe
suprafata butonului .
Dupa ce s-a creat componenta cea mai simpla metoda de a o adauga este folosirea
metodei add() cu numele componentei ca argument :
add(butonNou);
Adaugarea componentei nu duce automat si la desenarea ei pe ecran . Ea va fi afisata
doar dupa apelul metodei paint() a containerului ; putem folosi si metoda repaint()
pentru a forta afisarea unor noi componente eventual adaugate .
La momentul adaugarii unei componente intr-un container se observa ca nu i se
acorda acesteia nici o pozitionare - prin coordonate x si y ; acesta pozitionare se face
doar prin administratorii de dispunere . In cazul in care nu specificam un
administrator de dispunere se foloseste automat un administrator Java numit
FlowLayout - acesta ordoneaza componentele de la stanga la dreapta , iar cand nu mai
este loc pe linie se trece la urmatoarea linie , mai jos .
Pentru crearea componentelor in applet vom folosi metoda init() . In continuare aveti
un exemplu de creare a unui buton in cadrul unui applet ; acest buton are un text afisat
pe el si va fi afisat propriu-zis doar dupa apelarea metodei paint() :
import java.awt.*;
public class Buton extends java.applet.Applet {
String mesaj="Numele butonului . Nu apasati";
Button butonNou=new Button(mesaj);
public void init() {
add(butonNou);
}
}
ETICHETE
O eticheta este de fapt cea mai simplista componenta a unei intergete grafice , ea fiind
implementata prin clasa Label . Etichetele se folosesc pentru a identifica rolul
celorlalte componente si nu pot fi modificate direct de utilizator - de fapt reprezinta
niste siruri afisate in dreptul celorlalte componente pentru a ne arata cu ce se ocupa
componenta respectiva .
Folosirea etichetelor pentru text se foloseste in locul metodei drawString() din mai
multe cauze :
-
Pentru a modifica textul etichetei dupa crearea acesteia putem folosi metoda
setText(sir) ; noul sir dat ca parametru este afisat dupa reimprospatarea componentei .
O alta metoda folositoare este si getText() care ne returneaza valoarea textului
etichetei .
In continuare avem un exemplu de applet in care s-au creat trei etichete ; in codul
sursa apare si un obiect de tip GridLayout - acesta este folosit pentru a putea vedea
efectul alinierii etichetelor . In cazul in care nu l-am fi folosit Java ar fi apelat implicit
administratorul FlowLayout care nu ne-ar mai fi permis sa aliniem etichetele .
Administratorii de dispunere vor fi prezentati mai tarziu detaliat .
import java.awt.*;
public class Etichete extends java.applet.Applet {
Label stanga=new Label("Aliniat la stanga");
Label dreapta=new Label("Aliniat la dreapta",Label.RIGHT);
Label centrat=new Label("Aliniat pe centru",Label.CENTER);
Font f=new Font("Helvetica",Font.BOLD,18);
GridLayout dispunere=new GridLayout(3,1);
public void init() {
setFont(f);
setLayout(dispunere);
add(stanga);
setForeground(Color.green);
add(centrat);
setForeground(Color.blue);
add(dreapta);
}
}
BUTOANE
Un buton reprezinta de fapt o zona pe care putem efectua un clic ; el poate fi creat cu
ajutorul clasei Button . In general aceste butoane sunt folosite pentru a declansa o
actiune atunci cand se efectueaza un clic pe suprafata lor .
Ca sa cream un buton trebuie sa urmam una dintre caile urmatoare : fie apelam
constructorul Button() care ne creaza un buton fara nici un text fie apelam
constructorul cu un argument de tip String care este de fapt chiar textul butonului .
Odata creat acest buton ii mai putem modifica textul cu ajutorul metodei setLabel()
sau putem folosi metoda getLabel() pentru a afla textul acestui buton .
OBS. : setLabel() si getLabel() nu au legatura cu clasa Label , ele se refera doar la
clasa Button .
In continuare avem un exemplu de applet care va prezenta cinci butoane pentru
functiile unui casetofon ( de exemplu ) :
import java.awt.*;
public class Casetofon extends java.applet.Applet {
Button inapoi=new Button("Inapoi");
Button inainte=new Button("Inainte");
Button play=new Button("Play");
Button stop=new Button("Stop");
Button pauza=new Button("Pauza");
public void init() {
add(inapoi);
add(inainte);
add(pauza);
add(stop);
add(play);
}
}
CASETE DE VALIDARE
Aceste componente , numite in engleza checkbox , sunt in practica niste casete patrate
care pot fi bifate sau nu cu ajutorul unui clic de mouse . Scopul lor este in general de a
selecta sau deselecta anumite facilitati ale unui program .
In majoritatea cazurilor in care se folosesc casete de validare acestea sunt
neexclusive , adica oricare dintre casete poate avea valoare bifat sau nu , putand deci
fi bifate la un moment dat chiar si toate casetele sau nici una . O alta modalitate de
folosire a acestor casete este si gruparea lor care duce la realizarea asa numitelor
butoane radio ; proprietatea acestora de baza este faptul ca la un moment dat poate fi
activ ( bifat ) doar un singur caz , o singura caseta .
Ambele tipuri de casete de validare sunt implementate cu ajutorul clasei Checkbox .
Pentru a crea o caseta de validare neexclusiva putem folosi unul dintre urmatorii
constructori :
-
Acest obiect va pastra starea tuturor casetelor din grupul respectiv si va fi folosit ca
argument suplimentar pentru constructorul Checkbox . Pentru a crea o caseta de
validare care apartine unui grup vom folosi o instructiune de genul :
Checkbox(sir,grupCaseteValidare,boolean)
Aceasta instructiune va crea o caseta cu eticheta conform a cu sirul si cu starea de
bifare sau nebifare setata de argumentul de tip boolean .
In continuare avem un exemplu care creaza un grup cu trei casete de validare :
import java.awt.*;
public class Bifare extends java.applet.Applet {
CheckboxGroup grup=new CheckboxGroup();
Checkbox caseta1=new Checkbox("Volvo",grup,false);
Checkbox caseta2=new Checkbox("BMW",grup,false);
Checkbox caseta3=new Checkbox("Mercedes",grup,true);
Checkbox caseta4=new Checkbox("Audi",grup,false);
Checkbox caseta5=new Checkbox("Dacia",grup,false);
public void init() {
add(caseta1);
add(caseta2);
add(caseta3);
add(caseta4);
add(caseta5);
}
}
In cazul in care vrem sa modificam starea de validare a unui buton radio dintr-un grup
putem folosi metoda setCurrent(validare) . Putem folosi si metoda getCurrent() pentru
a intoarce valoarea curenta de bifare a unei casete de validare .
LISTE DE OPTIUNI
Acestea sunt create cu ajutorul clasei Choice si permit alegerea unei singure optiuni
dintr-o lista derulanta pe verticala .
Pentru a crea o astfel de lista trebuie mai intai sa cream un obiect Choice care va
pastra lista propriu-zisa :
Choice lista=new Choice();
Elementele listei se adauga la aceasta prin metoda addItem(sir) a obiectului de tip
Choice . Metoda addItem() poate fi folosita si dupa ce lista noastra a fost deja
adaugata la un container .
In codul sursa de mai jos s-a realizat un applet care permite selectarea unei echipe de
fotbal dintr-o lista de patru echipe :
import java.awt.*;
ZONE DE TEXT
Aceste componente - numite text area in engleza - sunt de fapt niste campuri de text
care contin mai multe linii ( spre deosebire de campurile de text clasice care apar doar
pe un rand ) . O zona de text poseda si bare de scroll pentru eventualul text care nu
incape in partea vizibila a zonei de text .
Pentru a crea o astfel de zona de text trebuie sa folosim unul dintre cei patru
constructori de mai jos :
-
LISTE DERULANTE
Aceste componente - scrolling lists - sunt create cu ajutorulclasei List si sunt
asemanatoare cu listele de optiuni avand de fapt doar doua diferente majore :
1. o lista derulanta poate fi configurata astfel incat sa poata fi selectate mai multe
optiuni
2. aceste liste se prezinta ca o zona de text in care sunt afisate mai multe optiuni
iar daca lista contine mai multe optiuni decat pot fi afisate atunci apare bara de
scroll .
Lista derulanta este definita prin crearea unui obiect List la care apoi se adauga
elementele propriu-zise ale listei . Pentru a realiza acest lucru putem folosi unul dintre
constructorii de mai jos :
-
lista.add("Gazeta Sporturilor");
lista.add("Monitorul oficial");
add(lista);
}
}
Ca si in cazul celorlalte componente si listele derulante au cateva metode des utilizate
in conjunctie cu ele :
-
BARE DE SCROLL
Componentele numite bare de derulare - scrollbars - sunt cele care permit selectarea
unei valori prin deplasarea unei casete intre doua sageti . Dupa cum am vazut in cazul
componentelor anterioare mai multe dintre acestea au incorporate astfel de bare de
derulare ( de exemplu zonele de text sau listele derulante ) . Clasa Scrollbar este cea
responsabila pentru alte tipuri noi de bare de scroll . O astfel de bara de scroll poate fi
orizontala sau verticala .
Barele de derulare sunt folosite in general pentru a specifica valorile minime si
maxime care pot fi stabilite prin utilizarea componentei .
Pentru a crea o bara de scroll trebuie sa folosim unul dintre constructorii urmatori :
-
In exemplul de mai jos se creaza o bara de scroll orizontala . Pentru a afisa bara de
scroll pe toata latimea ecranului trebuie sa folosim un administrator de dispunere - si
se va folosi GridLayout pentru a imparti ecranul in 15 linii iar bara noastra de scroll
va acoperi prima linie astfel creata a ecranului ; caseta care gliseaza pe bara noastra de
scroll va fi initial la o cincime din lungimea barei si va avea ca latime tot o cincime
din lungimea barei , lucru setat din constructorul folosit pentru crearea barei noastre :
import java.awt.*;
public class BaraScroll extends java.applet.Applet {
GridLayout admin=new GridLayout(15,1);
Scrollbar bara=new Scrollbar(Scrollbar.HORIZONTAL,20,20,1,100);
public void init() {
setLayout(admin);
add(bara);
}
}
Si clasa Scrollbar ofera cateva metode practice cum ar fi :
-
SUPRAFETE DE DESENARE
Aceste componente sunt in general folosite ca loc pentru afisarea de imagini sau
animatii . Bineinteles ca putem desena si pe alte componente - ca de exemplu in
fereastra Applet - insa obiectele Canvas ( aceasta fiind clasa responsabila de
implementarea suprafetelor de desenare ) sunt cele mai simplu de folosit in acest
scop .
Pentru a folosi o suprafata de desenare trebuie mai intai sa cream o subclasa a clasei
Canvas ; aceasta subclasa se poate ocupa de toate operatiunile de desenare care
trebuie sa aiba loc in metoda sa paint() .
Dupa ce s-a creat o subclasa Canvas aceasta poate fi folosita in aplicatia noastra prin
apelarea constructorului sau si prin adaugarea noului obiect Canvas intr-un container .
Pentru a exemplifica teoria de mai sus sa studiem putin applet urmator ; acesta
deseneaza o cruce in centrul ferestrei Applet si poate muta centru acesteia daca
fereastra care publica appletul este redimensionata :
import java.awt.*;
public class Cruce extends java.applet.Applet {
GridLayout admin=new GridLayout(1,1);
canvasNou suprafata=new canvasNou();