JFC (Java Foundation Classes)

 

U Javi 1.0, korisnički interfejs je kreiran pomoću klasa paketa java.awt (Abstract Window Toolkit). Ovaj paket, kao što ste videli u prethodnim lekcijama, obezbeđuje skup osnovnih komponenti grafičkog korisničkog interfejsa (dugmad, labele, tekst polja, liste, prozore, menije i sl.), kao i klase menadžera rasporeda i događaja.

 

Komponente paketa java.awt se nazivaju teškim (heavyweight), tj. svaka je sadržana u svom prozoru koji obezbeđuje operativni sistem platforme na kojoj se izvršavaju. Za razliku od njih, komponente koje se nazivaju lake (lightweight) su praktično iscrtane na nekoj od teških komponenti i ne oslanjaju se ni na jednu klasu operativnog sistema na kome se izvršavaju. Još jedna razlika između lakih i teških komponenti jeste u tome što lake komponente mogu da imaju transparentne piksele, dok teške komponente ne mogu. Zbog toga, lake komponente mogu da budu različitih oblika, dok teške mogu samo da budu pravougaone.

 

JFC je nastao kao proširenje AWT-a, a ne kao njegova zamena. Sve JFC komponente nasleđuju klasu Container paketa java.awt. Takođe, klase prostornih menadžera i događaja se i dalje kombinuju sa komponentama JFC.

JFC se sastoji od pet glavnih paketa:

 

-         Swing

-         Pluggable Look-and-Feel (PL&F) – prilagodljiv izgled komponenti. Ove klase omogućuju korisniku da promeni izgled komponenti unutar aplikacije, bez njenog restartovanja

-         Drag and Drop – klase koje obezbeđuju transfer podataka između Jave i ostalih aplikacija

-         Accessibility – klase koje olakšavaju rad korisnicima sa posebnim potrebama

-         2D – dvodimenziono grafičko renderovanje, klase za iscrtavanje kompleksnih oblika, transformacije koordinata i dr.

 

 

Swing

 

Swing komponente omogućavaju razvoj efikasnog grafičkog interfejsa. One predstavljaju kolekciju lakih vizuelnih komponenti. One sadrže komponente koje zamenjuju one iz awt paketa, ali i kompleksne komponente kao što su drveta i tabele. Sve one nasleđuju osnovnu klasu JComponent i sve počinju slovom "J".

Swing komponente imaju prilagodljiv izgled, tako da će aplikacija koja ih koristi na različitim platformama izgledati kao da je originalno pisana za tu platformu. Takođe, ove komponente se ponašaju isto na bilo kojm operativnom sistemu.

Swing komponente su potpuno napisane u Javi , i to tako da mogu sa se kombinuju sa običnim awt komponentama. Međutim, kombinovanje ove dve vrste komponenti treba izbegavati.

Swing komponente su saglasne sa JavaBean tehnologijom, o kojoj će biti više reči kasnije.

 

Swing komponente su podeljene u više od deset paketa:

-         javax.swing – sadrži većinu kontrola grafičkog interfejsa, sem JTableHeader i JTextComponent. Takođe, u ovom paketu se nalaze i kontrole koje omogućavaju korisniku neki izbor, na primer kontola za izbor boje.

-         javax.swing.plaf.basic – sadrži klase koje definišu podrazumevani izgled (look-and-feel) swing komponenti

-         javax.swing.border – sadrži Border interfejs i devet klasa koje ga implementiraju. Ove klase se obično ne koriste direktno, već preko klase BorderFactory

-         javax.swing.event – sadrži klase koje odgovaraju događajima i odgovarajućim osluškivačima specifičnim za swing komponente

-         javax.swing.plaf – ovde se nalaze podpaketi i klase koje obezbeđuju različite izglede swing komponenti (Windows izgled, Metal izgled, Macintosh izgled i dr.)

-         javax.swing.table – sadrži klase i interfejse specifične za Swing tabelu, JTable. Tu se, između ostalih, nalaze TableColumnModel i TableModel interfejsi.

-         javax.swing.text – sadrži mnoštvo klasa i interfejsa za rad sa kontrolama koje se koriste za manipulaciju tekstom

-         javax.swing.tree – sadrži klase koje se koriste za rad sa kontrolom JTree

-         javax.swing.undo – sadrži klase koje omogućavaju da se u aplikaciji koristi undo komanda

 

 

MVC arhitektura

 

U aplikacijama koje smo do sada kreirali, podaci koje je korisnik unosio su bili preuzimani od strane neke kontrole i prosleđivani aplikaciji. Važi i obrnuto, neki podaci kreirani unutar aplikacije su prosleđivani preko odgovarajućih kontrola do korisnika. Aplikacija je morala da vodi računa o tome da svi ti podaci budu sinhronizovani, tj. da ukoliko dođe do promene nekog podatka unutar apliakcije, on bude adekvatno prikazan unutar kontrole na ekranu.

 

Model View Controller (MVC) omogućava potpuno drugačiji pristup. Primenom ovog modela, podaci se nalaze u odgovarajućem modelu, različiti izgledi podataka (views) se koriste za prikazivanje tih podataka korisniku, a pomoću kontrola vrši se interakcija sa podacima u modelu.

Ova arhitektura se sastoji od tri vrste klasa:

model – sastoji se od klasa unutar aplikacije koje čuvaju podatke

view – grafička prezentacija aplikacije

controller – klase koje definišu kako se korisnikova interakcija obrađuje

 

Unutar ove arhitekture, objekti se registruju kao zainteresovani za neke podatke. Pri tom je moguće da se nekoliko različitih objekata registruje za iste podatke. Kada model promeni svoje stanje (promene se podaci), on šalje poruku svim zainteresovanim objektima o toj promeni.

 

Na primer, da biste popunili listu predstvaljenu komponentom List unutar AWT paketa, koristićete kod sličan sledećem:

 

          String[] dani = { "Ponedeljak", "Utorak", "Sreda", "Cetvrtak", "Petak"};

          List lista = new List();

          for (int i = 0; i < dani.length; i++) list.add(dani(i));

 

Kao što vidite, aplikacija čuva podatke koji će biti prezentovani korisniku preko liste. Sama lista takođe čuva ove podatke, pa tako imate dve kopije istih podataka. Ukoliko se promeni vrednost samog niza dani, komponenta lista neće reagovati na tu promenu, ukoliko ne obezbedite kod koji će prilagoditi podatke u listi sa onima u nizu dani.

 

Kada koristite JFC, klasa koja će sadržati podatke treba da implementira ListModel interfejs. Tada bi prethodni kod izgledao ovako:

 
          class TestListModel extends AbstractListModel { 
                    String[]dani = { "Ponedeljak", "Utorak", "Sreda", 
                             "Cetvrtak", "Petak"};    
    
                    public int getSize() { 
                             return(dani.length);
                    } 
 
                    public Object getElementAt(int index) { 
                             return(dani[index]);
                    } 
          } 

 

          // Prikazivanje podataka u listi
          ListModel model = new TestListModel();
          JList lista = new JList(model);
 
Kreiranje cele klase za pet podataka tipa String nije najbolje rešenje kad je u pitanju efikasnost, 
međutim kod velikog broja podataka korišćenje MVC arhitekture dovodi do velikog povećanja
performansi aplikacije.
 
MVC arhitektura je osnova na kojoj su izgrađene Swing komponente. Upravo ona omogućuje 
prilagodljiv izgled komponenti (PL&F).
 
 
Kontejneri u Swing paketu
 
JFrame i JContentPane
Klasa JFrame predstavlja glavni prozor aplikacije i ona direktno nasleđuje klasu java.awt.Frame. 
Ovo je "teška" kontrola. Zbog toga je u Swing-u uvedeno tzv. okno sadržaja (content pane) klase
JContentPane koje zauzima središnji deo prozora i koje je posrednik između lakih komponenti i
samog prozora. Tako se kontrole dodaju u ovo okno umesto u sam prozor. Na primer:
 
          JFrame prozor = new JFrame();
          Container oknoSadrzaja = prozor.getContentPane();
          oknoSadrzaja.setLayout(neki raspored);
          oknoSadrzaja.add(neka komponenta);
 
Glass pane
Glass pane je okno unutar prozora koje se koristi za crtanje po površini koja već sadrži neke 
komponente. Takođe, ovo okno se koristi da predusredi događaje miša, obzirom da se nalazi na
površini ostalih kontejnera unutar prozora. Ovo okno postaje vidljivo pozivom metoda
setVisible(true).
Referenca do ovog objekta se kreira pozivom metoda getGlassPane() kontejnera
koji ga sadrži.
 
Slojevito okno
Slojevito okno (layered pane) je kontejner koji ima nekoliko slojeva koji mogu biti korišćeni za 
dodavanje komponenti. Na taj način se omogućava tzv. Z – raspored. Svakom od slojeva je
pridružen broj tipa int, koji određuje dubinu na kojoj se sloj nalazi. Ovom oknu odgovara klasa
JLayeredPane
. U okviru ove klase definisano je nekoliko konstanti koje odgovaraju određenim
slojevima.
 
Unutrašnji prozor
Unutrašnji prozor je sličan običnom prozoru, s tom razlikom što spada u lake kontrole. Na primer, 
kada u nekom procesoru teksta otvorite novi dokument, on se otvara u unutrašnjem prozoru
unutar glavnog prozora aplikacije. Ovi prozori su predstavljeni klasom JInternalFrame.
 
Desktop okna
Ova okna se koriste za kreiranje virtuelne radne površine unutar Java aplikacije. Njihova glavna 
uloga je da organizuju unutrašnje prozore. Odgovara im klasa JDesktopPane.
 
Paneli
Paneli su u swing-u predstavljeni klasom JPanel. Predstavljaju kontejnere koji se koriste za 
grupisanje ostalih komponenti unutar prozora, slično kao i klasa java.awt.Panel. Međutim, paneli u
swing
-u podr
žavaju tzv. dvostruko baferovanje, tehniku koja sprečava treperenje animacija.
Moguće je kreirati panel sa ili bez dvostrukog baferovanja.
 
 
Ostale komponente paketa Swing
 
Osnovna klasa paketa javax.swing je JComponent klasa. Ona je apstraktna i nasleđuje klasu 
Container
paketa java.awt. Sve ostale Swing komponente nasleđuju klasu JComponent. Neke od
njih odgovaraju komponentama AWT paketa, međutim swing komponente imaju veću
funkcionalnost i pružaju više mogućnosti što se tiče dizajna. Ovde su navedene neke od Swing
komponenti:
 
JApplet – predstavlja swing aplete i direktno nasleđuje klasu java.awt.applet.
Swing aplet može da poseduje sopstvenu liniju menija. Komponente mogu da se postavljaju u 
slojevima, tako da preklapaju jedna drugu. Takođe, moguće je crtanje preko komponenti.
JButton – predstavlja swing dugme koje može da sadrži ikonu i tekst na bilo kojoj poziciji
JCheckBoxcheck polja paketa swing, može pored teksta da sadrži i ikonu
JColorChooser – predstavlja dijalog polje koje omogućava korisniku da odabere boju
JComboBox – poboljšanje AWT komponente Choice
JDesktopPane – tip kontejnera koji se pridružuje unutrašnjem okviru
JDialogSwing verzija dijalog prozora. Zahteva da sve komponente budu dodate u prozor
JFileChooser – dijalog prozor za otvaranje i snimanje fajlova
JFrame – klasa koja predstavlja swing prozor koji je mnogo sofisticiraniji od awt prozora. 
Komponente mogu da se dodaju u slojevima. Takođe, moguće je crtanje preko komponenti
JInternalFrame – unutrašnji okvir koji je pridruđen glavnom prozoru aplikacije
JLabel – omogućavaju prikazivanje teksta i ikone na odgovarajućoj poziciji
JLayeredPane – odgovaraju slojevima unutar komponente
JList – prikazuju listu podataka pomoću MVC arhitekture
JMenuswing meniji
JMenuBar – linija menija
JMenuItem – stavke u meniju. Nasleđuju klasu AbstractButton. Pored teksta, mogu da sadrže 
i ikone.
JOptionPane – dijalog prozori koji prikazuju neku informaciju korisniku ili uzimaju neki podatak od 
korisnika
JPanelswing paneli koji imaju mogućnost duplog baferovanja
JPasswordField – ova klasa predstavlja tekstualno polje koje umesto teksta koji se unosi prikazuje 
neki karakter
JPopupMenupop-up meniji
JProgressBar – trake progresa koje indikuju stanje neke operacije
JRadioButton – radio polja
JRadioButtonMenuItem – radio polja unutar menija
JScrollBar – klizači
JScrollPane – polja koja služe kao kontejneri, a već imaju u sebi ugrađene klizače
JSlider – klizači pomoću kojih možete da odaberete neku vrednost iz određenog intervala
JSplitPane – podeljeno polje
JTabbedPane – polja koja mogu da sadrže komponente, a koja preklapaju jedno drugo. Samo 
jedno polje može biti prikazano u jednom trenutku
JTable – predstavlja swing tabele i koristi MVC arhitekturu
JTextArea – teskt polje koje dozvoljava unos više linija običnog teksta
JTextPane – polje koje se koristi za unos teksta i grafike
JToggleButton – dugmad koja mogu da budu uključena ili isključena
JToolBar – klasa koja odgovara paleti sa alatima
JToolTip – objekat koji može da prikaže tekst da bi opisao namenu neke komponente
JTree – kontrola koja se koristi za prikazivanje hijerarhije nekih podataka
 
 
BoxLayout prostorni menadžer
 
Swing komponente je moguće rasporediti unutar kontejnera pomoću bilo kog od već pomenutih 
menadžera prostora unutar AWT paketa. Međutim, swing donosi i jedan nov menadžer koji
dozvoljava kreiranje veoma sofisticiranog rasporeda bez upotrebe GridBagLayout menadžera, koji
je veoma komplikovan za upotrebu. Ovaj menadžer je prestavljen klasom BoxLayout.
 
Prilikom koriščenja ovog rasporeda, komponente se raspoređuju ili horizontalno ili vertikalno. U 
zavisnosti od toga da li se koristi horizonatlno ili vertikalno rapoređivanje, jedna od osa će biti
primarna. Prilikom dodavanje komponente vodi se računa o njenoj željenoj veličini, pa je tako
moguće da kompononete zauzmu različit prostor, što na primer nije bilo moguće kod Grid
rasporeda.
 
 
Konstruktor ove klase je
 
          public BoxLayout(Container target, int axis)
 
Argument target je kontejner koji koristi ovaj raspored. Argument axis određuje pravac 
raspoređivanja i može da ima jednu od vrednosti X_AXIS ili Y_AXIS.
 
Ovaj raspored se koristi u kombinaciji sa klasom Box, koja predstavlja laki kontejner koji jedini 
može da koristi BoxLayout raspored. Konstruktor ove klase je
 
          public Box(int axis)
 
pri čemu argument axis može da ima sledeće vrednosti: BoxLayout.X_AXIS ili BoxLayout.Y_AXIS. 
Ova klasa obezbeđuje metode kao što su createHorizontalBox() i createVerticalBox(), koji ne
zahtevaju nikakve argumente za kreiranje horizontalnih ili vertikalnih kontejnera.
 
 
Pluggable Look-and-Feel
 
PL&F pruža mogućnost korisniku da promeni izgled aplikacije, bez potrebe za njenim restartovanjem, 
ili da sam program prepozna platformu na kojoj se izvršava i prilagodi izgled aplikacije toj platformi.
Ovo je od velikog značaja, kada se ima na umu da je Java namenjena za korišćenje na različitim
sistemima. PL&F je direktna posledica MVC arhitekture.
 
PL&F API u Swing-u podržavaju sledeće izglede:
 
-         cross-platform ili default look-and-feel – Ponekad se naziva i Java look-and-feel. Ovaj 
PL&F zadržava isti izgled aplikacije (tzv. Java izgled) bez obzira na platformu na kojoj
se izvršava
-         system look-and-feel – Ovo je izgled različitih operativnih sistema i može biti podešen 
na Motif, Windows ili Macintosh.
-         dynamically changing look-and-feel – omogućava promenu izgleda u vreme izvršavanja 
aplikacije
 
Biblioteke koje podržavaju ove izglede se nalaze u paketima
 
          javax.swing.plaf.metal.*
          com.sun.java.swing.plaf.motif.*
          com.sun.java.swing.plaf.windows.*
 
Da biste kontrolisali izgled aplikacije neophodno je da koristite UIManager klasu. Ona sadrži 
metode kojima se dodeljuje odgovarajući izgled aplikaciji. Na primer,
 
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
 
Unutar ove naredbe metod getSystemLookAndFeelClassName() klase UIManager preuzima ime 
klase izgleda koji se koristi na celom sistemu, a zatim metod setLookAndFeel() dodeljuje ovaj
izgled aplikaciji.
 
Dodaj komentar Sviđa mi se - (1) Ne sviđa mi se - (0)    

  • Swing programiranje 1
  • Swing programiranje 2
  • Swing programiranje 3