objektno orijentisano programiranje vežbe – čas 11

59
Objektno orijentisano programiranje vežbe – čas 11 Biljana Stojanović

Upload: ardith

Post on 28-Jan-2016

96 views

Category:

Documents


3 download

DESCRIPTION

Objektno orijentisano programiranje vežbe – čas 11. Biljana Stojanović. GUI u Javi. GUI (Graphical User Interface) je interfejs između korisnika i aplikacije koji je baziran na grafičkim komponentama. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Objektno orijentisano programiranje vežbe – čas  11

Objektno orijentisano programiranjevežbe – čas 11

Biljana Stojanović

Page 2: Objektno orijentisano programiranje vežbe – čas  11

GUI u Javi

GUI (Graphical User Interface) je interfejs između korisnika i aplikacije koji je baziran na grafičkim komponentama.

Osnovni elementi potrebni za kreiranje GUI-a nalaze se u paketima java.awt i javax.swing.

awt je akronim od Abstract Window Toolkit. Ovaj paket je bio osnovni paket za kreiranje GUI-a do pojave javax.swing paketa sa Java 2 verzijom.

Većina klasa iz paketa java.awt biva zamenjena klasama iz paketa javax.swing.

20.05.2009. 2Biljana Stojanović

Page 3: Objektno orijentisano programiranje vežbe – čas  11

GUI u Javi

Najveći broj klasa iz paketa javax.swing definiše GUI elemente, poznate kao Swing komponente, koje daju unapređene alternative komponentama definisanim u java.awt.

Ipak, klase iz paketa java.awt ne mogu se ignorisati, jer javax.swing klase su iz njih izvedene i od njih zavise.

20.05.2009. 3Biljana Stojanović

Page 4: Objektno orijentisano programiranje vežbe – čas  11

GUI u Javi

Swing klase su samo deo skupa GUI programskih mogućnosti koje nazivamo JFC (Java Foundation Classes). Tu spadaju, pored Swing-a, i klase za 2D crtanje iz paketa java.awt.geom, klase koje podržavaju drag-and-drop, a koje se nalaze u paketu java.awt.dnd, API (Application Program Interface) iz paketa javax.accessibility koji omogućava implementiranje aplikacija.

Swing komponente su fleksibilnije jer su u celosti implementirane u Javi, dok java.awt komponente zavise od izvornog koda.

Iz tog razloga, Swing komponente nisu ograničene karakteristikama platforme na kojoj se izvršavaju. Pored ovoga, one omogućavaju svojstvo poznato kao pluggable look-and-feel koje omogućava promenu izgleda komponente.

20.05.2009. 4Biljana Stojanović

Page 5: Objektno orijentisano programiranje vežbe – čas  11

Kreiranje prozora

Osnovni prozor u Javi predstavljen je objektom klase Window iz paketa java.awt.

Međutim, klasa JFrame iz paketa javax.swing je mnogo korisnija za kreiranje prozora, jer pored linije za naslov i okvira koji nisu podržani u Window klasi, daje još mnogo mogućnosti.

20.05.2009. 5Biljana Stojanović

Page 6: Objektno orijentisano programiranje vežbe – čas  11

Kreiranje prozora

20.05.2009. 6Biljana Stojanović

Page 7: Objektno orijentisano programiranje vežbe – čas  11

Kreiranje prozora

Component – definiše komponentu – entitet koji se može prikazati, kao npr. dugme. Definiše osnovna svojstva i metode za sve komponente.

Container – definiše komponentu koja može da sadrži druge komponente (npr. linija menija treba da sadrži menije).

Window – definiše osnovni prozor bez linije naslova i okvira, dodaje metode klasi Container, npr. da se obrade događaji koji nastaju iz korisničke interakcije.

Frame – definiše prozor sa linijom za naslov i okvirom. JFrame (swing) – Frame sa mnogo dodatnih mogućnosti.

20.05.2009. 7Biljana Stojanović

Page 8: Objektno orijentisano programiranje vežbe – čas  11

Komponente i kontejneri

Komponenta je grafički entitet odgovarajućeg tipa koji može biti prikazan na ekranu.

Komponenta je objekat bilo koje klase koja je potklasa klase Component.

JFrame – koristi se kao osnovni prozor aplikacije. Mogu mu se dodavati komponente. Najčešće ćemo kreirati potklasu ove klase koja predstvlja prozor specifičan za našu aplikaciju.

JWindow – prozor bez linije naslova i ikona za upravljanje prozorima. Obično se koristi kao pomoćni prozor aplikacije.

JDialog – za kreiranje dijalog-prozora koji se koriste za unošenje podataka u program na različite načine.

20.05.2009. 8Biljana Stojanović

Page 9: Objektno orijentisano programiranje vežbe – čas  11

Komponente i kontejneri - nastavak

JApplet – osnovna klasa za Java 2 applet – aplet je program napravljen da radi ugrađen u web-stranu.

JComponent – potklase klase JComponent definišu niz standardnih komponenti kao što su meniji, dugmeta, polja za čekiranje, ...

Objekti svih klasa izvedenih iz klase Container mogu da sadrže druge objekte iz bilo koje klase koja je izvedena iz klase Component. Kako Container nasleđuje Component, sledi da kontejneri mogu da sadrže druge kontejnere.

Izuzetak je klasa Window i njene potklase, jer one ne mogu biti sadržane u drugom kontejneru.

20.05.2009. 9Biljana Stojanović

Page 10: Objektno orijentisano programiranje vežbe – čas  11

Komponente i kontejneri - nastavak

20.05.2009. 10Biljana Stojanović

Page 11: Objektno orijentisano programiranje vežbe – čas  11

Komponente i kontejneri - nastavak

JComponent je bazna klasa za sve Swing komponente, a pošto je izvedena iz klase Container, sve Swing komponente su takođe kontejneri.

Osnovna razlika između JFrame objekta i Window objekta je u tome što JFrame objekat predstavlja glavni prozor za aplikaciju, što nije slučaj sa Window objektom. Uvek nam treba JFrame objekat pre nego što kreiramo Window objekat.

JDialog objekat može se kreirati samo u kontekstu JFrame objekta – on se mora navesti u okviru konstruktora za JDialog i predstavlja njegovog roditelja.

20.05.2009. 11Biljana Stojanović

Page 12: Objektno orijentisano programiranje vežbe – čas  11

Prozorski okviri (Window panes)

Kada dodajemo GUI komponente ili crtamo u prozor koji prikazuje JFrame objekat, dodajemo komponente ili crtamo u prozorski okvir (pane).

Može se reći da su prozorski okviri kontejnerski objekti koji predstavljaju površ prozora. Postoji više vrsta prozorskih okvira.

Najčešće je u upotrebi prozorski okvir content pane, ali postoje i drugi.

20.05.2009. 12Biljana Stojanović

Page 13: Objektno orijentisano programiranje vežbe – čas  11

Prozorski okviri (Window panes) - nastavak

20.05.2009. 13Biljana Stojanović

Page 14: Objektno orijentisano programiranje vežbe – čas  11

Prozorski okviri (Window panes) - nastavak

Površ ispod linije naslova odgovara JRootPane objektu.

Ona sadrži novi okvir (panel) layeredPane tipa JLayeredPane koji odgovara celoj površi zauzetoj JRootPane objektom i obrađuje liniju menija ako postoji.

Površ u layerPane panelu ispod linije menija odgovara objektu contentPane koji je tipa JInternalPane i tu obično dodajemo naše GUI komponente.

20.05.2009. 14Biljana Stojanović

Page 15: Objektno orijentisano programiranje vežbe – čas  11

Prozorski okviri (Window panes) - nastavak

JLayeredPane ima mogućnost da grupe komponenti smešta u različite layer-e, tako da se može uređivati kako se komponente prikazuju jedna u odnosu na drugu.

Postoji i glassPane objekat koji odgovara čitavoj JRootPane površi i njegov sadržaj se prikazuje na vrhu svih okvira (npr. za drop-down menije) i koristi se za animacije koje se često osvežavaju (update).

20.05.2009. 15Biljana Stojanović

Page 16: Objektno orijentisano programiranje vežbe – čas  11

Prozorski okviri (Window panes) - nastavak

JFrame klasa sadrži sledeće bitnije metode:– getRootPane() – vraća JRootPane– getLayeredPane() – vraća JLayeredPane– getContentPane() – vraća contentPane kao tip

Container. Ovaj metod se najčešće koristi, pošto se komponente obično dodaju u contentPane

– getGlassPane() – vraća glassPane kao tip Component Sve klase koje predstavljaju pomenute prozorske

okvire su same po sebi Swing komponente, definisane u paketu javax.swing.

20.05.2009. 16Biljana Stojanović

Page 17: Objektno orijentisano programiranje vežbe – čas  11

Osnovno o komponentama

Kada je komponenta sadržana unutar neke druge komponente, spoljašnji objekat nazivamo roditeljem.

Referenca na roditeljski objekat dobija se pozivom metoda getParent(). Metod se nasleđuje iz klase Component i vraća objekat tipa Container. Ako roditelj ne postoji, vraća se null.

20.05.2009. 17Biljana Stojanović

Page 18: Objektno orijentisano programiranje vežbe – čas  11

Osnovno o komponentama - nastavak

Klasa Component definiše atribute koji čuvaju sledeće informacije o objektu:– position – (x,y) koordinate u odnosu na koordinatni

sistem kontejnera– name – ime tipa String– size – veličina objekta data širinom i visinom– foreground color i background color – boje objekta,

koriste se prilikom prikazivanja objekta– font - font koji koristi objekat kada se prikazuje– cursor – definiše izgled kursora kada je pozicioniran na

objektu

20.05.2009. 18Biljana Stojanović

Page 19: Objektno orijentisano programiranje vežbe – čas  11

Osnovno o komponentama - nastavak

– enabled – da li je objekat dostupan – kada je objekat enabled, ima normalan prikaz i njegovo enabled stanje je true. Kada je disabled, onda je siv

– visible – da li je objekat vidljiv ili ne – ako nije vidljiv, ne iscrtava se na ekranu

– valid – da li je objekat validan ili ne – ako nije, izgled entiteta koji čine objekat još nije utrvđen. Ovo je slučaj pre nego što objekat postane vidljiv.

Karakteristike Component objekta možemo menjati i čitati isključivo pomoću odgovarajućeg metoda, jer su svi pomenuti atributi private.

myWindow.setName(“Ime”);String ime = myWindow.getName();

20.05.2009. 19Biljana Stojanović

Page 20: Objektno orijentisano programiranje vežbe – čas  11

Osnovno o komponentama - nastavak

isVisible(), isEnabled(), isValid() metode vraćaju true ako je objekat vidljiv, dostupan (enabled) i validan respektivno.

setVisible(true), setEnabled(true). Odnosi se na događaje: Poziv setEnabled(false) neće inhibirati događaje

kao što je klik mišem iz komponente!!! Da bi se sprečilo da događaji iz disabled

komponente imaju efekat, u kodu koji obrađuje događaj treba pozvati metod isEnabled() za komponentu i ako se vrati false ne radi se ništa.

20.05.2009. 20Biljana Stojanović

Page 21: Objektno orijentisano programiranje vežbe – čas  11

Veličina i pozicija komponente

Pozicija komponente je definisana x i y koordinatama tipa int ili objektom tipa java.awt.Point (koji ima dve članice – x i y koordinatu).

Veličina je difinisana šironom i visinom takođe tipa int ili objektom klase java.awt.Dimension.

Veličina i pozicija komponente su često zajedno određeni objektom tipa java.awt.Rectangle (gornji levi ugao pravougaonika (x, y), širina i visina, svi tipa int).

Komponenta ima predloženu (željenu) veličinu, minimalnu i maksimalnu veličinu. Ako je zadata veličina manja od minimalne, komponenta neće biti prikazana.

20.05.2009. 21Biljana Stojanović

Page 22: Objektno orijentisano programiranje vežbe – čas  11

Metode

Rectangle getBounds() – vraća poziciju i veličinu kao objekat tipa Rectangle

Rectangle getBounds(Rectangle rect) – smešta poziciju i veličinu u objekat rect i vraća referencu na njega. Može se iskoristiti već postojeći objekat rect za smeštanje podataka, a ako je rect null, kreiraće se novi Rectangle objekat od strane metoda

Dimension getSize() – vraća tekuću veličinu komponente kao Dimension objekat

Dimension getSize(Dimension dim) – smešta tekuću veličnu u objekat dim i vraća referencu na njega

Point getLocation() – vraća poziciju komponente kao Point objekat

20.05.2009. 22Biljana Stojanović

Page 23: Objektno orijentisano programiranje vežbe – čas  11

Metode - nastavak

Point getLocation(Point p) – smešta koordinate tekuće pozicije komponente u objekat p i vraća referencu na njega

void setBounds(int x, int y, int width, int height) – postavlja poziciju komponente na (x,y), širinu i visinu na width, odnosno height

void setBounds(Rectangle rect) void setSize(Dimension d) void setLocation(int x, int y) void setLocation(Point p)

20.05.2009. 23Biljana Stojanović

Page 24: Objektno orijentisano programiranje vežbe – čas  11

Metode - nastavak

void setMinimumSize(Dimension d) void setMaximumSeze(Dimension d) void setPrefferedSize(Dimension d) Ako je objekat d u prethodna tri metoda null, postavlja se

odgovarajuća podrazumevana veličina Još jedan bitan metod je getToolkit(), koji vraća objekat tipa Toolkit

koji sadrži informacije o okruženju u kome radi aplikacija, uključujući i veličinu ekrana u pikselima.

Možemo koristiti metod getToolkit() kao pomoć pri postavljanju veličine i pozicije prozora na ekranu:Dimension getScreenSize() – primenjujemo na objekat tipa Toolkit

Ne možemo kreirati objekat Toolkit direktno, jer je Toolkit apstraktna klasa. Postoji samo jedan Toolkit objekat u aplikaciji – onaj koji dobijamo kao referencu pozivom getToolkit() za komponentu!

20.05.2009. 24Biljana Stojanović

Page 25: Objektno orijentisano programiranje vežbe – čas  11

Primer TestWindow.java

Objekat tipa JFrame kreira se kao inicijalna vrednost static članice klase, pa će automatski biti kreiran kada se klasa TestWindow učita.

Argument konstruktora klase JFrame je string koji predstavlja naslov koji će biti prikazan u prozoru aplikacije. Inicijalno, prozor nije vidljiv.

Metod setBounds() definiše veličinu i poziciju prozora, prva dva argumenta daju nam x i y koordinatu gornjeg levog ugla prozora aplikacije u odnosu na gornji levi ugao ekrana za prikazivanje, a druga dva širinu i visinu prozora u pikselima.

Koordinatni sistem ekrana ima koordinatni početak u gornjem levom uglu ekrana; pozitivni deo x-ose ide sa leva na desno, a pozitivni deo y-ose ide odozgo naniže.

20.05.2009. 25Biljana Stojanović

Page 26: Objektno orijentisano programiranje vežbe – čas  11

Primer TestWindow.java - nastavak

20.05.2009. 26Biljana Stojanović

Page 27: Objektno orijentisano programiranje vežbe – čas  11

Primer TestWindow.java - nastavak

Veličina i pozicija prozora aplikacije zavise od veličine ekrana i rezolucije. Što je veća rezolucija, prozor je manji i bliži je gornjem levom uglu ekrana, jer su pikseli na manjem rastojanju.

setDefaultCloseOperation() – ovaj metod za JFrame objekat određuje šta se dešava ako zatvorimo prozor bilo klikom na X ikonu ili izborom opcije Close iz padajućeg menija koji se dobija desnim klikom na Java ikonu u naslovnoj liniji.

20.05.2009. 27Biljana Stojanović

Page 28: Objektno orijentisano programiranje vežbe – čas  11

Primer TestWindow.java - nastavak

Postoje 4 mogućnosti: EXIT_ON_CLOSE – zatvara se prozor, oslobađaju se resursi

prozora i njegovih komponenti i završava se aplikacija pozivom metoda System.exit(). Koristi se samo za aplikacije.

DISPOSE_ON_CLOSE – prozor i komponente se uništavaju, ali se aplikacija ne završava (ili se završava sa izvesnim zakašnjenjem). Da li je aplikacija završena vidi se u konzolnom prozoru – u naslovu ispred imena fajla stoji <terminated>.

DO_NOTHING_ON_CLOSE – operacija zatvaranja nema nikakvog efekta

HIDE_ON_CLOSE – prozor se skriva pozivom metoda setVisible(false), aplikacija se ne završava. Ovo je podrazumevana akcija ako se ne pozove metod setDefaultCloseOperation() sa drugačijim argumentom. Kada je prozor sakriven, može ponovo postati vidljiv pozivom setVisible(true)

20.05.2009. 28Biljana Stojanović

Page 29: Objektno orijentisano programiranje vežbe – čas  11

Primer TestWindow.java - nastavak

Ovaj prozor nije mnogo koristan – možemo jedino da ga pomeramo, menjamo veličinu, minimiziramo/maksimiziramo i zatvorimo.

Metode setVisible() i setBounds() su članice klase JFrame nasleđene iz klase Component, pa su dostupne za svaku komponentu, dok je metod setDefaultCloseOperation() definisan u klasi JFrame, tako da je dostupan samo za JFrame objekat.

20.05.2009. 29Biljana Stojanović

Page 30: Objektno orijentisano programiranje vežbe – čas  11

java.awt.Point

Metode:– move(int, int) – menjamo poziciju tačke– translate(int, int) – transliramo za pomeraj po x

i y osi– equals(Point) – ispituje da li dve tačke imaju

jednake koordinate– setLocation(int, int) = move(int, int)– getLocation() – vraća kopiju tekućeg Point

objekta

20.05.2009. 30Biljana Stojanović

Page 31: Objektno orijentisano programiranje vežbe – čas  11

java.awt.Rectangle

4 public članice (x, y, width, height – sve tipa int) Konstruktori: Rectangle() – u tački (0,0) sa dimenzijama 0, 0 Rectangle(int x, int y, int width, int height) Rectangle(int width, int height) – u tački (0,0) sa datom

širinom i visinom Rectangle(Point p, Dimension d) Rectangle(Point p) – dimenzije 0, 0 Rectangle(Dimension d) – u tački (0,0) sa datim

dimezijama predstavljenim objektom Dimesion Rectangle(Rectangle r) – sa istom pozicijom i

dimenzijama kao i dati pravougaonik r

20.05.2009. 31Biljana Stojanović

Page 32: Objektno orijentisano programiranje vežbe – čas  11

java.awt.Rectangle

getLocation() – vraća Point objekat setLocation(int, int) setLocation(Point p) translate(int, int) – transalcija na isti način kao

kod tačke getSize() – vraća Dimension objekat setSize(int, int) setSeze(Dimension d)

20.05.2009. 32Biljana Stojanović

Page 33: Objektno orijentisano programiranje vežbe – čas  11

java.awt.Rectangle

Rectangle intersection(Rectangle r) – vraća pravougaonik koji je presek dva pravougaonika. Ako se pravougaonici ne seku, vraća se pravougaonik na poziciji (0,0) sa širinom 0 i visinom 0.

Rectangle union(Rectangle r) – vraća najmanji pravougaonik koji obuhvata tekući pravougaonik i pravougaonik r.

void add(Rectangle r) – proširuje tekući pravougaonik kako bi mogao da obuhvati dati pravougaonik r

void add(Point p) - proširuje tekući pravougaonik kako bi mogao da obuhvati datu tačku p. Rezultat će biti najmanji pravougaonik koji obuhvata originalni pravougaonik i datu tačku

void add(int x, int y) – druga varijanta prethodnog metoda20.05.2009. 33Biljana Stojanović

Page 34: Objektno orijentisano programiranje vežbe – čas  11

java.awt.Rectangle

void grow(int h, int v) – povećava tekući pravougaonik i horizontalno (za h i sa leve i sa desne strane) i vertikalno (za v i sa gornje i sa donje strane). Nova pozicija pravougaonika je (x-h, y-v), širina width+2h, visina height+2v.

boolean isEmpty() – vraća true ako su širina i visina 0, inače false

boolean equals(Object r) – dva pravougaonika su jednaka ako imaju istu poziciju i iste dimenzije.

boolean intersects(Rectangle r) – da li pravougaonik ima preseka sa datim pravougaonikom

boolean contains(Point p) – da li pravougaonik sadrži datu tačku

boolean contains(int x, int y) – druga varijanta prethodnog metoda.

20.05.2009. 34Biljana Stojanović

Page 35: Objektno orijentisano programiranje vežbe – čas  11

Vizuelne karakteristike komponenti

Crtanje na Component objektu vrši se implementacijom paint() metoda.

Metod paint() se automatski poziva kada treba da se iscrta komponenta.

Potreba za iscrtavanjem komponente je vrlo česta – program može da zahteva da se ponovo iscrta površ koja sadrži komponentu ili korisnik može da promeni veličinu prozora koji sadrži komponentu.

Napomenimo da će komponenta sama po sebi biti iscrtana. Neophodno je da se predefiniše metod paint() za bilo šta što je potrebno dodatno iscrtati.

20.05.2009. 35Biljana Stojanović

Page 36: Objektno orijentisano programiranje vežbe – čas  11

Vizuelne karakteristike komponenti

void setBackground(Color boja) – postavlja boju pozadine za osnovnu komponentu.

Color getBackground() void setForeground(Color boja) – postavlja boju bilo koje

komponente koja se pojavljuje u okviru osnovne komponente, npr. labela na dugmetu.

Color getForeground() void setCursor(Cursor a) – postavlja izgled kursora unutar

površi koju zauzima Component objekat void setFont(Font a) – postavlja font Component objekta Font getFont()

20.05.2009. 36Biljana Stojanović

Page 37: Objektno orijentisano programiranje vežbe – čas  11

java.awt.Color

Boja se definiše kao kombinacija tri osnovne boje: crvene, zelene i plave.

To su tzv. RGB vrednosti za boje. Svaka osnovna boja može imati vrednost od 0 do 255. Color boja = new Color(0,0,0); - crna Color boja = new Color(255,255,255); - bela Postoje i public final static promenljive sa odgovarajućim

RGB vrednostima:– BLACK (0,0,0)– RED (255,0,0)– GRAY (128,128,128) ...

Primer: prozor.setBackground(Color.BLACK);

20.05.2009. 37Biljana Stojanović

Page 38: Objektno orijentisano programiranje vežbe – čas  11

java.awt.Color

getRed(), getGreen(), getBlue() – vraćaju komponente boje

getRGB() – vraća int vrednost koja predstavlja kombinaciju boja

equals() – za poređenje boja na jednakost komponenti

20.05.2009. 38Biljana Stojanović

Page 39: Objektno orijentisano programiranje vežbe – čas  11

java.awt.Cursor

Klasa Cursor definiše static konstante koje određuju standardne tipove kursora i navodimo ih kao argumente konstruktora.

Cursor kursor = new Cursor(Cursor.TEXT_CURSOR); Alterantivno, možemo dobiti kursor nekog od

predefinisanih tipova koristeći statički metod: Cursor kursor =

Cursor.getPredifenedCursor(Cursor.TEXT_CURSOR); Ovo je posebno korisno kad ne želimo da pamtimo Cursor

objekat, već sam da ga prosledimo metodu, kao što je setCursor().

20.05.2009. 39Biljana Stojanović

Page 40: Objektno orijentisano programiranje vežbe – čas  11

java.awt.Font

Klasa Font je dosta komplikovana, navodimo samo najbitnija svojstva.

Klasa Font pravi razliku između karaktera i glifa, tj. grafičke reprezentacije karaktera. Različiti fontovi definišu različite glifove za jedan isti karakter.

Font mojFont = new Font(“Serif”, Font.ITALIC, 12); /* prvi argument je ime fonta, drugi je stil fonta, a treći veličina fonta u pikselima */

Font mojFont = new Font(“Serif”, Font.ITALIC + Font.BOLD, 15); /* kombinacija stilova */

getStyle() – vraća stil fonta getSize() – vraća veličinu fonta isPlain(), isBold(), isItalic() ... – testiranje pojedinačnih

stilova20.05.2009. 40Biljana Stojanović

Page 41: Objektno orijentisano programiranje vežbe – čas  11

Swing komponente

Swing komponente imaju JComponent klasu kao osnovnu, a ona nasleđuje klasu Component (preko klase Container) dodajući sledeće mogućnosti:– Podrška pluggable look-and-feel za komponente – mogućnost

promene izgleda komponenti koje se prikazuju– Podrška tooltip-ova – poruka koja opisuje svrhu komponente kada

miš stoji nad njom– Lako se nasleđuju komponentne klase da bi se kreirale korisničke

komponente– ...

Sve Swing komponente su definisane u paketu javax.swing i imaju imena koja počinju slovom J.

20.05.2009. 41Biljana Stojanović

Page 42: Objektno orijentisano programiranje vežbe – čas  11

Dugmeta (JButton)

20.05.2009. 42Biljana Stojanović

Page 43: Objektno orijentisano programiranje vežbe – čas  11

Dugmeta (JButton) - nastavak

JButton – regulatno dugme, npr. OK/Cancel JToggleButton – definiše dugme sa dva stanja –

pritisnuto ili ne JCheckBox – dugme sa checkbox-om sa leve

strane JRadioButton – operišu u grupi, tako da je samo

jedno dugme pritisnuto u datom trenutku. Ovo grupisanje se postiže dodavanjem JRadioButton objekta ButtonGroup objektu

20.05.2009. 43Biljana Stojanović

Page 44: Objektno orijentisano programiranje vežbe – čas  11

Meniji (JMenuBar)

20.05.2009. 44Biljana Stojanović

Page 45: Objektno orijentisano programiranje vežbe – čas  11

Meniji (JMenuBar)

JMenuBar klasa definiše liniju menija koja se najčešće nalazi na vrhu prozora aplikacije.

JMenu objekat predstavlja element na vrhu menija. Klikom na njega dobija se padajuća (drop down) lista elemenata menija.

Element menija definisani su klasom JMenuItem. JPopupMenu klasa definiše kontekstni meni koji se najčešće

koristi da se prikaže pri desnom kliku na komponentu. JCheckBoxMenuItem je element menija sa checkbox-om. JRadioButtonMenuItem definiše element menija koji je deo

grupe gde samo jedan element može da bude obeležen u datom trenutku.

Grupa se kreira dodavanjem JRadioButtonMenuItem objekata ButtonGroup objektu.

20.05.2009. 45Biljana Stojanović

Page 46: Objektno orijentisano programiranje vežbe – čas  11

Tekst-komponente

20.05.2009. 46Biljana Stojanović

Page 47: Objektno orijentisano programiranje vežbe – čas  11

Tekst-komponente

JLabel – pasivna komponenta, ne može se editovati, služi za označavanje drugih komponenti

JTextField – kao JLabel samo se može editovati. Predstavlja jednu liniju teksta.

JFormattedTextField – to je JTextField komponenta koja ima kontrolu formata podataka koji se unose/prikazuju.

JTextArea – komponenta koja dozvoljava unos višelinijskog teksta; ne podržava direktno skrolovanje; može se postići stavljanjem komponente JTextArea u kontejner JScrollPane

JEditorPane i JTextPane podržavaju sofisticiranije editovanje (HTML, slike itd).

20.05.2009. 47Biljana Stojanović

Page 48: Objektno orijentisano programiranje vežbe – čas  11

Kontejneri

Komponente unutar kontejnera se prikazuju unutar površi koju zauzima kontejner na ekranu.

Rečeno je već da su sve Swing komponente kontejneri. Takođe, kontejner kontroliše kako su raspoređene njegove

komponente pomoću objekta koji nazivamo Layout Manager.

Klasa Container je apstraktna klasa, pa se ne mogu kreirati objekti ove klase.

Napomena! Kontejner ne može da sadrži objekat klase Window, niti bilo koje druge klase izvedene iz nje. Objekat bilo koje klase koja je izedena iz klase Component može biti dodat kontejneru.

20.05.2009. 48Biljana Stojanović

Page 49: Objektno orijentisano programiranje vežbe – čas  11

Kontejneri

Bitnije metode klase Container: int getComponentCount() – vraća broj komponenti

u kontejneru Component getComponent(int index) – vraća

komponentu koja se identifikuje datim indeksom. Radi se o indeksu niza, pa mora biti u opsegu [0, count-1].

Component[] getComponents() – vraća niz komponenti iz kontejnera

20.05.2009. 49Biljana Stojanović

Page 50: Objektno orijentisano programiranje vežbe – čas  11

Dodavanje komponente kontejneru

Component add(Component c) – dodaje komponentu c na kraj liste komponenti sačuvane u kontejneru; vraća se c

Component add(Component c, int index) – komponenta se smešta na datu poziciju. Ako je index -1 komponenta se dodaje na kraj liste; vraća se c

Kada se doda komponenta na datu poziciju, ostale komponente se pomeraju redom da bi nova mogla da se doda. U datom trenutku, komponenta može biti u samo jednom kontejneru. Dodavanje komponente koja je već deo drugog kontejnera ima za posledicu njeno uklanjanje iz tog kontejnera.

20.05.2009. 50Biljana Stojanović

Page 51: Objektno orijentisano programiranje vežbe – čas  11

Layout Manager

Svi kontejneri imaju podrazumevani layout manager, ali se može izabrati drugačiji kada je potrebno.

Mnoge klase koje definišu layout manager su u paketima java.awt i javax.swing.

Layout manager za kontejner određuje poziciju i veličinu svih komponenti u njemu, tako da generalno ne treba menjati veličinu i poziciju komponenti – o tome se stara layout manager.

Klase koje definušu layout manager-e imlementiraju intefrejs LayoutManager, tako da se promenljiva tipa LayoutManager može koristiti kao referenca na bilo koji tip layout manager-a.

20.05.2009. 51Biljana Stojanović

Page 52: Objektno orijentisano programiranje vežbe – čas  11

Layout Manager FlowLayout – dodaju se komponente u sukcesivnim redovima –

kad je red popunjen, počinje se sa novim. Najčešće se koristi za uređivanje dugmeta. To je podrazumevani LayoutManager za JPanel.

BorderLayout – prozor je podeljen na 5 delova – north, south, east, west, center. Ovo je podrazumevani layout za contentPane u JFrame-u, JDialog, JApplet.

CardLayout – komponente se raspoređuju jedna iznad druge, kao špil karata. Jedino je komponenta na “vrhu” vidljiva u bilo kom trenutku.

GridLayout – komponente se raspoređuju u pravougaonu mrežu, pri čemu korisnik zadaje broj redova i kolona.

GridBagLayout – pravougaona mraža, pri čemu širina redova i kolona može da varira. Komplikovaniji od pomenutih, obezbeđuje dosta fleksibilnosti.

Navede klase nalaze se u paketu java.awt.

20.05.2009. 52Biljana Stojanović

Page 53: Objektno orijentisano programiranje vežbe – čas  11

FlowLayout manager

FlowLayout manager smešta komponente u red, a kada se red napuni, automatski počinje smeštanje u novi red.

Podrazumevana pozicija reda sa komponentama je centar kontejnera, a podrazumevana orijentacija je s leva na desno.

Postoji 5 mogućnosti koje se mogu izabrati za poziciju reda – LEFT, RIGHT, CENTER, LEADING, TRAILING.

LEADING i TRAILING označavaju ivicu kontejnera prema kojoj red treba da bude poravnat. O kojoj ivici se radi zavisi od orijentacije.

Podrazumevano su komponente u redu razdvojene rupom veličine 5 jedinica, a sukcesivni redovi su na istom rastojanju.

20.05.2009. 53Biljana Stojanović

Page 54: Objektno orijentisano programiranje vežbe – čas  11

FlowLayout manager - nastavak

FlowLayout() – align je CENTER, hgap i vpag su 5 FlowLayout(int align) FlowLayout(int align, int hgap, int vgap) setHgap(int hgap) setVgap(int vgap) Promena rastojanja između komponenti i redova neće

biti vidljiva ako se to radi pre dodavanja komponenti.

20.05.2009. 54Biljana Stojanović

Page 55: Objektno orijentisano programiranje vežbe – čas  11

BorderLayout

Može da smesti najviše pet komponenti u kontejner. Samo jedna komponenta može biti na datoj poziciji.

Pozicije (static final): NORTH, SOUTH, EAST, WEST, CENTER.

NORTH i SOUTH komponente zauzimaju celu širinu kontejnera, EAST i WEST komponente zauzimaju preostalu visinu, CENTER komponenta zauzima preostali prostor.

Ako nema NORTH i SOUTH komponenti, EAST i WEST će se proširiti na punu visinu kontejnera.

Podrazumevano su hgap i vgap postavljeni na 0. setHgap(int), setVgap(int) getHgap(), getVgap()

20.05.2009. 55Biljana Stojanović

Page 56: Objektno orijentisano programiranje vežbe – čas  11

GridLayout manager

GridLayout manager raspoređuje komponente kontejnera u pravougaonu mrežu.

GridLayout() – komponente su uređene u jedan red (za svaku komponentu po jedna kolona), bez razmaka između komponenti

GridLayout(int rows, int cols) – zadaje se broj redova i kolona u mreži; nema razmaka između komponenti

GridLayout(int rows, int cols, int hgap, ing vgap) – zadaje se broj redova i kolona u mreži; zadaju se i horizontalno i vertikalno rastojanje među komponentama

20.05.2009. 56Biljana Stojanović

Page 57: Objektno orijentisano programiranje vežbe – čas  11

GridLayout manager - nastavak

Može se postaviti da je broj redova ili broj kolona jednak 0, ali ne mogu istovremeno biti 0.

Ako je broj redova 0, layout manager će obezbediti dovoljno redova da se smeste sve komponente kontejnera. Slično je i za kolone.

Ako se doda više komponenti od onoga što mreža može da prihvati, broj kolona će se uvećati automatski.

20.05.2009. 57Biljana Stojanović

Page 58: Objektno orijentisano programiranje vežbe – čas  11

Card Layout Manager

Card layout manager tretira komponente u kontejneru kao karte, pri čemu je samo jedna karta vidljiva u datom trenutku.

Kontejner se ponaša kao stek sa kartama. Prva komponenta dodata u CardLayout objekat je

komponenta koja je vidljiva kada se kontejner prvi put prikazuje.

Prva komponenta koja se doda u kontejner će biti na vrhu steka i stoga vidljiva, a poslednja će biti na dnu.

Konstruktori:– CardLayout()– CardLayout(int hgap, int vgap)

20.05.2009. 58Biljana Stojanović

Page 59: Objektno orijentisano programiranje vežbe – čas  11

CardLayout manager

void next(Container parent) – selektuje narednu komponentu u kontejneru parent. Ako je tekuća vidljiva komponenta poslednja, selektuje se prva komponenta

void previous(Container parent) – selektuje prethodnu komponentu u kontejneru parent. Ako je tekuća vidljiva komponenta prva, selektuje se poslednja komponenta

void first(Container parent) – selektuje prvu komponentu u kontejneru parent.

void last(Container) – selektuje poslednju komponentu u kontejneru parent

void show(Container parent, String name) – selektuje komponentu u kontejneru parent kojoj je pridruženo ime name. Ovo mora biti jedan od String objekata navedenih pri pozivu add() metoda radi identifikacije komponente. Ovaj objekat se može upotrebiti za pristup bilo kojoj komponenti.

20.05.2009. 59Biljana Stojanović