JAVA GUI-ZADACI
VIDEO LEKCIJE
Video 1: Forma za registraciju
Dizajniranje forme za registrciju. Kreiranje korisnika(korsničko ime, šifra, Ime, Prezime, slika). Provera unetih podataka.
Ovaj zadatak je nastavak video lekcije broj 2 sa webstrane
Grafički korisnički interfejs(GUI)
Ovaj zadatak je nastavak video lekcije broj 2 sa webstrane
Grafički korisnički interfejs(GUI)
Grafika u javi: Primer kružno kretanje
Tekst zadatka:
Predstaviti grafički kružno kretanje čestice u ravni, koja se obrće oko centra ravnomernim kružnim kretanjem ugaonom brzinom W. Napraviti polja na dijalogu za unos poluprečnika r i ugaone brzine W kao i dugme za iniciranje unosa podataka. Napraviti i polje za prikaz izveštaja kao i jedan panel za sliku.
a)Nacrtati samo grafiku za unos bez funkcionalnosti dugmeta
b)Na osnovu podrazumevanih vrednosti za r i W izračunati: linijsku brzinu V, centripetalno ubrzanje ac i prikazati vrednosti u polju za izveštaj
c)Nacrtati kružno kretanje čestice u početnom položaju, oko centra, za podrazumevane podatke
a)Nacrtati samo grafiku za unos bez funkcionalnosti dugmeta
b)Na osnovu podrazumevanih vrednosti za r i W izračunati: linijsku brzinu V, centripetalno ubrzanje ac i prikazati vrednosti u polju za izveštaj
c)Nacrtati kružno kretanje čestice u početnom položaju, oko centra, za podrazumevane podatke
Više o kružnom kretanju možete pročitati u članku: Kružno kretanje.
Simulaciju kružnog kretanja pročitati u članku: Simulacija kružnog kretanja materijalne tačke.
Simulaciju kružnog kretanja pročitati u članku: Simulacija kružnog kretanja materijalne tačke.
Rešenje zadatka:
Glavni prozor aplikacije sa svim komponentama trebalo bi da izgleda:
Na glavnom prozoru aplikacije treba prvo postaviti panel kontejner(kontejner jer sadrži ostale komponente) koji ispunjava celu površinu prozora, osim naslovne linije. Zatim treba napraviti dva panela, levi koji predstavlja crtež kružnog kretanja čestice i desni na kome se nalaze kontrole za unos podataka. Kod koji inicijalno prikazuje grafiku napisan je u konstruktoru glavne klase i on se poziva unutar main metode koja predstavlja sam početak aplikacije.
U konstruktoru aplikacije kreiramo sve potrebne objekte koje vidimo na prozoru:
Prvo se kreira glavni prozor i za njega podese naslov, veličina i podrazumevano ponašanje prozora kada se klikne na dugme X(close). Zatim je kreiran kontejner panel i podešen za raspored komponenti tipa FlowLayout. Ovaj način raspoređivanja je podrazumevan, ali je ovde objekat te klase ipak kreiran jer se kroz njegov konstruktor dala naznaka da se želi cetralni raspored komponenti, koje će biti unutar panela distancirane 2 pixela horizontalno i vertikalno.“FlowLayout“ raspored podrazumeva ređanje komponenti u jedan red sve dok komponente shodno svojoj veličini mogu da se smeste u taj red, a zatim se prelazi u sledeći. Komponente će pri tome biti centrirane i sa razmakom od 2 pixela.
Zatim se kreiraju levi panel(klase Crtez) i desni, klase JPanel. Za njih se podesi boja pozadine (Background) i željena veličina(PreferredSize). Treba uočiti da levi panel nije klase JPanel već klase Crtez koja obavezno mora naslediti JPanel klasu. To je zbog toga, da bi se po panelu mogla crtati sopstvena grafika tako što se prepravi nasleđena metoda paint na isti način kao i u prethodnom primeru.
Kada se podese atributi panela oni se dodaju na kontejner panel, a on sam se povezuje sa prozorom metodom setContentPane.
Pošto je glavna klasa nasledila JFrame, to znači da je objekat te klase u stvari sam prozor. Za dobijanje objekta klase u kojoj se dati kod nalazi korišćena je službena reč this.
U nastavku konstruktora napravljeni su objekti koji predstavljaju komponente koje su potrebne za unos podataka, podešeni njihovi atributi i dodate su na panel(metoda add):
Kada se podese atributi panela oni se dodaju na kontejner panel, a on sam se povezuje sa prozorom metodom setContentPane.
Pošto je glavna klasa nasledila JFrame, to znači da je objekat te klase u stvari sam prozor. Za dobijanje objekta klase u kojoj se dati kod nalazi korišćena je službena reč this.
U nastavku konstruktora napravljeni su objekti koji predstavljaju komponente koje su potrebne za unos podataka, podešeni njihovi atributi i dodate su na panel(metoda add):
Metoda setVisible(true) prikazuje prozor, tj. podešava vidljivost na true.
U klasi Crtez se prvo definišu sve promenljive i objekti koji predstavljaju elemente koji se crtaju. Prosti podaci su definisani i neki od njih inicijalizovani na neke početne vrednosti u klasi, kao atributi klase. Objekti su takođe deklarisani van metoda, ali se kreiraju(definišu) u konstruktoru. To su centar, putanja(kružna linija)i čestica koja se kreće po putanji(krugu) poluprečnika r(početne vrednosti 0.5 m). S obzirom da su mere crteža u pixelima gde je širina crteža 500 pixela, veličina kruga od 0.5 je veoma mala, pa je za crtanje uvedena razmera (200 pixela po 1m).
Sva tri objekta za crtanje su krugovi tj. elipse čiji je opisani pravougaonik jednake širine i visine(kvadrat):
U klasi Crtez se prvo definišu sve promenljive i objekti koji predstavljaju elemente koji se crtaju. Prosti podaci su definisani i neki od njih inicijalizovani na neke početne vrednosti u klasi, kao atributi klase. Objekti su takođe deklarisani van metoda, ali se kreiraju(definišu) u konstruktoru. To su centar, putanja(kružna linija)i čestica koja se kreće po putanji(krugu) poluprečnika r(početne vrednosti 0.5 m). S obzirom da su mere crteža u pixelima gde je širina crteža 500 pixela, veličina kruga od 0.5 je veoma mala, pa je za crtanje uvedena razmera (200 pixela po 1m).
Sva tri objekta za crtanje su krugovi tj. elipse čiji je opisani pravougaonik jednake širine i visine(kvadrat):
Unutar konstuktora su pored kreiranja ova tri objekta računate i linijska brzina čestice, kao i centripetalno ubrzanje.
Da podsetimo, Klasa Ellipse2D.Double je klasa iz API(java.awt.geom paketa) koja implementira interfejs Shape, tako da se može proslediti metodama draw i fill objekta g2 klase Graphics2D unutar paint metode:
Da podsetimo, Klasa Ellipse2D.Double je klasa iz API(java.awt.geom paketa) koja implementira interfejs Shape, tako da se može proslediti metodama draw i fill objekta g2 klase Graphics2D unutar paint metode:
Boja crtača(tačke koja vrši kružno kretanje) je postavljena na crvenu, a njegova debljina na 3 (metoda setStroke(new BasicStroke(3)); ).
Ovde je nacrtan samo početni položaj kružnog kretanja za podrazumevane vrednosti parametara, dok će u nastavku biti objašnjeno kako se unose parametri klikom na dugme na desnom panelu i na osnovu unetih vrednosti crta nov crtež i kako se pravi simulacija kružnog kretanja uvođenjem događaja tajmera.
Ovde je nacrtan samo početni položaj kružnog kretanja za podrazumevane vrednosti parametara, dok će u nastavku biti objašnjeno kako se unose parametri klikom na dugme na desnom panelu i na osnovu unetih vrednosti crta nov crtež i kako se pravi simulacija kružnog kretanja uvođenjem događaja tajmera.
Događaj klika dugmeta na primeru kružnog kretanja
Da bi uveli događaj klika dugmeta potreban je objekat klase koja implementira interfejs ActionListener jer se u tom interfejsu nalazi metoda koja se poziva kao reakcija na klik dugmeta. Ona je u interfejsu apstraktna i dovršava se u klasi koju smo povezali sa interfejsom službenom reči implements . U primeru sa kružnim kretanjem to je glavna klasa:
Oni objekti koji će biti upotrebljeni u actionPerformed metodi moraju biti atributi(polja) za klasu a ne lokalni podaci za main metodu jer inače ne bi mogli da se koriste u obe metode. Zbog toga je njihova deklaracija prebačena van metode, a unutar klase. To su atributi: unosBtn, rTf, WTF, crtez i izvestajTA(vidi sliku iznad).
U ovoj klasi se implementira metoda actionPerformed koja se poziva kao reakcija na klik dugmeta:
U ovoj klasi se implementira metoda actionPerformed koja se poziva kao reakcija na klik dugmeta:
Promenljive ac(centripetalno ubrzanje),W(ugaona brzina) i v(linijska brzina) su prebačeni u objekat cestica kao atributi. Klasa Cestica koja opisuje taj objekat izgleda:
U klasi Crtez dodata je metoda kreirajOkruzenje u kojoj se nalazi kod koji kreira sve objekte crteza. Sada se na crtezu nalazi i vector brzine cija dužina zavisi od intenziteta. Posle pokretanja aplikacije crtež će izgledati:
Vektor brzine je predstavljen samo linijom debljine 3 pixela. Ukoliko bi u polja za tekst uneli neke druge podatke npr r=0.7m i W=1rad/s i kliknuli na dugme došlo bi do promene na crtežu:
Radijus putanje je sada povećan, kao i linijska brzina a na polje za izveštaj su upisani podaci. Metoda kreirajOkruženje će izgledati:
Vidimo da se kreira objekat klase Cestica koja je zapravo krug(nasledjuje Ellipse2D.Double klasu) i konstruktoru te klase se prosledjuju podaci o pravougaoniku u koji je taj krug upisan. Ovde su uvedena dva nova objekta: linija koja predstavlja vector brzine(klasa Line2D.Double) i tekst “V”.
Ova dva nova objekta se moraju iscrtati u metodi paint koja sada izgleda:
Ova dva nova objekta se moraju iscrtati u metodi paint koja sada izgleda:
Za debljinu linije koristi se objekat klase BasicStroke koja ima kao parametar prosledjenu debljinu u pixelima.
Sledeće
Animacije u Javi-primer>| |