Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Java


Index » educatie » » informatica » Java
» Programarea in Java - Exemple


Programarea in Java - Exemple


Programarea in Java

Evenimente

Un eveniment este o actiune impusa de catre utilizator.

Exemple:

utilizatorul apasa o tasta sau face click pe mouse



utilizatorul apasa un buton, o bara Scroll (de derulare), o optiune dintr-un meniu

Asadar in loc sa ne imaginam un program ca un sir de intructiuni, putem sa ne imaginam sectiunile programului ca fiind activate de un eveniment (se mai spune ca programul este 'condus de evenimente')

Un program 'condus de evenimente' (event-driven) trebuie sa rezolve problema evenimentelor ('event-handling').

Detectarea evenimentelor si rezolvarea task-ului cerut se numeste rezolvarea evenimentului. Programele care utilizeaza aceste stil de interfata cu utilizatorul se numesc 'conduse de evenimente'.

Bucla evenimentelor

Nu trebuie sa codificam bucla evenimentelor si nu trebuie sa facem recunoasterea evenimentelor la nivel jos. In Java, cream o sectiune de programe (metode) pe care sistemul Java le apeleaza automat cand un eveniment are loc, in plus dandu-ne detalii despre eveniment. Apoi putem utiliza aceste detalii (apasare buton stanga mouse) pentru a ne asigura ca procesul cerut are loc.

In Java, evenimentele sunt clasificate. De exemplu, barele de derulare (scrollbars) sunt de obicei folosite pentru modificarea valorii sau vizualizarea unei alte parti a ecranului. Butoanele, in schimb, prin apasarea lor, sunt folosite pentru initierea asu terminarea unui task, o actiune definita. In Java, aceste clase sunt numite actionListener si

adjustmentListener


In Java, trebuie sa codificam o metoda pentru fiecare clasa de evenimente care ne intereseaza (o metoda pentru evenimente scrollbar, o metoda pentru evenimente button-click, etc). In plus, trebuie sa inregistram ca un ascultator (listener) care componenta (e.g. scrollbar) produce evenimentul, in asa fel incat metoda noastra sa fie automat apelata cand evenimentul are loc.

Exemplu:

Vom scrie un program Java (condus de eveniment) care citeste un numar dintr-o bara de defilare si afiseaza valoarea sa intrega pe ecran.

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

public class Curs2_1 extends Applet

implements AdjustmentListener

public void paint(Graphics g)

public void adjustmentValueChanged(AdjustmentEvent e)

}

implements AdjustmentListener - implementeaza un ascultator pentru evenimente specifice barelor de defilare.

Inregistram programul nostru ca un ascultator folosind metoda addAdjustmentListener, care cauzeaza apelarea metodei adjustmentValueChanged cand bara de defilare este folosita.

Metoda adjustmentValueChanged copie noua valoare din bara de defilare in variabila SliderValue, apoi redeseneaza ecranul.

In mod formal programul precedent se poate rescrie:

declara o variabila sliderValue care are valoarea 0 initial.

initial: metoda init()

- seteaza bara de defilare a.i. sa poata lucra cu numere de la 0 la 99

- inregistreaza bara de defilare cu un ascultator

afisare: paint()

- afiseaza valoarea curenta a lui sliderValue ca un numar

repetitia: adjustmentValueChanged (AdjustmentEvent e)

- obtine valoarea curenta din bara de defilare si actualizeaza valoarea lui sliderValue

- apeleaza metoda de afisare, prin apelarea lui repaint()

Acest program permite doar manipularea barei de defilare. De fiecare data cand miscam bara de defilare, metoda adjustmentValueChanged primeste noua valoare si o depoziteaza in variabila sliderValue.

Am ales in acest program:

- numele barei de defilare (slider)

- numele variabilei care tine valoarea barei de defilare (sliderValue)

- domeniul numerelor ce pot fi afisate de bara de defilare ()

Cuvinte predefinite (metode, instructiuni):

import java.awt.event;

implements adjustmentListener;

metoda init;

folosirea lui addAdjustmentListener;

metoda adjustmentValueChanged;

metoda paint;

folosirea lui repaint;

Metoda init() va fi apelata de catre sistem cand se executa applet-ul. Se foloseste pentru crearea ecranului initial. Metoda paint(Graphics g) este folosita pentru afisarea de elemente grafice. Metoda adjustmentValueChanged (AdjustmentEvent e) este folosita pentru procesarea evenimentelor pentru bara de defilare. Cand un astfel de eveniment apare, aceasta metoda este automat apelata.

Mai exista metode de procesare a evenimentelor suplimentare (o sa le prezentam ulterior):

actionPerformed - raspunde la butoane si campuri de text

itemStateChanged - raspunde la verificarea cutiilor ('boxes')

Domenii de vizibilitate

Pana acum, in exemplele noastre am folosit deci variabile care sunt locale unei singure metode, si am folosit parametrii pentru a trimite valori de la o metoda la alta. Cu toate acestea, in programele event-driven (si in programarea orientata obiect in general), se obisnuieste folosirea de variabile care pot fi accesat de orice metoda a clasei. In acest sens, vom declara variabilele in afara metodelor clasei, deci ele vor avea domeniu de vizibilitate in toata clasa. Variabilele pot fi folosite de orice metoda a clasei si sunt cunoscute ca fiind variabile instanta. Le declaram private pentru a preveni folosirea de metode ale altor clase.

Exemplu:

class Demo extends Applet

private void metodaDoi()

}

Abstract Windows Toolkit (setul de ferestre abstracte)

Un alt exemplu in care se foloseste o bar de defilare pentru modificarea valorii unui intreg este Curs2_2. De data aceasta, bara de defilare este verticala si este adaugat un dreptunghi care se umple sau se micsoreaza dupa

cum evolueaza variabila sliderValue.

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

public class Curs2_2 extends Applet

implements AdjustmentListener

public void paint(Graphics g)

public void adjustmentValueChanged(AdjustmentEvent e)

}

Definim o metoda paint, o metoda init si o metoda adjustmentValueChanged.

Aceste functii nu le apelam noi ci:

paint, init - apelate de applet viewer

adjustmentValueChanged - sistemul de procesare a evenimentelor Java

Variabila slider este o variabila private (deci are acces la toate functiile membre ale acestei clase) de tip Scrollbar.

Instructiunea (apelul)

slider.addAdjustmentListener(this);

semnifica faptul ca programul nostru (de fapt obiectul curent, referit in Java de this) necesita (implica) apelarea metodei adjustmentValueChanged cand se lucreaza cu variabila slider.

Initializarea noului obiect slider necesita precizarea a cinci parametri:

slider = new Scrollbar(Scrollbar, VERTICAL, 0, 1, 0, 100);

-orientarea: orizontala sau verticala (se folosesc doar majuscule)

-valoarea initiala a contorului (am ales 0 deoarece domeniule este ). Putem 'clica' (apasa) in aria dintre sageti si slider pentru a produce schimbari. De exemplu daca punem 3 si 'clicam' repede pe una din sageti de 2 ori atunci nu conteaza decat un eveniment.

-valorile minime se maxime pentru pozitiile din capat. Noi am ales 0 si 100. De altfel dreptunghiul care indica miscarea slider-ului este un dreptunghi de lungime 100.

Functia showstatus afiseaza text pe ultima linie de jos a ferestrei. Este similiara cu functia drawString,dar nu avem nevoie de perechea de coordonate ecran.

Programul Java apeleaza init si apoi paint (mai precis appletviewer. Apoi nimic !). Acesta este un program condus -de- evenimente, care asteapta folosirea barei de defilare. Evenimentele sunt procesate de metoda:

public void adjustmentValueChanged( AdjustmentEvent e)

Detaliile despre eveniment sunt disponibile in variabila e, a clasei AdjustementEvent.

In programul nostru exista doar un eveniment (miscare barei de defilare), de aceea vom folosi metoda getValue() pentru a schimba pozitia si a memora aceasta in sliderValue. Apoi invocam repaint(), care de fapt reprezinta apelul lui paint. Aceasta cauzeaza redesenarea ferestrei cu un nou continut.

Adaugarea etochetelor

In continuare, vom vedea cum putem scrie un text langa o bara de defilare (bineinteles fara a preciza coordonatele). Vom folosi functia add pentru a plasa o noua componenta pe ecran. Gestionarul de machete implicit (flowlayout)

pozitioneaza componentele centrat, de la stanga la dreapta. Vom introduce componenta Label care contine text si care se adauga la schema (layout) la fel ca barele de defilare.

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

public class Curs2_3 extends Applet

implements AdjustmentListener

public void paint(Graphics g)

public void adjustmentValueChanged(AdjustmentEvent e)

}

Observatii

O eticheta nu este activa - 'clicarea' nu produce evenimente si nu trebuie sa ne referim la o eticheta mai tarziu. De aceea, domeniul unei etichete poate fi local in init

Scalarea barei de defilare

Vom considera un exemplu de convertire a inch-lor (din domeniul ), la centimetri unde 1 inch = 2.54 cm.

Putem seta bara de defilare la domeniul 0 dar pentru mai multa precizie vom crea bara de defilare in domeniul si vom scala acesti intregi catre reali rezultand pasi de 0.1 inch.

Exemplu:

// exemplu de bara de defilare - convertire din

// inci in centimetri

import java.awt.*;

import java.applet.Applet;

import java.awt.event.*;

public class Curs2_4 extends Applet

implements AdjustmentListener

public void paint(Graphics g)

public void adjustmentValueChanged(AdjustmentEvent e)

}

Recomandari generale (pentru programe cu bara de defilare)

declarati toate variabilele private

asigurativa ca applet-ul are:

import java.awt.event;

si

implements AdjustmentListener

inregistrati cate un ascultator pentru fiecare bara cu:

nume_bara_de_defilare.addAdjustmentListener(this);

creati o metoda adjustmentValueChanged pentru manipularea barelor de defilare

Exercitii propuse spre implementare

1. Scrieti un program java care sa converteasca mile in km (si invers);

2. Produceti un applet care sa permita micsorarea/marirea lungimii catetelor unui triunghi dreptunghic folosind doua bare de defilare. De asemeni afisati si tangenta unui unghi ascutit ( tg(alpha) = cateta1/cateta2 )





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate