Napredne Web tehnologije i servisi Napredne Web tehnologije i servisi
Dr.sc. Dragutin Kermek
Sveuilite u Zagrebu Fakultet organizacije i informatike Pavlinska 2, Varadin 42000 dkermek@foi.hr 2. dio Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 2 Napredne Web tehnologije i servisi - FOI Java paket. Kreiranje biblioteke klasa. Nasljeivanje svojstava u paketu. Ugraene klase i suelja. Kolekcijski okvir. Grafiko korisniko suelje. Upravljanje dogaajima. Osnove programskog jezika Java Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 3 Napredne Web tehnologije i servisi - FOI Podruja Java okoline Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 4 Napredne Web tehnologije i servisi - FOI Java paket package paket je skup datoteka u bytecode formatu (.class) izmeu kojih postoji kohezija logika povezanost Paketi mogu biti strukturirani kao direktoriji tako da svaki paket sadrava srodne klase, a dublja razrada provodi se u paketima nie razine. Npr. java applet awt ... Razine se odvajaju tokom . umjesto / ili \, npr. java.awt.image Izvorni kod svake klase paketa treba biti pohranjen kao zasebna .java datoteka. Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 5 Napredne Web tehnologije i servisi - FOI Definiranje Java paketa package NWTiS; public abstract class Grada { private static int sljedeci_id = 0; int id; String naziv; String izdavac; protected Grada(String p_naziv, String p_izdavac) { id = sljedeci_id++; naziv = p_naziv; izdavac = p_izdavac; } public int sljedeci_id() { return sljedeci_id; } definiranje naziva paketa Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 6 Napredne Web tehnologije i servisi - FOI Definiranje Java paketa nastavak protected String print() { String m_s = new Integer(id).toString() + " " + naziv.toString() + " " + izdavac.toString(); return m_s; } } Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 7 Napredne Web tehnologije i servisi - FOI Ukljuivanje cijelog Java paketa import NWTiS.*; class Primjer12 { public static void main(String args[]) { Casopis ddj = new Casopis("Doctor Dobb's Journal", "CMP Media Inc. San Francisco, CA", 170, "1044-789X"); Casopis pp = new Casopis("Practical Photography", "EMAP Active Ltd", 150, "0032-6445"); Knjiga ec = new Knjiga("Beginning E-Commerce...", "Wrox Press Ltd", 777, "1-861003-98-6"); System.out.println(ddj.print()); System.out.println(pp.print()); System.out.println(ec.print()); System.out.println("Sljedeci ID: " + ddj.sljedeci_id()); System.out.println("Sljedeci ID: " + ec.sljedeci_id()); } } ukljuivanje cijelog paketa svih klasa Primjer12 Java paketi Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 8 Napredne Web tehnologije i servisi - FOI Ukljuivanje pojedine klase Java paketa class Primjer13 { public static void main(String args[]) { NWTiS.Casopis ddj = new NWTiS.Casopis("Doctor Dobb's Journal", "CMP Media Inc. San Francisco, CA", 170, "1044-789X"); NWTiS.Casopis pp = new NWTiS.Casopis("Practical Photography", "EMAP Active Ltd", 150, "0032-6445"); NWTiS.Knjiga ec = new NWTiS.Knjiga("Beginning E-Commerce...", "Wrox Press Ltd", 777, "1-861003-98-6"); System.out.println(ddj.print()); System.out.println(pp.print()); System.out.println(ec.print()); System.out.println("Sljedeci ID: " + ddj.sljedeci_id()); System.out.println("Sljedeci ID: " + ec.sljedeci_id()); } } Primjer13 Java paketi ukljuivanje pojedine klase iz paketa Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 9 Napredne Web tehnologije i servisi - FOI Kreiranje Java biblioteke Paket moe biti pohranjen kao jedna zajednika datoteka (slino kao .zip) s nastavkom .jar a mogue je i vie paketa zajedno pohraniti u jednu zajedniku datoteku jar cvf NWTiS.jar NWTiS\*.class added manifest adding: PzaWeb/Analogna.class(in = 729) (out= 414)(deflated 43%) adding: PzaWeb/Casopis.class(in = 717) (out= 384)(deflated 46%) adding: PzaWeb/Grada.class(in = 934) (out= 524)(deflated 43%) adding: PzaWeb/Knjiga.class(in = 715) (out= 385)(deflated 46%) java -classpath .;./NWTiS.jar;%CLASSPATH% Primjer14 0 Doctor Dobb's Journal CMP Media Inc. San Francisco, CA 170 1044-789X 1 Practical Photography EMAP Active Ltd 150 0032-6445 2 Beginning E-Commerce... Wrox Press Ltd 777 1-861003-98-6 Sljedeci ID: 3 Sljedeci ID: 3 kreiranje zajednikog paketa ukljuivanje vlastitog paketa klasa i ostalih paketa na putanji CLASSPATH Primjer14 Java biblioteka Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 10 Napredne Web tehnologije i servisi - FOI Kreiranje Java biblioteke # posebno aplikacija i jar # javac Primjer14.java java Primjer14 jar cvf NWTiS.jar NWTiS\*.class # pogledati NWTiS.jar i manifest Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 11 Napredne Web tehnologije i servisi - FOI Kreiranje Java biblioteke Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 12 Napredne Web tehnologije i servisi - FOI Kreiranje Java biblioteke # briemo bytecode datoteke iz paketa del NWTiS\*.class # provjera izvravanja java Primjer14 # izvravanje uz parametre java -classpath .;.\NWTiS.jar Primjer14 set CLASSPATH=. java -classpath %CLASSPATH%;.\NWTiS.jar Primjer14 set CLASSPATH=.\NWTiS.jar java Primjer14 set CLASSPATH=.;.\NWTiS.jar java Primjer14 CLASSPATH varijabla okoline u koju se postavlja lista direktorija na kojima se nalaze .class datoteke kao i lista .jar datoteka koje sadre razliite biblioteke. Kompilator i interpreter ju automatski koriste bez posebnog navoenja Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 13 Napredne Web tehnologije i servisi - FOI Kreiranje Java biblioteke # zajedno aplikacija i jar, razliiti poloaj datoteka izvornog i izvrnog koda # src - izvorni kod NWTiS classes - izvrni kod NWTiS dist - biblioteka, za distribuciju cd src javac -d ..\classes Primjer14.java java -classpath ..\classes Primjer14 jar cvf ..\dist\NWTiS.jar ..\classes\ java -classpath ..\dist\NWTiS.jar Primjer14 # pogledati NWTiS.jar zato ne radi Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 14 Napredne Web tehnologije i servisi - FOI Kreiranje Java biblioteke jar cvf ..\dist\NWTiS.jar -C ..\classes . # pogledati NWTiS.jar java -classpath ..\dist\NWTiS.jar Primjer14 Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 15 Napredne Web tehnologije i servisi - FOI Kreiranje izvrne Java biblioteke # zajedno aplikacija i jar, izvrni jar # # vlastiti manifest # # pogledati datoteku manifest Manifest-Version: 1.0 Created-By: NWTiS 12.02.2010 Main-Class: Primjer14 jar cvfm ..\dist\NWTiS_1.jar manifest -C ..\classes . # pogledati NWTiS_1.jar java -jar ..\dist\NWTiS_1.jar # stvoren je tzv. izvrni jar Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 16 Napredne Web tehnologije i servisi - FOI Nasljeivanje u Java paketu package NWTiS; public abstract class Grada { private static int sljedeci_id = 0; int id; String naziv; String izdavac; protected Grada(String p_naziv, String p_izdavac) { id = sljedeci_id++; naziv = p_naziv; izdavac = p_izdavac; } protected int sljedeci_id() { return sljedeci_id; } ... } zatiena metoda Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 17 Napredne Web tehnologije i servisi - FOI Nasljeivanje u Java paketu nastavak 1. import NWTiS.*; class Primjer15 { public static void main(String args[]) { Casopis ddj = new Casopis("Doctor Dobb's Journal", "CMP Media Inc. San Francisco, CA", 170, "1044-789X"); Casopis pp = new Casopis("Practical Photography", "EMAP Active Ltd", 150, "0032-6445"); Knjiga ec = new Knjiga("Beginning E-Commerce...", "Wrox Press Ltd", 777, "1-861003-98-6"); System.out.println(ddj.print()); System.out.println(pp.print()); System.out.println(ec.print()); System.out.println("Sljedeci ID: " + ddj.sljedeci_id()); System.out.println("Sljedeci ID: " + ec.sljedeci_id()); } } poziv zatiene metode u klasi Grada Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 18 Napredne Web tehnologije i servisi - FOI Nasljeivanje u Java paketu nastavak 2. javac Primjer15.java Primjer15.java:14: No method matching sljedeci_id() found in class NWTiS.Casopis. System.out.println("Sljedeci ID: " + ddj.sljedeci_id()); ^ Primjer15.java:15: No method matching sljedeci_id() found in class NWTiS.Knjiga. System.out.println("Sljedeci ID: " + ec.sljedeci_id()); ^ 2 errors Zatiene metode mogu se koristiti samo unutar klasa paketa. Primjer15 Java paketi Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 19 Napredne Web tehnologije i servisi - FOI Ugraene klase i suelja Snagu programskog jezika Java predstavljaju klase i suelja koja su ugraene u njezin sustav i ine temelj njezinog koritenja. To su: Object System Properties Enumeration Iterator Exception Error Runnable Thread Applet Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 20 Napredne Web tehnologije i servisi - FOI Klasa Object Klasa Object je ishodina klasa hijerarhijskog stabla klasa. Svi objekti implementiraju njene metode. java.lang.Object boolean equals(Object obj) Class getClass() void notify() void notifyAll() String toString() void wait() void wait(long timeout) Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 21 Napredne Web tehnologije i servisi - FOI Klasa System Klasa System je specifina klasa koja nema objekte nego postoje varijable i metode za klasu. Njena uloga je osiguravanje pristupa do standardnog ulaza, izlaza, pogreke, do vanjski definiranih osobina, vaeeg vremena i dr. java.lang.Object | +-java.lang.System static PrintStream err static InputStream in static PrintStream out static long currentTimeMillis() static Properties getProperties() static String getProperty(String key) Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 22 Napredne Web tehnologije i servisi - FOI Klasa Properties Klasa Properties predstavlja skup osobina (klju, vrijednost). Pogodna je za spremanje podataka na spremnik(?) kao i za itanje. java.lang.Object | +-java.util.Dictionary | +-java.util.Hashtable | +-java.util.Properties String getProperty(String key) Object setProperty(String key, String value) [Hashtable] public Enumeration keys() [Hashtable] boolean containsKey(Object key) [Hashtable] int size() Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 23 Napredne Web tehnologije i servisi - FOI Suelje Enumeration Suelje Enumeration moraju implementirati klase iji e objekti generirati seriju objekata, jedan po jedan, kojima se slijedno pristupa. java.util.Enumeration boolean hasMoreElements() Object nextElement() Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 24 Napredne Web tehnologije i servisi - FOI Ugraene klase i Enumeration nastavak 1. import java.util.*; class Primjer16 { public static void main(String[] args) { Properties props = System.getProperties(); Object obj; for (Enumeration e = props.keys(); e.hasMoreElements() ;) { obj = e.nextElement(); System.out.println(obj.toString() + " => " + props.get(obj).toString()); } } } Primjer16 Ugraene klase i Enumeration Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 25 Napredne Web tehnologije i servisi - FOI Ugraene klase i Enumeration nastavak 2. java Primjer16 java.runtime.name => Java(TM) 2 Runtime Environment, Standard Edition sun.boot.library.path => D:\Program Files\JavaSoft\JRE\1.3.1\bin java.vm.version => 1.3.1-b24 java.vm.vendor => Sun Microsystems Inc. java.vendor.url => http://java.sun.com/ path.separator => ; java.vm.name => Java HotSpot(TM) Client VM file.encoding.pkg => sun.io java.vm.specification.name => Java Virtual Machine Specification user.dir => E:\Nastava\NPzaWeb\Predavanja\Akad. godina 2001-2002\Java_Primjeri java.runtime.version => 1.3.1-b24 java.awt.graphicsenv => sun.awt.Win32GraphicsEnvironment os.arch => x86 java.io.tmpdir => D:\DOCUME~1\dkermek\LOCALS~1\Temp\ line.separator => java.vm.specification.vendor => Sun Microsystems Inc. java.awt.fonts => os.name => Windows 2000 java.library.path => D:\WINNT\system32;.;D:\WINNT\System32;D:\WINNT;... java.specification.name => Java Platform API Specification java.class.version => 47.0 os.version => 5.0 Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 26 Napredne Web tehnologije i servisi - FOI Ugraene klase i Enumeration nastavak 3. os.version => 5.0 user.home => D:\Documents and Settings\dkermek user.timezone => java.awt.printerjob => sun.awt.windows.WPrinterJob file.encoding => Cp1252 java.specification.version => 1.3 java.class.path => e:\JDBC;e:\JDBC\mysql.jar;e:\JDBC\ids.zip;e:\jdk1.3\lib;... user.name => dkermek java.vm.specification.version => 1.0 java.home => D:\Program Files\JavaSoft\JRE\1.3.1 user.language => en java.specification.vendor => Sun Microsystems Inc. awt.toolkit => sun.awt.windows.WToolkit java.vm.info => mixed mode java.version => 1.3.1 java.ext.dirs => D:\Program Files\JavaSoft\JRE\1.3.1\lib\ext sun.boot.class.path => D:\Program Files\JavaSoft\JRE\1.3.1\lib\rt.jar;... java.vendor => Sun Microsystems Inc. file.separator => \ java.vendor.url.bug => http://java.sun.com/cgi-bin/bugreport.cgi sun.io.unicode.encoding => UnicodeLittle sun.cpu.endian => little user.region => US sun.cpu.isalist => pentium i486 i386 Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 27 Napredne Web tehnologije i servisi - FOI Suelje Iterator Suelje Iterator moraju implementirati klase iji e objekti generirati seriju objekata, jedan po jedan, kojima se slijedno pristupa. Slino kao Enumeration s time da omoguava brisanje posljednje vraenog elementa java.util.Iterator boolean hasNext() Object next() void remove() Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 28 Napredne Web tehnologije i servisi - FOI Ugraene klase i Iterator import java.util.*; class Primjer16_1 { public static void main(String[] args) { Properties props = System.getProperties(); Set elems = props.keySet(); Object obj; for (Iterator i = elems.iterator(); i.hasNext() ;) { obj = i.next(); System.out.println(elems.size() + " : " + obj.toString() + " => " + props.get(obj).toString()); } } Primjer16_1 Ugraene klase i Iterator Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 29 Napredne Web tehnologije i servisi - FOI Ugraene klase i Iterator uz brisanje import java.util.*; class Primjer16_2 { public static void main(String[] args) { Properties props = System.getProperties(); Set elems = props.keySet(); Object obj; for (Iterator i = elems.iterator(); i.hasNext() ;) { obj = i.next(); i.remove(); System.out.println(elems.size() + " : " + obj.toString() + " => " + props.get(obj).toString()); } } } Primjer16_2 Ugraene klase i Iterator eli dohvatiti obrisani element Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 30 Napredne Web tehnologije i servisi - FOI Ugraene klase i Iterator uz brisanje import java.util.*; class Primjer16_3 { public static void main(String[] args) { Properties props = System.getProperties(); Set elems = props.keySet(); Object obj1, obj2; for (Iterator i = elems.iterator(); i.hasNext() ;) { obj1 = i.next(); obj2 = props.get(obj1); i.remove(); System.out.println(elems.size() + " : " + obj1.toString() + " => " + obj2.toString()); } } } Primjer16_3 Ugraene klase i Iterator Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 31 Napredne Web tehnologije i servisi - FOI Kolekcije / kontejneri Kolekcija/kontejner je objekt koji grupira vie elemenata u zajedniku cjelinu. Slui za pohranjivanje, pretraivanje i manipuliranje podacima kao i za prijenos podataka iz jedne metode u drugu. Kolekcije tipino predstavljaju podatkovne jedinke koje formiraju prirodnu grupu kao npr. skup slova, telefonski imenik i sl. Ranije verzije od 1.5 ukljuile su kolekcije: Vector Hashtable polje. Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 32 Napredne Web tehnologije i servisi - FOI Kolekcijski okvir Kolekcijski okvir je unificirana arhitektura za predstavljenje i manipuliranje kolekcijama. Svi kolekcijski okviri sadre 3 elementa: 1. suelja apstraktni tipovi podataka predstavljaju kolekcije. Suelja omoguavaju kolekcijama da budu manipulirane neovisno o detaljima njihove reprezentacije 2. implementacije - konkretne implementacije suelja kolekcija. To su ponovno koritene strukture podataka. 3. algoritme - metode koje provode korisne obrade, kao sortiranje, pretraivanje, na objektima koji implementiraju suelje kolekcije. Za te algoritme kae se da su polimorfni jer ista metoda moe koristiti mnogo razliitih implementacija suelja pripadajue kolekcija. Agoritmi su ponovno koritene funkcionalnosti Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 33 Napredne Web tehnologije i servisi - FOI Kolekcijska suelja Osnovo suelje: Collection. Njegova proirenja: Set List SortedSet Queue BlockingQueue. Ostala suelja ne proiruju Collection ve predstavljaju povezivanje kljua i vrijednosti: Map SortedMap ConcurrentMap. Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 34 Napredne Web tehnologije i servisi - FOI Kolekcijske implementacije Implementacije Hash Table Resizable Array Balanced Tree Linked List Hash Table + Linked List Suelja Set HashSet TreeSet LinkedHashSet List ArrayList LinkedList Map HashMap TreeMap LinkedHashMap Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 35 Napredne Web tehnologije i servisi - FOI Ugraene klase i generiki pristup import java.util.*; class Primjer16_4 { public static void main(String[] args) { Properties props = System.getProperties(); Set<Object> elems = props.keySet(); Object obj; for (Iterator<Object> i = elems.iterator(); i.hasNext();) { obj = i.next(); System.out.println(elems.size() + " : " + obj.toString() + " => " + props.get(obj).toString()); } } } Primjer16_4 Ugraene klase, generiki pristup i Iterator Tek od Java 2 SE 5 1.5 Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 36 Napredne Web tehnologije i servisi - FOI Ugraene klase i generiki pristup import java.util.*; class Primjer16_5 { public static void main(String[] args) { Properties props = System.getProperties(); Set<Object> elems = props.keySet(); for (Object obj : elems) { System.out.println(obj.toString() + " => " + props.get(obj).toString()); } } } Primjer16_5 Ugraene klase i generiki pristup Tek od Java 2 SE 5 1.5 tzv. for-each petlja posebno korisna kod kolekcija Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 37 Napredne Web tehnologije i servisi - FOI Klasa Applet Klasa Applet je mali program koji se ne moe sam izvravati nego se izvrava unutar druge aplikacije (preglednik) ili posebnog programa iz JDK za izvravanje appleta (appletviwer). java.lang.Object | +-java.awt.Component | +-java.awt.Container | +-java.awt.Panel | +-java.applet.Applet void destroy() AppletContext getAppletContext() URL getCodeBase() URL getDocumentBase() String getParameter(String name) Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 38 Napredne Web tehnologije i servisi - FOI Klasa Applet nastavak 1. void init() void start() void stop() void play(URL url) void resize(int width, int height) [Component] Color getBackground() [Component] Cursor getCursor() [Component] Font getFont() [Component] Color getForeground() [Component] void paint(Graphics g) [Component] void repaint() [Component] void setBackground(Color c) [Component] void setCursor(Cursor cursor) [Component] void setFont(Font f) [Component] void setForeground(Color c) Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 39 Napredne Web tehnologije i servisi - FOI Applet Applet mala aplikacija, je program koji se izvrava unutar preglednika, a odreen je oznakom <applet code="nazivappleta" width=x height=y></applet> Ponaanje appleta definirano je klasom Applet. Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 40 Napredne Web tehnologije i servisi - FOI Applet Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 41 Napredne Web tehnologije i servisi - FOI Applet nastavak 1. import java.applet.Applet; import java.awt.*; public class Primjer22 extends Applet { public void paint(Graphics g) { g.drawString("Prvi applet", 50, 50); } } Primjer22 Prvi applet u pregledniku java Primjer22 appletviewer Primjer22.html Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 42 Napredne Web tehnologije i servisi - FOI Applet nastavak 2. import java.applet.Applet; import java.awt.Graphics; import java.awt.Color; public class Primjer23 extends Applet{ String text = "Ovo je jednostavan applet"; public void init() { setBackground(Color.cyan); } public void start() { System.out.println("krecem..."); setBackground(Color.blue); } public void stop() { System.out.println("zaustavljam..."); } public void destroy() { System.out.println("priprema za praznjenje..."); } Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 43 Napredne Web tehnologije i servisi - FOI Applet nastavak 3. public void paint(Graphics g){ System.out.println("Paint"); g.setColor(Color.blue); g.drawRect(0, 0, getSize().width -1, getSize().height -1); g.setColor(Color.red); g.drawString(text, 15, 25); } } System.out ispisuje poruke u Java Console. Primjer23 Drugi applet (izvravanje) Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 44 Napredne Web tehnologije i servisi - FOI JDK primjeri Appleta Primjeri iz JDK: http://java.sun.com/j2se/1.3/docs/relnotes/demos.html Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 45 Napredne Web tehnologije i servisi - FOI Grafiko korisniko suelje Aplikacije s grafikim korisnikim sueljem koriste se za razne poslovne primjene (banke, osiguravajue kue, ISVU, ...) u kojima je potrebno masovno unositi podatke za sloene poslovne sustave. Takoer se koristi za razne simulacije u kojima je vana parametrizacija rada uz grafiki prikaz podataka (2D, 3D i sl). Izvorno je kreiran Abstract Window Toolkit (AWT) . Posebno je dodan Swing kao proirenje osnovnog skupa klasa. To je Model- View-Controle (MVC) okvir za Java GUI.. Primjeri za Swing: {JDK}/demo/jfc/SwingSet2/SwingSet2.html (ovdje je veza na moju instalaciju) http://download.java.net/javadesktop/swingset3/SwingSet3.jnlp IBM razvio Standard Widget Toolkit (SWT), koji je vie usmjeren koritenju platformskih osobina i koji se koristi kod Eclipse. Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 46 Napredne Web tehnologije i servisi - FOI Grafiko korisniko suelje Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 47 Napredne Web tehnologije i servisi - FOI Upravljanje dogaajima Aplikacijski kostur-okvir (Application framework) sadri klase koje upravljaju radom aplikacije odnosno appleta. Kod klase Applet pozivaju se izmeu ostalih metode: -init() -start() -stop() -destroy() Kod aplikacije poziva se metoda: -main() Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 48 Napredne Web tehnologije i servisi - FOI Upravljanje dogaajima u korisnikom suelju U grafikom korisnikom suelju (GUI) susreu se objekti razliitih klasa (Label, TextField, Button, ...) koji u svojem koritenju mogu biti podvrgnuti odreenim aktivnostima koje generiraju pripadajue dogaaje (pritisak tipke enter, pritisak tipke na miu, prijelaz na objekt i silazak s njega, dobivanje i gubljenje fokusa i sl.). Objekti trebaju obraivati njima pridruene dogaaje prema scenariju projekta i provoditi potrebne aktivnosti. Obrada dogaaja mogua je na dva naina: -starim modelom dogaaja -novim modelom dogaaja. Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 49 Napredne Web tehnologije i servisi - FOI Stari model upravljanja dogaajima u GUI Stari model upravljanja dogaajima (MUD) ugraen je u JDK 1.0 i temelji se na zastarjelim/odbaenim metodama kao npr: public boolean action(Event evt, Object what) public boolean mouseDown(Event evt, int x, int y) public boolean mouseEnter(Event evt, int x, int y) public boolean mouseExit(Event evt, int x, int y) u kojima je potrebno ispitivati na koji objekt se odnosi dogaaj. Sve metode su tipa boolean i vraaju true kada se radi o zahtjevanom dogaaju. U tom sluaju zavrava se obrada dogaaja. Metode vraaju false kada aplikacijski okvir treba nastaviti s odradom dogaaja. Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 50 Napredne Web tehnologije i servisi - FOI Stari MUD u GUI - nastavak Postupak pronalaenja objekta nije jednostavan jer sadri razne provjere, od klase do poznatog teksta u objektu. public boolean action(Event event, Object obj) { Object oTarget = event.target; if(oTarget instanceof Button) { Button tipka = (Button) oTarget; String operacija = tipka.getLabel(); if(operacija.compareTo("+") == 0) { // obrada dogaaja return true; } } return true; } Primjer31 Obrada dogaaja Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 51 Napredne Web tehnologije i servisi - FOI Novi model upravljanja dogaajima u GUI Novi model upravljanja dogaajima (MUD) ugraen je u JDK 1.1 i temelji se na klasama koje primaju dogaaje (sluai). One implementiraju odreena suelja za obradu dogaaja, kao npr: public interface ActionListener extends EventListener public abstract class MouseAdapter extends Object implements MouseListener public abstract class KeyAdapter extends Object implements KeyListener u kojima je potrebno ispitivati na koji objekt se odnosi dogaaj. Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 52 Napredne Web tehnologije i servisi - FOI Novi MUD u GUI nastavak 1. Akcija koja rezultira dogaajem Vrsta sluaa pritisak gumba, pritisak return kod pisanja u TextField, izbor stavke menua ActionListener zatvaranje glavnog prozora ili okvira WindowListener pritisak tipke mia iznad komponente MouseListener prijelaz mia preko komponente MouseMotionListener komponenta postaje vidljiva ComponentListener komponenta dobija fokus FocusListener promjena izbora u tablici ili listi ListSelectionListener Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 53 Napredne Web tehnologije i servisi - FOI Novi MUD u GUI nastavak 2. Svakom objektu potrebno je pridruiti klasu koja e upravljati nekim njegovim dogaajima, tj. koja e prislukivati odreene dogaaje. Klasa za GUI (Applet, Frame, ...) moe sama prislukivati dogaaje ili to radi neka njena unutarnja klasa. Moe vie klasa prislukivati dogaaje na raznim razinama. public class Primjer31_2 extends Applet implements ActionListener { ... m_zbroji.addActionListener(this); m_oduzmi.addActionListener(this); SymMouse aSymMouse = new SymMouse(); m_zbroji.addMouseListener(aSymMouse); m_oduzmi.addMouseListener(aSymMouse); ... class SymMouse extends MouseAdapter { ... } Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 54 Napredne Web tehnologije i servisi - FOI Novi MUD u GUI nastavak 3. Postupak pronalaenja objekta je jednostavniji jer se u provjerama koriste objekti koji mogu sudjelovati u stvaranju dogaaja. public void actionPerformed(java.awt.event.ActionEvent event) { Object object = event.getSource(); if (object == m_zbroji) mZbroji_ActionPerformed(event); else if (object == m_oduzmi) mOduzmi_ActionPerformed(event); } Primjer31_2 Obrada dogaaja nova metoda s obradom u internoj klasi Primjer31_1 Obrada dogaaja nova metoda s obradom u samoj klasi Prof.dr.sc. D.Kermek, Fakutet organizacije i informatike, Varadin 55 Napredne Web tehnologije i servisi - FOI Literatura http://download.oracle.com/javase/tutorial/java/index.html http://download.oracle.com/javase/tutorial/essential/index.html http://download.oracle.com/javase/tutorial/collections/index.html http://download.oracle.com/javase/tutorial/ui/index.html http://download.oracle.com/javase/tutorial/uiswing/index.html http://download.oracle.com/javase/tutorial/uiswing/events/index.h tml http://java.net/projects/swingset3/