objektno orijentisano programiranje vežbe – čas 11
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 PresentationTRANSCRIPT
Objektno orijentisano programiranjevež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.
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ć
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ć
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ć
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ć
Kreiranje prozora
20.05.2009. 6Biljana Stojanović
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ć
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ć
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ć
Komponente i kontejneri - nastavak
20.05.2009. 10Biljana Stojanović
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ć
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ć
Prozorski okviri (Window panes) - nastavak
20.05.2009. 13Biljana Stojanović
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
Primer TestWindow.java - nastavak
20.05.2009. 26Biljana Stojanović
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
Dugmeta (JButton)
20.05.2009. 42Biljana Stojanović
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ć
Meniji (JMenuBar)
20.05.2009. 44Biljana Stojanović
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ć
Tekst-komponente
20.05.2009. 46Biljana Stojanović
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć
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ć