Swing - Clasa JOptionPane. Applet-uri |
Swing - Clasa JOptionPane |
Aplicatiile pe care le-am scris pana acum primeau informatii doar prin intermediul parametrilor din linia de comanda. Vom invata in acest paragraf cum putem utiliza elemente de interfeta grafica, ferestre prin intermediul carora putem citi si tipari informatii.
Sa examinam si rulam aplicatia de mai
jos care citeste doi intregi si afiseaza suma lor:
//
Adunare.java // pachete
Java public class Adunare // end main } // end class Adunare |
Observam incarcarea clasei JOptionPane din pachetul javax.swing. Swing contine clase care permit definirea de interfete grafice si a fost inclus in Java 2 - JDK 1.3.1.
AWT ( Abstract Window Toolkit ) serveste tot la construirea interfetelor utilizator grafice, fiind furnizat de platformele JDK 1.0, 1.1. Java 2 suporta AWT, dar recomanda folosirea pachetelor Swing. Componentele AWT se regasesc în pachetul java.awt, iar cele Swing în pachetul javax.swing. Componentele Swing se indentifica prin prefixul J la numele lor. De exemplu, clasa Button din AWT are corespondent în Swing clasa JButton.
Clasele Swing nu au implementat deloc cod nativ dependent de masina pe care sunt instalate. Aceasta reprezinta si diferenta majora dintre Swing si AWT. Componentele AWT preiau aspectul platformei native pe care sunt rulate. Se considera ca Swing este una dintre cele mai "curate" implementari a unui sistem GUI, avand o relatie bine definita intre containere, componente si elemente UI. Arhitectura Swing este bazata pe Model-View-Controller (MVC) design pattern, care separa datele de prezentarea si manipularea lor.
Componentele Swing aduc capabilitati deosebite comparativ cu similarele din AWT, precum:
Recomandari pentru uzul componentelor Swing:
Toate aceste aspecte legate de Swing le vom discuta si clarifica la modulele legate de GUI.
Acum ne ocupam doar de clasa JOptionPane si cele doua metode statice:
Sa retinem ca metoda main a unei aplicatii care utilizeaza GUI trebuie sa apeleze la terminare metoda statica exit a clasei System:
System.exit(
Metoda statica parseInt a clasei Integer converteste argumentul String la un intreg.
Ce este un applet |
Interesul manifestat de comunitatea calculatoristilor vis-a-vis de limbajul Java se datoreaza in mare masura posibilitatii de a rula programele Java "pe Internet". Ce inseamna aceasta? Aceasta inseamna ca un program Java poate fi incorporat intr-o pagina web, urmand a fi executat ori de cate ori pagina respectiva este vizitata (incarcata) cu ajutorul unui program de navigare (browser web), cum ar fi Netscape Communicator sau Internet Explorer. Kit-ul Java ofera de asemenea utilitarul appletviewer sub care pot fi rulate applet-uri.
In general, programele Java incorporate in pagini web reprezinta aplicatii interactive, care comunica cu utilizatorul prin intermediul unei interfete grafice. Un asemenea program se numeste applet.
Un applet este un program Java compilat, deci un fisier .class, al carui nume este referit intr-o pagina web. Cand pagina respectiva este incarcata intr-un browser web, programul este si el incarcat si lansat in executie. Este important de subliniat faptul ca un applet, spre deosebire de un program Java obisnuit, nu poate fi lansat in executie de sine statator, ci doar prin intermediul browser-elor web compatibile Java. Acest lucru se explica prin aceea ca pentru un applet browser-ul ofera contextul grafic.
Observatie1: Pentru a putea rula applet-uri,
browserele NN si IE trebuie sa aiba instalat Java Plug-in si de asemenea
fisierele HTML trebuie modificate cu ajutorului utilitarului Converter - a se
vedea resursele propuse la sectiunea Alte informatii. Testarea si rularea
applet-urilor o vom face utilizand appletviewer.
Observatie2: Daca se fac modificari in textul
sursa al unui applet, evident acesta trebuie recompilat. Fisierul .html care
refera appletul, insa nu se modifica si de aceea, e posibil ca modificarea din
applet sa nu apara cand actionam butonul Reload al
browser-ului. Pentru ca browser-ul sa
"simta" ca s-a produs o modificare a unui fisier referit de pagina
curenta, trebuie ca butonul Reload sa fie actionat simultan cu apasarea tastei
Shift.
Elemente de HTML |
Inainte de a trece la prezentarea propriu-zisa a applet-urilor, vom invata cateva notiuni legate de paginile web, notiuni strict necesare pentru a intelege modul de referire a applet-urilor.
Paginile web reprezinta unitatea de baza a organizarii informatiilor pe Internet. O pagina web este un fisier de text care contine 2 tipuri de informatii:
Ansamblul de reguli care guverneaza construirea si utilizarea tag-urilor se numeste HTML (HyperText Markup Language).
De aceea se mai spune ca o
pagina web este de fapt un fisier HTML.
Tag-urile sunt secvente de
caractere avand urmatoarea structura:
Mnemonicele sunt secvente cu urmatoarea structura:
Exemplu:
<b>Ana are mere</b> |
Daca am include secventa de mai sus (asa cum o vedem afisata) intr-o pagina HTML, browser-ul ar afisa-o astfel:
Ana are mere si Ene are
pere
Cuvant rosu
multe spatii
<<<
Astfel, tag-ul <br> face ca secventa care ii urmeaza sa fie afisata incepand cu randul urmator. Fara acest tag,
textul este afisat in continuarea liniei curente,
chiar daca in fisierul HTML el apare pe alt rand, cum e cazul secventei
"si Ene are pere". Tag-urile <b>
si </b> incadreaza un text care se afiseaza cu litere ingrosate. Se observa ca
aceste tag-uri nu contin informatii suplimentare pe langa cuvantul cheie care
le identifica. In schimb tag-ul <font>
care aici indica un text ce apare colorat in rosu,
contine un parametru color pentru a
preciza culoarea dorita.
Mnemonicele care apar in
exemplu sunt:
Nu vom insista prea mult asupra elementelor de HTML, deoarece nu fac obiectul prezentului curs. De altfel, pentru a edita un fisier HTML simplu nu este necesara cunoasterea prea aprofundata a tag-urilor, deoarece exista editoare HTML specializate (de exemplu Netscape Composer) care "traduc" formatarile aplicate de catre utilizator asupra textului prin intermediul optiunilor de meniu sau butoanelor, in tag-urile necesare.
Pentru ca un fisier HTML sa fie recunoscut ca atare de un browser web,
el trebuie sa aiba urmatoarea structura de baza:
<html> <title>Titlul paginii</title> </head> Continutul propriu-zis al paginii </body> |
Se precizeaza ca in cazul tag-urilor, cuvintele cheie care le definesc, respectiv numele eventualilor parametri pot fi scrise atat cu litere mari cat si cu litere mici.
Pentru a include un applet intr-o pagina web va trebui ca in corpul paginii sa plasam urmatoarea structura de tag-uri:
<applet code="nume_fisier.class" width="dim_w" height="dim_h"></applet>
unde dim_w si dim_h sunt numere intregi reprezentand latimea, respectiv inaltimea (in numar de pixeli) ale unui dreptunghi din interiorul ferestrei browser-ului, considerat ca fereastra pentru applet. In interiorul acestui dreptunghi se vor incadra toate afisarile executate de applet.
Structura unui applet |
Un applet utilizeaza clase din
pachetul javax.swing.JApplet,
care realizeaza controlul executiei, precum si al comunicarii cu contextul
grafic. In plus, sunt necesare clasele care apar in orice
aplicatie dotata cu interfata grafica - java.awt.Graphics.
Orice applet trebuie sa contina o clasa "radacina" care extinde clasa JApplet.
Mai trebuie facuta urmatoarea observatie: clasa radacina a appletului trebuie sa fie publica, adica definitia ei sa fie precedata de cuvantul cheie public. Mediul de programare Java impune ca intr-un fisier sursa sa existe cel mult o clasa publica si in acest caz numele fisierului trebuie sa coincida cu cel al clasei publice. Prin urmare, cand scriem un applet, fisierul sursa care il contine va trebui sa aiba numele identic cu numele clasei publice care extinde clasa JApplet.
In cele ce
urmeaza vom prezenta un applet foarte simplu, care doar afiseaza un text:
// primul Applet import
java.awt.Graphics; public class PrimulApplet extends JApplet |
Dupa cum se poate observa, secventa prezentata mai sus poate fi considerata ca o versiune "applet" a celui mai simplu program Java, intalnit in Modulul 2. Pentru a putea "pune la treaba" acest applet, trebuie sa parcurgem urmatorii pasi:
javac PrimulApplet.java
<html> <title>Primul applet</title> </head> <applet code="PrimulApplet.class" width="300" height="200"></applet> </body> |
appletviewer PrimulApplet.html
Acum ne vom referi putin la continutul clasei PrimulApplet din exemplul nostru. Se observa in primul rand absenta metodei main, care apare doar la aplicatii.
Avem in schimb o metoda paint, care primeste ca parametru un obiect al clasei Graphics. Acest obiect este creat automat si el reprezinta contextul grafic oferit de browser pentru applet-ul nostru. Metoda paint este de asemenea apelata automat. De fapt aceasta metoda este mostenita de clasa JApplet de la clasa Component. Noi insa trebuie sa o redefinim, daca dorim sa "desenam" ceva specific aplicatiei noastre in fereastra applet-ului. In cazul exemplului prezentat, am desenat un text, folosind metoda drawString a clasei Graphics. Parametrii acestei metode sunt: sirul de caractere care trebuie afisat si coordonatele pixelului incepand de la care se va face afisarea. Coordonatele se exprima relativ la fereastra alocata applet-ului - coltul stanga-sus se considera de coordonate 0 .
Observatie: Appletviewer se mai numeste si
browser minimal, intrucat singurul tag pe care il
interpreteaza este applet, restul fisierului ignorandu-l. Putem atunci sa includem tag-ul applet ca si comentariu in fisierul
PrimulApplet.java:
//<applet
code="PrimulApplet.class" width="300"
height="200"></applet>
si sa incarcam appletul pentru
executie:
appletviewer
PrimulApplet.java
Metodele clasei JApplet |
Mai jos
este varianta ca applet a aplicatiei din primul paragraf, de data aceasta
calculandu-se suma a doi reali. Se va observa la
executie ca un real poate fi introdus si ca intreg; sa se faca de asemenea
observatii asupra preciziei rezultatului.
//
AdunareApplet.java //<applet code="AdunareApplet.class" width="300" height="50"></applet> // pachete
Java public class AdunareApplet extends JApplet // end init // metoda paint } // end class AdunareApplet |
Se observa ca appletul contine doua metode, init si paint, care de fapt le redefinesc pe cele ale clasei JApplet. La executia unui applet sunt apelate automat metodele in ordinea de mai jos:
Cum paint
se apeleaza automat, daca se doreste a se redesena appletul, se apeleaza repaint, care automat apeleaza update, iar aceasta paint:
repaint(
Pentru exemplul de mai sus, in metoda paint s-a desenat un dreptunghi, prin apelul metodei drawRect a clasei Graphics; metoda are ca parametri coordonatele x si y ale coltului stanga-sus, latimea si inaltimea dreptunghiului. De asemenea o linie se deseneaza cu drawLine, ce are ca parametri coordonatele extremitatilor dreptei.
Metode ale clasei Graphics |
Le vom studia cu ajutorul
unei aplicatii in care desenam cateva forme geometrice colorate:
import java.awt.*; //<applet code="Figuri.class" width="400" height="400"></applet> public class Figuri extends JApplet // end init private void delay() private int random (int val)
delay();
} // end paint } // end class Figuri |
In programul de mai sus apar cu portocaliu apelurile de metode specifice clasei Graphics.
Dupa numele metodelor, care sunt destul de sugestive, putem constata ca aceasta clasa ne permite:
Atat la desenarea conturului cat si la colorarea interiorului, culoarea utilizata este cea aflata curent "in vigoare". Stabilirea culorii curente se face cu metoda setColor care primeste ca parametru un obiect al clasei Color. In principiu, avem 2 posibilitati de a obtine un obiect al acestei clase:
Executati applet-ul cu ajutorul appletviewer. Observati ce
se intampla daca selectati optiunea Restart a acestuia si daca acoperiti
fereastra applet-ului cu fereastra altei aplicatii si apoi reveniti.
Reluati cele de mai sus dupa
ce decomentati linia:
// super.paint(g);
Alte informatii |
Tema |
1. Rulati applet-uri demo din kit-ul JDK - sunt situate in directorul jdk/demo/applets.
2. Consultati documentatia API pentru clasele JOptionPane, JApplet, Graphics si cat mai multe dintre resursele propuse la Alte informatii. Observatii, comentarii sunt binevenite in Conferinta Software Consulting.
3. Transformati aplicatia de la modulul anterior in applet. Cititi in ferestre de dialog numele, varsta si adresa voastra si afisati informatia pe suprafata applet-ului, incadrata intr-un dreptunghi.
4. Scrieti un applet care citeste trei reali folosind ferestre de dialog si afiseaza suma si produsul lor pe suprafata applet-ului, incadrate intr-un dreptunghi.
5. Un applet deseneaza un numar citit de cercuri concentrice, raza celui exterior avand o valoare de asemenea citita. Cercurile vor avea culori diferite. Daca numarul de cercuri este par, se va desena doar conturul cercurilor, altfel toata aria va fi colorata.
6. Sa se calculeze si
afiseze suma si produsul primilor n intregi, valoarea lui n citindu-se.
Programul se va scrie ca aplicatie si applet. Valorile sumei si
factorialului vor fi returnate de doua metode care primesc ca parametru
valoarea lui n.
Se vor folosi ferestre de
dialog.
Incercati sa modificati fisierele .html cu ajutorul Converter-ului si descarcati Java 2 Plug-in. Rulati apoi applet-urile in browserele cu care lucrati de obicei.
|