Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Swing - Clasa JOptionPane. Applet-uri

java


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
// Aplicatie ce afiseaza suma a doi intregi

// pachete Java 
import javax.swing.JOptionPane;  // se importa clasa JOptionPane

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:

  • butoanele si etichetele pot afisa imagini, text sau în combinatie; 
  • chenare, cursoare, bare de unelte, tabele, tree, tooltips, combobox editabil, bara de progres; 
  • se poate schimba aspectul componentei prin redefinirea unor metode ale subclasei derivate din clasa de baza; 
  • butoane rotunde; 
  • formatare stil HTML a textului din eticheta. 

Recomandari pentru uzul componentelor Swing: 

  • se evita folosirea componentelor Swing cu cele AWT, cele AWT se suprapun peste cele Swing la desenare; 
  • componentele Swing nu prezinta siguranta în lucrul multifir, fiind usor modificabile din afara task-ului propriu; 
  • componentele Swing trebuie continute pe cel mai înalt nivel de catre un container Swing; 
  • componentele nu se adauga direct într-o fereastra, ci prin intermediul unui container panel.

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:

  • showMessageDialog - afiseaza o fereastra cu informatii si cu un buton OK pentru inchiderea ei
    • static void showMessageDialog(Component parentComponent, Object message); fereastra in care se afiseaza mesajul are titlul Message
    • static void showMessageDialog(Component parentComponent, Object message, String title, int messageType); 
      • are patru argumente:
        • primul este null
        • al doilea este sirul care se afiseaza 
        • al treilea este sirul care se tipareste in bara de titlu a ferestrei
        • al patrulea reprezinta tipul mesajului, determinand icon-ul afisat in fereastra:
          • JOptionPane.ERROR_MESSAGE - icon-ul de eroare e o bara orizontala
          • JOptionPane.INFORMATION_MESSAGE - icon-ul este un i
          • JOptionPane.WARNING_MESSAGE - icon-ul este un !
          • JOptionPane.QUESTION_MESSAGE - icon-ul este un ?
          • JOptionPane.PLAIN_MESSAGE - fara icon
  • showInputDialog - afiseaza o fereastra de dialog, care afiseaza un mesaj primit ca argument si returneaza sirul citit
    • static String showInputDialog(Object message);

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:

  • text obisnuit (cuvinte): este partea din fisier care se afiseaza de catre browser;
  • constructii speciale, numite tag-uri, care servesc la:
    • controlul modului de afisare a textului, privind aspecte de genul: formatul literelor (ingrosat, inclinat, normal, subliniat, colorat etc), alinierea, indentarea, prezentarea datelor sub forma de tabele sau liste etc;
    • includerea de imagini in pagina
    • realizarea de legaturi spre alte pagini
    • inserarea de secvente numite scripturi, scrise in diverse limbaje recunoscute de serverele web (de exemplu JavaScript, Perl); acestea, la fel ca si applet-urile permit realizarea de diverse operatii prin intermediul paginilor web, care altfel ar fi statice, marginindu-se doar sa afiseze informatii.
  • mnemonice necesare pentru a reda ca text obisnuit caractere care altfel ar fi considerate drept caractere speciale ale tag-urilor

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:

  • caracterul <
  • un cuvant cheie, precedat uneori de caracterul /
  • eventual alti parametri suplimentari
  • caracterul >

Mnemonicele sunt secvente cu urmatoarea structura:

  • caracterul &
  • un cuvant cheie
  • caracterul ;

Exemplu:
 

<b>Ana are mere</b> 
si Ene are pere
<br><font color="red">Cuvant rosu</font>
<br>multe &nbsp;&nbsp;&nbsp;spatii <br>&lt;&lt;&lt;

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: 

  • &lt; pentru a desemna caracterul <, care daca ar fi fost scris ca atare, ar fi fost interpretat ca inceputul unui tag
  • &nbsp; pentru a desemna caracterul spatiu; daca nu am fi folosit aceasta mnemonica, ci am fi lasat pur si simplu mai multe spatii intre cele 2 cuvinte, la afisare ar fi aparut un singur spatiu intre ele

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

<title>Titlul paginii</title>

</head>
<body>

Continutul propriu-zis al paginii

</body>
</html>

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;
import javax.swing.JApplet;

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:

  • se editeaza programul intr-un fisier sursa pe care il denumim PrimulApplet.java ( avem grija sa respectam ortografia );
  • se compileaza programul, rezultand fisierul PrimulApplet.class:

javac PrimulApplet.java
 

  • se creaza un fisier HTML de forma: 

<html>
<head>

<title>Primul applet</title>

</head>
<body>

<applet code="PrimulApplet.class" width="300" height="200"></applet>

</body>
</html>

  • se incarca in browser fisierul HTML creat in pasul anterior; se precizeaza ca numele acestui fisier poate fi oarecare (dar, recomandabil a avea extensia .html). Atentie: daca numele fisierului .class este referit in tag-ul <applet> asa cum se vede in secventa de mai sus, atunci fisierul .html si PrimulApplet.class trebuie sa se afle in acelasi director. In caz contrar, numele applet-ului trebuie sa apara precedat de calea corespunzatoare. Browser-ul poate fi appletviewer:

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 ce afiseaza suma a doi reali

//<applet code="AdunareApplet.class" width="300" height="50"></applet>

// pachete Java 
import javax.swing.*;  // se importa clasa JOptionPane si JApplet
import java.awt.Graphics;

public class AdunareApplet extends JApplet // end init

   // metoda paint
   public void paint(Graphics g)  // end 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:

  • public void init() - este apelata o singura data, la incarcarea unui applet; de obicei initializeaza variabilele clasei - suma aici
  • public void start() - apelata dupa init si de cate ori browser-ul revine la applet, dupa afisarea unei alte pagini; mai sus, nu a fost redefinita
  • public void paint( Graphics g ) - se apeleaza dupa init si start si de cate ori applet-ul trebuie redesenat - dupa ce se acopera cu fereastra unei aplicatii, de exemplu; paint realizeaza operatiile de desenare, utilizand un obiect g al clasei Graphics, pe care il primeste automat; se recomanda ca paint sa nu lucreze cu ferestre de dialog
  • public void stop() - pentru suspendarea executiei applet-ului ( cand se paraseste fereastra browserului )
  • public void destroy() - cand se inchide browserul, terminandu-se executia applet-ului, care este scos din memorie.

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.*; 
import javax.swing.*; 

//<applet code="Figuri.class" width="400" height="400"></applet>

public class Figuri extends JApplet // end init

private void delay() 

private int random (int val) 


public void paint(Graphics g) // end switch

delay(); 
// super.paint(g);


} // end for

} // 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: 

  • desenarea unui contur de forma dreptunghiulara - metoda drawRect - sau ovala - metoda drawOval. Parametrii acestor metode sunt: coordonatele coltului din stanga sus al dreptunghiului ( in cazul elipsei este vorba de zona dreptunghiulara care circumscrie elipsa ) si dimensiunile pe orizontala/verticala ale figurii.
  • desenarea unui dreptunghi sau elipse colorate in interior cu o anumita culoare: metodele fillRect si fillOval, care au parametrii cu aceeasi semnificatie ca si metodele corespondente de desenare a conturului. Se precizeaza ca apelul metodelor fill... nu este conditionat de un apel prealabil al metodelor draw..., decat daca dorim sa avem conturul colorat diferit fata de interior.

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:

  • folosind obiecte predefinite, declarate ca variabile statice ale clasei Color; in exemplul nostru am utilizat un asemenea obiect, si anume Color.lightGray pentru a obtine culoarea gri deschis (se observa notatia specifica utilizata pentru a referi membrii statici ai unei clase). Consultand documentatia API pentru clasa Color se pot gasi si alte culori predefinite disponibile.
  • stiind ca orice culoare poate fi exprimata ca o combinatie a celor 3 culori rosu, verde si albastru prezente in diverse proportii, putem folosi constructorul clasei Color care accepta ca parametri 3 valori reprezentand nivelele de rosu-verde-albastru dorite. Aceste valori sunt numere intregi din intervalul [0,255]. In exemplul nostru, pentru fiecare figura desenata am generat cate 3 valori aleatoare pentru a obtine o combinatie (variabilele rosu, verde si albastru).

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

  • Tutorial Swing
  • Tutorial HTML
  • Tutorial Applet
  • Java Plug-in Quick-Start Guide
  • Java Plugin and HTML Converter Howto
  • Exemple applet-uri.

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.


Document Info


Accesari: 3025
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )