Java Gui

download Java Gui

of 60

Transcript of Java Gui

Objektno orijentisano programiranje vebe, kolska 2009/10Univerzitet u Beogradu, Matematiki fakultet Biljana Stojanovi

Grafiki korisniki interfejs. Swing komponente. LayoutManager.as 12

GUI u Javi

GUI (Graphical User Interface) je interfejs izmeu korisnika i aplikacije koji je baziran na grafikim 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. Veina klasa iz paketa java.awt biva zamenjena klasama iz paketa javax.swing.

3

Objektno orijentisano programiranje

25.05.2010.

GUI u Javi

Najvei broj klasa iz paketa javax.swing definie GUI elemente, poznate kao Swing komponente, koje daju unapreene 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.

4

Objektno orijentisano programiranje

25.05.2010.

GUI u Javi

Swing klase su samo deo skupa GUI programskih mogunosti koje nazivamo JFC (Java Foundation Classes). Tu spadaju, pored Swing-a, i klase za 2D crtanje iz paketa java.awt.geom, klase koje podravaju drag-and-drop, a koje se nalaze u paketu java.awt.dnd, API (Application Program Interface) iz paketa javax.accessibility koji omoguava 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 ograniene karakteristikama platforme na kojoj se izvravaju. Pored ovoga, one omoguavaju svojstvo poznato kao pluggable lookand-feel koje omoguava promenu izgleda komponente.Objektno orijentisano programiranje 25.05.2010.

5

Kreiranje prozora

Osnovni prozor u Javi predstavljen je objektom klase Window iz paketa java.awt. Meutim, klasa JFrame iz paketa javax.swing je mnogo korisnija za kreiranje prozora, jer pored linije za naslov i okvira koji nisu podrani u Window klasi, daje jo mnogo mogunosti.

6

Objektno orijentisano programiranje

25.05.2010.

Kreiranje prozora

7

Objektno orijentisano programiranje

25.05.2010.

Kreiranje prozora

Component definie komponentu entitet koji se moe prikazati, kao npr. dugme. Definie osnovna svojstva i metode za sve komponente. Container definie komponentu koja moe da sadri druge komponente (npr. linija menija treba da sadri menije). Window definie osnovni prozor bez linije naslova i okvira, dodaje metode klasi Container, npr. da se obrade dogaaji koji nastaju iz korisnike interakcije. Frame definie prozor sa linijom za naslov i okvirom. JFrame (swing) Frame sa mnogo dodatnih mogunosti.

8

Objektno orijentisano programiranje

25.05.2010.

Komponente i kontejneri

Komponenta je grafiki entitet odgovarajueg tipa koji moe 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. Najee emo kreirati potklasu ove klase koja predstvlja prozor specifian za nau aplikaciju. JWindow prozor bez linije naslova i ikona za upravljanje prozorom. Obino se koristi kao pomoni prozor aplikacije. JDialog za kreiranje dijalog-prozora koji se koriste za unoenje podataka u program na razliite naine.Objektno orijentisano programiranje 25.05.2010.

9

Komponente i kontejneri - nastavak

JApplet osnovna klasa za Java 2 applet aplet je program napravljen da radi ugraen u web-stranu. JComponent potklase klase JComponent definiu niz standardnih komponenti kao to su meniji, dugmeta, polja za ekiranje, ... Objekti svih klasa izvedenih iz klase Container mogu da sadre druge objekte iz bilo koje klase koja je izvedena iz klase Component. Kako Container nasleuje Component, sledi da kontejneri mogu da sadre druge kontejnere. Izuzetak je klasa Window i njene potklase, jer one ne mogu biti sadrane u drugom kontejneru.

10

Objektno orijentisano programiranje

25.05.2010.

Komponente i kontejneri - nastavak

11

Objektno orijentisano programiranje

25.05.2010.

Komponente i kontejneri - nastavak

JComponent je bazna klasa za sve Swing komponente, a poto je izvedena iz klase Container, sve Swing komponente su takoe kontejneri. Osnovna razlika izmeu JFrame objekta i Window objekta je u tome to JFrame objekat predstavlja glavni prozor za aplikaciju, to nije sluaj sa Window objektom. Uvek nam treba JFrame objekat pre nego to kreiramo Window objekat. JDialog objekat moe se kreirati samo u kontekstu JFrame objekta on se mora navesti u okviru konstruktora za JDialog i predstavlja njegovog roditelja.

12

Objektno orijentisano programiranje

25.05.2010.

Prozorski okviri (Window panes)

Kada dodajemo GUI komponente ili crtamo u prozor koji prikazuje JFrame objekat, dodajemo komponente ili crtamo u prozorski okvir (pane). Moe se rei da su prozorski okviri kontejnerski objekti koji predstavljaju povr prozora. Postoji vie vrsta prozorskih okvira. Najee je u upotrebi prozorski okvir content pane, ali postoje i drugi.

13

Objektno orijentisano programiranje

25.05.2010.

Prozorski okviri (Window panes) nastavak

14

Objektno orijentisano programiranje

25.05.2010.

Prozorski okviri (Window panes) nastavak

Povr ispod linije naslova odgovara JRootPane objektu. JRootPane objekat sadri lanice:

JMenuBar menuBar linija menija Container contentPane okvir sa sadrajem prozora; tu se obino dodaju GUI komponente JLayeredPane layeredPane okvir koji upravlja linijom menija i okvirom sa sadrajem.

15

Objektno orijentisano programiranje

25.05.2010.

Prozorski okviri (Window panes) nastavak

JLayeredPane ima mogunost da grupe komponenti smeta u razliite layer-e, tako da se moe ureivati kako se komponente prikazuju jedna u odnosu na drugu. Postoji i glassPane objekat koji odgovara itavoj JRootPane povri i njegov sadraj se prikazuje na vrhu svih okvira (npr. za drop-down menije) i koristi se za animacije koje se esto osveavaju (update).

16

Objektno orijentisano programiranje

25.05.2010.

Prozorski okviri (Window panes) nastavak

JFrame klasa sadri sledee bitnije metode:

getRootPane() vraa JRootPane getLayeredPane() vraa JLayeredPane getContentPane() vraa contentPane kao tip Container. Ovaj metod se najee koristi, poto se komponente obino dodaju u contentPane getGlassPane() vraa glassPane kao tip Component

Sve klase koje predstavljaju pomenute prozorske okvire su same po sebi Swing komponente, definisane u paketu javax.swing.

17

Objektno orijentisano programiranje

25.05.2010.

Osnovno o komponentama

Kada je komponenta sadrana unutar neke druge komponente, spoljanji objekat nazivamo roditeljem. Referenca na roditeljski objekat dobija se pozivom metoda getParent(). Metod se nasleuje iz klase Component i vraa objekat tipa Container. Ako roditelj ne postoji, vraa se null.

18

Objektno orijentisano programiranje

25.05.2010.

Osnovno o komponentama - nastavak

Klasa Component definie atribute koji uvaju sledee informacije o objektu:

position (x,y) koordinate u odnosu na koordinatni sistem kontejnera name ime tipa String size veliina 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 definie izgled kursora kada je pozicioniran na objektu

19

Objektno orijentisano programiranje

25.05.2010.

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 utvren. Ovo je sluaj pre nego to objekat postane vidljiv.

Karakteristike Component objekta moemo menjati i itati iskljuivo pomou odgovarajueg metoda, jer su svi pomenuti atributi private.myWindow.setName(Ime); String ime = myWindow.getName();

20

Objektno orijentisano programiranje

25.05.2010.

Osnovno o komponentama - nastavak

isVisible(), isEnabled(), isValid() metode vraaju true ako je objekat vidljiv, dostupan (enabled) i validan respektivno. setVisible(true), setEnabled(true). Odnosi se na dogaaje: Poziv setEnabled(false) nee inhibirati dogaaje kao to je klik miem iz komponente!!! Da bi se spreilo da dogaaji iz disabled komponente imaju efekat, u kodu koji obrauje dogaaj treba pozvati metod isEnabled() za komponentu i ako se vrati false ne radi se nita.Objektno orijentisano programiranje 25.05.2010.

21

Veliina 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). Veliina je difinisana irinom i visinom takoe tipa int ili objektom klase java.awt.Dimension. Veliina i pozicija komponente su esto zajedno odreeni objektom tipa java.awt.Rectangle (gornji levi ugao pravougaonika (x, y), irina i visina, svi tipa int). Komponenta ima predloenu (eljenu) veliinu, minimalnu i maksimalnu veliinu. Ako je zadata veliina manja od minimalne, komponenta nee biti prikazana.

22

Objektno orijentisano programiranje

25.05.2010.

Metode

Rectangle getBounds() vraa poziciju i veliinu kao objekat tipa Rectangle Rectangle getBounds(Rectangle rect) smeta poziciju i veliinu u objekat rect i vraa referencu na njega. Moe se iskoristiti ve postojei objekat rect za smetanje podataka, a ako je rect null, kreirae se novi Rectangle objekat od strane metoda Dimension getSize() vraa tekuu veliinu komponente kao Dimension objekat Dimension getSize(Dimension dim) smeta tekuu velinu u objekat dim i vraa referencu na njega Point getLocation() vraa poziciju komponente kao Point objekat

23

Objektno orijentisano programiranje

25.05.2010.

Metode - nastavak

Point getLocation(Point p) smeta koordinate tekue pozicije komponente u objekat p i vraa 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)

24

Objektno orijentisano programiranje

25.05.2010.

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 odgovarajua podrazumevana veliina. Jo jedan bitan metod je getToolkit(), koji vraa objekat tipa Toolkit koji sadri informacije o okruenju u kome radi aplikacija, ukljuujui i veliinu ekrana u pikselima. Moemo koristiti metod getToolkit() kao pomo pri postavljanju veliine i pozicije prozora na ekranu: Dimension getScreenSize() primenjujemo na objekat tipa Toolkit Ne moemo 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!Objektno orijentisano programiranje 25.05.2010.

25

Primer TestWindow.java

Objekat tipa JFrame kreira se kao inicijalna vrednost static lanice klase, pa e automatski biti kreiran kada se klasa TestWindow uita. Argument konstruktora klase JFrame je string koji predstavlja naslov koji e biti prikazan u prozoru aplikacije. Inicijalno, prozor nije vidljiv. Metod setBounds() definie veliinu 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 poetak u gornjem levom uglu ekrana; pozitivni deo x-ose ide sa leva na desno, a pozitivni deo y-ose ide odozgo nanie.

26

Objektno orijentisano programiranje

25.05.2010.

Primer TestWindow.java - nastavak

27

Objektno orijentisano programiranje

25.05.2010.

Primer TestWindow.java - nastavak

Veliina i pozicija prozora aplikacije zavise od veliine ekrana i rezolucije. to je vea rezolucija, prozor je manji i blii je gornjem levom uglu ekrana, jer su pikseli na manjem rastojanju. setDefaultCloseOperation() ovaj metod za JFrame objekat odreuje ta se deava ako zatvorimo prozor bilo klikom na X ikonu ili izborom opcije Close iz padajueg menija koji se dobija desnim klikom na Java ikonu u naslovnoj liniji.

28

Objektno orijentisano programiranje

25.05.2010.

Primer TestWindow.java - nastavak

Postoje 4 mogunosti: EXIT_ON_CLOSE zatvara se prozor, oslobaaju se resursi prozora i njegovih komponenti i zavrava se aplikacija pozivom metoda System.exit(). Koristi se samo za aplikacije. DISPOSE_ON_CLOSE prozor i komponente se unitavaju, ali se aplikacija ne zavrava (ili se zavrava sa izvesnim zakanjenjem). Da li je aplikacija zavrena vidi se u konzolnom prozoru u naslovu ispred imena fajla stoji . DO_NOTHING_ON_CLOSE operacija zatvaranja nema nikakvog efekta HIDE_ON_CLOSE prozor se skriva pozivom metoda setVisible(false), aplikacija se ne zavrava. Ovo je podrazumevana akcija ako se ne pozove metod setDefaultCloseOperation() sa drugaijim argumentom. Kada je prozor sakriven, moe ponovo postati vidljiv pozivom setVisible(true)Objektno orijentisano programiranje 25.05.2010.

29

Primer TestWindow.java - nastavak

Ovaj prozor nije mnogo koristan moemo jedino da ga pomeramo, menjamo veliinu, minimiziramo/maksimiziramo i zatvorimo. Metode setVisible() i setBounds() su lanice klase JFrame nasleene 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.

30

Objektno orijentisano programiranje

25.05.2010.

java.awt.Point

Metode:

move(int, int) menjamo poziciju take translate(int, int) transliramo za pomeraj po x i y osi equals(Point) ispituje da li dve take imaju jednake koordinate setLocation(int, int) = move(int, int) getLocation() vraa kopiju tekueg Point objekta

31

Objektno orijentisano programiranje

25.05.2010.

java.awt.Rectangle

4 public lanice (x, y, width, height sve tipa int) Konstruktori: Rectangle() u taki (0,0) sa dimenzijama 0, 0 Rectangle(int x, int y, int width, int height) Rectangle(int width, int height) u taki (0,0) sa datom irinom i visinom Rectangle(Point p, Dimension d) Rectangle(Point p) dimenzije 0, 0 Rectangle(Dimension d) u taki (0,0) sa datim dimezijama predstavljenim objektom Dimesion Rectangle(Rectangle r) sa istom pozicijom i dimenzijama kao i dati pravougaonik r

32

Objektno orijentisano programiranje

25.05.2010.

java.awt.Rectangle

getLocation() vraa Point objekat setLocation(int, int) setLocation(Point p) translate(int, int) transalcija na isti nain kao kod take getSize() vraa Dimension objekat setSize(int, int) setSeze(Dimension d)

33

Objektno orijentisano programiranje

25.05.2010.

java.awt.Rectangle

Rectangle intersection(Rectangle r) vraa pravougaonik koji je presek dva pravougaonika. Ako se pravougaonici ne seku, vraa se pravougaonik na poziciji (0,0) sa irinom 0 i visinom 0. Rectangle union(Rectangle r) vraa najmanji pravougaonik koji obuhvata tekui pravougaonik i pravougaonik r. void add(Rectangle r) proiruje tekui pravougaonik kako bi mogao da obuhvati dati pravougaonik r void add(Point p) - proiruje tekui pravougaonik kako bi mogao da obuhvati datu taku p. Rezultat e biti najmanji pravougaonik koji obuhvata originalni pravougaonik i datu taku void add(int x, int y) druga varijanta prethodnog metodaObjektno orijentisano programiranje 25.05.2010.

34

java.awt.Rectangle

void grow(int h, int v) poveava tekui 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() vraa true ako su irina i visina 0, inae 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 sadri datu taku boolean contains(int x, int y) druga varijanta prethodnog metoda.

35

Objektno orijentisano programiranje

25.05.2010.

Vizuelne karakteristike komponenti

Crtanje na Component objektu vri se implementacijom paint() metoda. Metod paint() se automatski poziva kada treba da se iscrta komponenta. Potreba za iscrtavanjem komponente je vrlo esta program moe da zahteva da se ponovo iscrta povr koja sadri komponentu ili korisnik moe da promeni veliinu prozora koji sadri komponentu. Napomenimo da e komponenta sama po sebi biti iscrtana. Neophodno je da se predefinie metod paint() za bilo ta to je potrebno dodatno iscrtati.

36

Objektno orijentisano programiranje

25.05.2010.

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 povri koju zauzima Component objekat void setFont(Font a) postavlja font Component objekta Font getFont()

37

Objektno orijentisano programiranje

25.05.2010.

java.awt.Color

Boja se definie kao kombinacija tri osnovne boje: crvene, zelene i plave. To su tzv. RGB vrednosti za boje. Svaka osnovna boja moe 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 odgovarajuim RGB vrednostima:

BLACK RED GRAY

(0,0,0) (255,0,0) (128,128,128) ...

Primer: prozor.setBackground(Color.BLACK);

38

Objektno orijentisano programiranje

25.05.2010.

java.awt.Color

getRed(), getGreen(), getBlue() vraaju komponente boje getRGB() vraa int vrednost koja predstavlja kombinaciju boja equals() za poreenje boja na jednakost komponenti

39

Objektno orijentisano programiranje

25.05.2010.

java.awt.Cursor

Klasa Cursor definie static konstante koje odreuju standardne tipove kursora i navodimo ih kao argumente konstruktora. Cursor kursor = new Cursor(Cursor.TEXT_CURSOR); Alterantivno, moemo dobiti kursor nekog od predefinisanih tipova koristei statiki metod: Cursor kursor = Cursor.getPredifenedCursor(Cursor.TEXT_CURSOR); Ovo je posebno korisno kad ne elimo da pamtimo Cursor objekat, ve samo da ga prosledimo metodu, kao to je setCursor().

40

Objektno orijentisano programiranje

25.05.2010.

java.awt.Font

Klasa Font je dosta komplikovana, navodimo samo najbitnija svojstva. Klasa Font pravi razliku izmeu karaktera i glifa, tj. grafike reprezentacije karaktera. Razliiti fontovi definiu razliite glifove za jedan isti karakter. Font mojFont = new Font(Serif, Font.ITALIC, 12); /* prvi argument je ime fonta, drugi je stil fonta, a trei veliina fonta u pikselima */ Font mojFont = new Font(Serif, Font.ITALIC + Font.BOLD, 15); /* kombinacija stilova */ getStyle() vraa stil fonta getSize() vraa veliinu fonta isPlain(), isBold(), isItalic() ... testiranje pojedinanih stilova

41

Objektno orijentisano programiranje

25.05.2010.

Swing komponente

Swing komponente imaju JComponent klasu kao osnovnu, a ona nasleuje klasu Component (preko klase Container) dodajui sledee mogunosti:

Podrka pluggable look-and-feel za komponente mogunost promene izgleda komponenti koje se prikazuju Podrka tooltip-ova poruka koja opisuje svrhu komponente kada mi stoji nad njom Lako se nasleuju komponentne klase da bi se kreirale korisnike komponente ...

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

42

Objektno orijentisano programiranje

25.05.2010.

Dugmeta (JButton)

43

Objektno orijentisano programiranje

25.05.2010.

Dugmeta (JButton) - nastavak

JButton regulatno dugme, npr. OK/Cancel JToggleButton definie dugme sa dva stanja pritisnuto ili ne JCheckBox dugme sa checkbox-om sa leve strane JRadioButton operiu u grupi, tako da je samo jedno dugme pritisnuto u datom trenutku. Ovo grupisanje se postie dodavanjem JRadioButton objekta ButtonGroup objektu

44

Objektno orijentisano programiranje

25.05.2010.

Meniji (JMenuBar)

45

Objektno orijentisano programiranje

25.05.2010.

Meniji (JMenuBar)

JMenuBar klasa definie liniju menija koja se najee nalazi na vrhu prozora aplikacije. JMenu objekat predstavlja element na vrhu menija. Klikom na njega dobija se padajua (drop down) lista elemenata menija. Element menija definisani su klasom JMenuItem. JPopupMenu klasa definie kontekstni meni koji se najee koristi da se prikae pri desnom kliku na komponentu. JCheckBoxMenuItem je element menija sa checkbox-om. JRadioButtonMenuItem definie element menija koji je deo grupe gde samo jedan element moe da bude obeleen u datom trenutku. Grupa se kreira dodavanjem JRadioButtonMenuItem objekata ButtonGroup objektu.46 Objektno orijentisano programiranje 25.05.2010.

Tekst-komponente

47

Objektno orijentisano programiranje

25.05.2010.

Tekst-komponente

JLabel pasivna komponenta, ne moe se editovati, slui za oznaavanje drugih komponenti JTextField kao JLabel samo se moe editovati. Predstavlja jednu liniju teksta. JFormattedTextField to je JTextField komponenta koja ima kontrolu formata podataka koji se unose/prikazuju. JTextArea komponenta koja dozvoljava unos vielinijskog teksta; ne podrava direktno skrolovanje; moe se postii stavljanjem komponente JTextArea u kontejner JScrollPane JEditorPane i JTextPane podravaju sofisticiranije editovanje (HTML, slike itd).

48

Objektno orijentisano programiranje

25.05.2010.

Kontejneri

Komponente unutar kontejnera se prikazuju unutar povri koju zauzima kontejner na ekranu. Reeno je ve da su sve Swing komponente kontejneri. Takoe, kontejner kontrolie kako su rasporeene njegove komponente pomou objekta koji nazivamo Layout Manager. Klasa Container je apstraktna klasa, pa se ne mogu kreirati objekti ove klase. Napomena! Kontejner ne moe da sadri objekat klase Window, niti bilo koje druge klase izvedene iz nje. Objekat bilo koje klase koja je izedena iz klase Component moe biti dodat kontejneru.

49

Objektno orijentisano programiranje

25.05.2010.

Kontejneri

Bitnije metode klase Container: int getComponentCount() vraa broj komponenti u kontejneru Component getComponent(int index) vraa komponentu koja se identifikuje datim indeksom. Radi se o indeksu niza, pa mora biti u opsegu [0, count-1]. Component[] getComponents() vraa niz komponenti iz kontejnera

50

Objektno orijentisano programiranje

25.05.2010.

Dodavanje komponente kontejneru

Component add(Component c) dodaje komponentu c na kraj liste komponenti sauvane u kontejneru; vraa se c Component add(Component c, int index) komponenta se smeta na datu poziciju. Ako je index -1 komponenta se dodaje na kraj liste; vraa 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 moe biti u samo jednom kontejneru. Dodavanje komponente koja je ve deo drugog kontejnera ima za posledicu njeno uklanjanje iz tog kontejnera.

51

Objektno orijentisano programiranje

25.05.2010.

Layout Manager

Svi kontejneri imaju podrazumevani layout manager, ali se moe izabrati drugaiji kada je potrebno. Mnoge klase koje definiu layout manager su u paketima java.awt i javax.swing. Layout manager za kontejner odreuje poziciju i veliinu svih komponenti u njemu, tako da generalno ne treba menjati veliinu i poziciju komponenti o tome se stara layout manager. Klase koje definuu layout manager-e imlementiraju intefrejs LayoutManager, tako da se promenljiva tipa LayoutManager moe koristiti kao referenca na bilo koji tip layout manager-a.Objektno orijentisano programiranje 25.05.2010.

52

Layout Manager

53

FlowLayout dodaju se komponente u sukcesivnim redovima kad je red popunjen, poinje se sa novim. Najee se koristi za ureivanje 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 za JFrame, JDialog, JApplet. CardLayout komponente se rasporeuju jedna iznad druge, kao pil karata. Jedino je komponenta na vrhu vidljiva u bilo kom trenutku. GridLayout komponente se rasporeuju u pravougaonu mreu, pri emu korisnik zadaje broj redova i kolona. GridBagLayout pravougaona mrea, pri emu irina redova i kolona moe da varira. Komplikovaniji od pomenutih, obezbeuje dosta fleksibilnosti. Navede klase nalaze se u paketu java.awt.Objektno orijentisano programiranje 25.05.2010.

FlowLayout manager

FlowLayout manager smeta komponente u red, a kada se red napuni, automatski poinje smetanje u novi red. Podrazumevana pozicija reda sa komponentama je centar kontejnera, a podrazumevana orijentacija je s leva na desno. Postoji 5 mogunosti koje se mogu izabrati za poziciju reda LEFT, RIGHT, CENTER, LEADING, TRAILING. LEADING i TRAILING oznaavaju ivicu kontejnera prema kojoj red treba da bude poravnat. O kojoj ivici se radi zavisi od orijentacije. Podrazumevano su komponente u redu razdvojene rupom veliine 5 jedinica, a sukcesivni redovi su na istom rastojanju.

54

Objektno orijentisano programiranje

25.05.2010.

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 izmeu komponenti i redova nee biti vidljiva ako se to radi posle dodavanja komponenti.

55

Objektno orijentisano programiranje

25.05.2010.

BorderLayout

Moe da smesti najvie pet komponenti u kontejner. Samo jedna komponenta moe 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 proiriti na punu visinu kontejnera. Podrazumevano su hgap i vgap postavljeni na 0. setHgap(int), setVgap(int) getHgap(), getVgap()

56

Objektno orijentisano programiranje

25.05.2010.

GridLayout manager

GridLayout manager rasporeuje komponente kontejnera u pravougaonu mreu. GridLayout() komponente su ureene u jedan red (za svaku komponentu po jedna kolona), bez razmaka izmeu komponenti GridLayout(int rows, int cols) zadaje se broj redova i kolona u mrei; nema razmaka izmeu komponenti GridLayout(int rows, int cols, int hgap, ing vgap) zadaje se broj redova i kolona u mrei; zadaju se i horizontalno i vertikalno rastojanje meu komponentama

57

Objektno orijentisano programiranje

25.05.2010.

GridLayout manager - nastavak

Moe 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. Slino je i za kolone. Ako se doda vie komponenti od onoga to mrea moe da prihvati, broj kolona e se uveati automatski.

58

Objektno orijentisano programiranje

25.05.2010.

Card Layout Manager

CardLayout manager tretira komponente u kontejneru kao karte, pri emu je samo jedna karta vidljiva u datom trenutku. Kontejner se ponaa 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)

59

Objektno orijentisano programiranje

25.05.2010.

CardLayout manager

void next(Container parent) selektuje narednu komponentu u kontejneru parent. Ako je tekua vidljiva komponenta poslednja, selektuje se prva komponenta void previous(Container parent) selektuje prethodnu komponentu u kontejneru parent. Ako je tekua 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 pridrueno ime name. Ovo mora biti jedan od String objekata navedenih pri pozivu add() metoda radi identifikacije komponente. Ovaj objekat se moe upotrebiti za pristup bilo kojoj komponenti.

60

Objektno orijentisano programiranje

25.05.2010.