J2ME_TIENIT

download J2ME_TIENIT

of 102

Transcript of J2ME_TIENIT

J2ME Programming 2nd Edition

Nguyn Quyt Tin

Trang 1 ca 102

J2ME Programming 2nd Edition

Mc lc0. LI NI U...................................................................................................... 5 1. GII THIU V J2ME...........................................................................................6 1.1 Lch s.......................................................................................................... 6 1.2 Mc tiu ca J2ME.........................................................................................6 1.3 L do chn J2ME............................................................................................6 1.4 Kin trc ca J2ME........................................................................................7 1.4.1 Configuration (Cu hnh)........................................................................7 1.4.2 Profile..................................................................................................... 9 1.5 Gii thiu MIDP...........................................................................................10 1.5.1 nh ngha............................................................................................10 1.5.2 Nhng chc nng MIDP khng thc hin c.....................................10 1.5.3 Nhng chc nng MIDP cung cp.........................................................11 1.6 Mi trng pht trin J2ME.........................................................................12 2. CC THNH PHN GIAO DIN MC CAO CA NG DNG MIDP..................17 2.1 i tng Display, Displayable v Screens.................................................17 2.2 Thnh phn Form v Items.........................................................................18 2.2.1 DateField..............................................................................................19 2.2.2 Gauge...................................................................................................21 2.2.3 StringItem.............................................................................................22 2.2.4 TextField...............................................................................................24 2.2.5 ChoiseGroup.........................................................................................26 2.2.6 Spacer.................................................................................................. 28 2.2.7 CustomItem..........................................................................................29 2.2.8 Image v ImageItem.............................................................................29 2.3 Thnh phn List, TextBox, Alert v Ticker..................................................31 2.3.1 List........................................................................................................32 2.3.2 TextBox................................................................................................34

Nguyn Quyt Tin

Trang 2 ca 102

J2ME Programming 2nd Edition2.3.3 Alert v Alert Type................................................................................35 2.3.4 Ticker....................................................................................................37 3. CC THNH PHN GIAO DIN MC THP CA NG DNG MIDP.................39 3.1 Cc hm API mc thp.............................................................................39 3.2 Lp Canvas.................................................................................................39 3.2.1 H thng trc ta ............................................................................39 3.2.2 To mt i tng Canvas....................................................................40 3.2.3 V trn i tng Canvas.....................................................................41 3.2.4 S kin hnh ng................................................................................42 3.2.5 M phm................................................................................................42 3.2.6 Cc hnh ng trong x l cc tr chi................................................43 3.2.7 Xc nh cc hnh ng ca tr chi....................................................44 3.2.8 S kin con tr.....................................................................................47 3.3 Lp Graphics...............................................................................................50 3.3.1 H tr mu...........................................................................................50 3.3.2 Loi nt v............................................................................................51 3.3.3 V cung................................................................................................ 51 3.3.4 V hnh ch nht..................................................................................53 3.3.5 Font ch............................................................................................... 54 3.3.6 im neo..............................................................................................55 3.3.7 V cc chui k t................................................................................56 3.3.8 V nh..................................................................................................56 3.3.9 Mt s cc phng thc khc ca lp Graphics....................................59 3.4 Cc hm API dng lp trnh Game.........................................................60 4. X L S KIN.................................................................................................62 4.1 i tng Command...................................................................................62 4.2 i tng Item............................................................................................63 4.3 V d v Command v Item........................................................................64

Nguyn Quyt Tin

Trang 3 ca 102

J2ME Programming 2nd Edition5. RECORD MANAGEMENT SYSTEM......................................................................66 5.1 Persistent Storage Through the Record Store.............................................66 5.2 Cc vn lin quan n RMS...................................................................68 5.2.1 Hn ch v kh nng lu tr ca thit b di ng.................................68 5.2.2 Tc truy xut d liu........................................................................68 5.2.3 C ch lung an ton............................................................................68 5.3 Cc hm API trong RMS..............................................................................68 5.4 Duyt Record vi RecordEnumeration........................................................74 5.5 Sp xp cc Record vi Interface RecordComparator.................................75 5.6 Searching with RecordFilter........................................................................82 5.7 Notification of changes with RecordListener...............................................88 5.8 Exception Handling.....................................................................................90 6. THE GENERIC CONNECTION FRAMEWORK.......................................................91 6.1 Nhng Protocol c h tr trong GCF.......................................................92 6.2 H tr giao thc HTTP trong MIDP..............................................................96 6.2.1 Request and Response protocols..........................................................96 6.2.2 The HttpConnection API........................................................................98 6.3 Accessing a Java Servlet...........................................................................101 Ti liu tham kho.............................................................................................102 Cng c h tr................................................................................................... 102

TM HIU L THUYT LM GAME CHO CC THIT B DI NG TRN MI TRNG J2ME

Nguyn Quyt Tin

Trang 4 ca 102

J2ME Programming 2nd Edition 0. LI NI U Khi pht trin game, c ngi vit code ngay, nhng cng c ngi dnh thi gian vit ti liu thit k tht chi tit, ch r tng giai on pht trin game, t tng kch bn, thuc tnh nhn vt, phong cch ch o cho ha v m thanh, ...cho n phn b kh cho cc mn chi. Thng thng, ti liu ban u cng c xy dng chi tit th thi gian pht trin cng nhanh, sn phm cui cng s c cht lng cng tt v khng khc bit nhiu vi tng ban u. Trong mt i pht trin game thng c nhiu ngi, ti thiu phi c nhng v tr sau : 1. Lp trnh 2. Thit k ha 3. Son nhc v hiu ng m thanh 4. Vit kch bn 5. Kim tra v ng gi sn phm Qua ta thy s cn thit phi c mt ti liu tht tt mi ngi c chung ting ni, hiu c mc tiu chung v cng nhau pht trin tt sn phm game. 1. Tng qut, pht trin game gm 4 giai on : 2. Giai on tin sn phm / tng 3. c t cho lp trnh 4. Thc hin vit Code, thit k ha v son nhc, hiu ng m thanh 5. Kim tra v ng gi sn phm C th, ti ny s cp n pht trin game trn mi trng J2ME. Vy J2ME l g ?

Nguyn Quyt Tin

Trang 5 ca 102

J2ME Programming 2nd Edition 1. GII THIU V J2ME 1.1 Lch s J2ME c pht trin t kin trc Java Card, Embeded Java v Personal Java ca phin bn Java 1.1. n s ra i ca Java 2 th Sun quyt nh thay th Personal Java v c gi vi tn mi l Java 2 Micro Edition, hay vit tt l J2ME. J2ME l mt phin bn rt gn ca Java dnh cho cc thit b di ng gii hn v b

nh v b x l. ng vi tn gi, J2ME l nn tng cho cc thit b c tnh cht nh, gn.

Hnh 1.1 Hai version ca Java 1.2 Mc tiu ca J2ME Mc tiu ca J2ME l cho php ngi lp trnh vit cc ng dng c lp vi thit b di ng m khng cn quan tm n phn cng thc s. J2ME c xy dng bng cc tng (layer) khc nhau giu i vic thc hin phn cng khi nh pht trin. 1.3 L do chn J2ME Java ban u c thit k dnh cho cc my vi ti nguyn b nh hn ch. Th trng ca J2ME c m rng ra cho nhiu chng loi thit b nh : Cc loi th c nhn nh Java Card. My in thoi di ng. Nguyn Quyt Tin Trang 6 ca 102

J2ME Programming 2nd Edition My PDA (Personal Digital Assistant - Thit b tr gip c nhn) 1.4 Kin trc ca J2ME

Hnh 1.2. Kin trc chung ca Java Phn ny s tp trung gii thiu cc thnh phn c trong J2ME. 1.4.1 Configuration (Cu hnh) L c t nh ngha mt mi trng phn mm cho mt dng cc thit b c phn loi bi tp hp cc c tnh, v d nh : Kiu v s lng b nh Kiu v tc b vi x l

Kiu mng kt ni Do y l c t nn cc nh sn xut thit b nh Samsung, Nokia, ... bt buc phi thc thi y cc c t do Sun qui nh cc lp trnh vin c th da vo mi trng lp trnh nht qun v thng qua s nht qun ny, cc ng dng c to ra c th mang tnh c lp thit b cao nht c th. V d mt lp trnh vin vit game cho in thoi di ng Samsung th c th sa i chng trnh ca mnh mt cch ti thiu nht c th chy c trn in thoi di ng Nokia, ... Hin nay th Sun a 2 dng Configuration : CLDC (Connected Limited Device Configuration - Cu hnh thit b kt ni gii hn)

: c thit k nhm vo th trng cc thit b di ng cp thp (low-end), cc thit b ny thng thng l cc my in thoi di ng v PDA vi khong 512 KB b nh. V ti nguyn b nh hn ch nn CLDC c gn vi Java khng dy Nguyn Quyt Tin Trang 7 ca 102

J2ME Programming 2nd Edition (Wireless Java), dng nh cho php ngi s dng mua v ti v cc ng dng Java, v d nh MIDlet. CDC (Connected Device Configuration - Cu hnh thit b kt ni) : CDC c a

ra nhm n cc thit b c tnh nng mnh hn dng thit b thuc CLDC nhng vn yu hn cc h thng my bn s dng J2SE. Nhng thit b ny c nhiu b nh hn (thng thng l >= 2MB) v c b x l mnh hn. Cc sn phm ny c th k n nh cc my PDA cao cp, in thoi web, cc thit b trong gia nh, ... C hai dng cu hnh k trn u cha my o Java (Java Virtual Machine) v tp hp cc lp Java (Java Class) c bn cung cp mt mi trng cho cc ng dng J2ME. Tuy nhin cn ch rng, i vi cc thit b cp thp, do hn ch v ti nguyn b nh cng nh l b vi x l nn khng th yu cu h tr tt c cc tnh nng nh my o ca J2SE. V d cc thit b thuc CLDC khng c phn cng yu cu cc php tnh ton du phy ng nn my o thuc kiu CLDC khng c yu cu h tr float v double.

Hnh 1.3. Cu hnh CDC v CLDC

Nguyn Quyt Tin

Trang 8 ca 102

J2ME Programming 2nd Edition Bng di l s so snh cc thng s k thut ca CDC v CLDC CLDC RAM ROM Ngun nng lng Network >= 32K, =128K, = 256K >=521K Khng gii hn Nhanh

1.4.2 Profile Profile m rng cu hnh bng cch thm vo cc Class nhm b tr cc tnh nng cho tng thit b chuyn bit. C 2 configuration u c nhng Profile lin quan v t nhng profile ny c th dng cc class ln nhau. n y ta c th nhn thy do mi mt profile nh ngha mt tp cc Class khc nhau nn thng ta khng th chuyn mt ng dng Java vit cho mt profile ny v chy trn mt my h tr profile khc. Cng vi l do , bn khng th ly mt ng dng vit trn J2SE hay J2EE v chy trn cc my h tr J2ME. Sau y l cc profile tiu biu : Mobile Information Device Profile (MIDP) : profile ny s b sung cc tnh nng

nh h tr kt ni, cc thnh phn h tr giao din ngi dng, ... vo CLDC. Profile ny c thit k ch yu nhm vo in thoi di ng vi c tnh l mn hnh hin th hn ch, dung lng cha c hn. Do MIDP s cung cp mt giao din ngi dng n gin v cc tnh nng mng n gin da trn HTTP. C th ni MIDP l profile ni ting nht bi v n l kin thc c bn cho lp trnh Java trn cc my di ng (Wireless Java). PDA profile : tng t MIDP, nhng th trng l cc my PDA vi mn hnh v

dung lng b nh cao hn. Foudation profile : cho php m rng cc tnh nng ca CDC vi phn ln cc th

vin ca b Core Java2 1.3 Ngoi ra cn c Personal Basis Profile, Personal Profile, RMI Profile, Game Profile.

Nguyn Quyt Tin

Trang 9 ca 102

J2ME Programming 2nd Edition

Hnh 1.4. Mt s profile 1.5 Gii thiu MIDP 1.5.1 nh ngha y l profile c nh ngha dnh ring cho cc thit b di ng v l thnh phn chnh trong J2ME. MIDP cung cp cc chc nng c bn cho hu ht cc dng di ng ph bin nht nh cc my in thoi di ng v cc my PDA. Tuy nhin MIDP khng phi l cy a thn cho mi lp trnh vin v MIDP c thit k dnh cho cc my di ng c cu hnh rt thp. 1.5.2 Nhng chc nng MIDP khng thc hin c Php tnh du phy ng (floating point) : php tnh ny i hi rt nhiu ti nguyn

CPU v phn ln cc CPU cho cc thit b di ng khng h tr php tnh ny. Do MIDP cng khng c. B np Class (Class Loader). H tr t kha finalize() nh trong J2SE : vic "dn dp" ti nguyn trc khi n b

xa c y v pha cc lp trnh vin. Khng h tr JNI. H tr hn ch thao tc bt li.

Phn ln cc th vin API cho Swing v AWT khng th s dng c trong MIDP. Khng h tr cc tnh nng qun l file v th mc : y c th lm bn ngc nhin

nhng thc t l cc thit b J2ME khng c h tr cc thit b lu tr thng thng nh cng, ... Tuy nhin iu khng c ngha l bn phi mt i nhng d liu quan trng mi khi tt my, Sun cung cp mt chc nng khc tng ng l Nguyn Quyt Tin Trang 10 ca 102

J2ME Programming 2nd Edition Record Management System (RMS) cung cp kh nng lu tr cho cc thit b ny. 1.5.3 Nhng chc nng MIDP cung cp Cc lp v cc kiu d liu : Phn ln cc lp m cc lp trnh vin Jaav quen thuc

vn cn c gi li v d nh cc lp trong gi java.util nh Stack, Vector v HashTable cng nh Enumeration. H tr i tng Display : ng nh tn gi mt chng trnh MIDP s h tr duy

nht mt i tng Display l i tng qun l vic hin th d liu trn mn hnh in thoi di ng. H tr Form v cc giao din ngi dng. H tr Timer v Alert. Cung cp tnh nng Record Management System (RMS) cho vic lu tr d liu.

Ngoi ra vo thng 11 nm 2003 Sun tung ra MIDP 2.0 vi hng lot tnh nng c cung cp thm so vi bn 1.0. Nhng ci tin ni bt so vi bn MIDP 1.0 : Nng cp cc tnh nng bo mt nh : Download qua mng an ton hn qua vic h tr giao thc HTTPS. Kim sot vic kt ni gia my di ng v server : v d cc chng trnh s khng th kt ni ti server nu thiu s chp thun ca ngi s dng. Thm cc API h tr Multimedia. Mt trong nhng ci tin hp dn nht ca MIDP

2.0 l tp cc API Media ca n. Cc API ny l mt tp con ch h tr m thanh ca Mobile Media API (MMAP). M rng cc tnh nng ca Form. Nhiu ci tin c a vo

java.microedition.lcdui trong MIDP 2.0, nhng cc thay i ln nht (tr API cho game) l Form v Item. H tr cc lp trnh vin Game bng cch tung ra Game API : c l Sun kp nhn

ra th trng y tim nng ca cc thit b di ng trong lnh vc Game. Vi MIDP 1.0 th cc lp trnh vin phi t vit code qun l cc hnh ng ca nhn vt cng nh vic qun l ha. Vic ny s lm tng kch thc file ca sn phm cng nh vic xut hin cc on m b li. c hng li nht t Game API trong MIDP 2.0 khng ch l cc lp trnh vin Game m cn l cc lp trnh vin cn s dng cc tnh nng ha cao cp. tng ca Game API l vic gi nh rng mt mn hnh Game l mt tp cc lp (layer). V d nh trong mt Game ua xe, mn hnh nn l mt layer, con ng l mt layer v chic xe l layer nm trn layer khc. Vi Game API nh pht trin cn c cung cp cc tnh nng nh qun l thao tc bn phm. Nguyn Quyt Tin Trang 11 ca 102

J2ME Programming 2nd Edition H tr kiu nh RGB : mt trong nhng ci tin hp dn cho cc nh pht trin

MIDP l vic biu din hnh nh di dng cc mng s nguyn, cho php MIDlet thao tc vi d liu hnh nh mt cch trc tip. 1.6 Mi trng pht trin J2ME C nhiu mi trng pht trin ng dng J2ME v mi hng in thoi cng a ra nhng mi trng pht trin cho ring mnh. ti ny ti s gii thiu mt cng c gip chng ta vit code v bin dch chng trnh J2ME l NetBean. Cc bn c th ti NetBean v theo a ch http://netbean.org. ng thi cn phi c plugin J2ME h tr km theo NetBean cng c ti v t a ch trn. Ngoi ra th cn cn phi c J2SDK 1.4 tr ln. Sau khi ci t, chng ta chy chng trnh ti :

Hnh 1.5. a ch ca NetBean trn Programs sau khi ci t

Nguyn Quyt Tin

Trang 12 ca 102

J2ME Programming 2nd Edition Giao din ca chng trnh

Hnh 1.6. Giao din chng trnh NetBean 6.8 Sau khi hon thnh cc bc trn, ta tin hnh to mi mt ng dng J2ME v vit code. u tin t Menu File, ta chn New Project, mt ca s xut hin cho php chn loi ng dng

Hnh 1.7. Ca s New Project ca NetBean Tip trong hp thoi Categories chn Java ME, bn hp thoi Projects ta chn Mobile Application. Nhn Next v tin hnh in thng s cho Project.

Nguyn Quyt Tin

Trang 13 ca 102

J2ME Programming 2nd Edition

Hnh 1.8. Ca s New Mobile Application bc in thng s Project Nhn Next tip tc chn Platform.

Hnh 1.9. Ca s New Mobile Application bc chn Platform Sau nhn Next v chn Finish. Mt ng dng Mobile Application c khi ng, cho php bn vit code.

Nguyn Quyt Tin

Trang 14 ca 102

J2ME Programming 2nd Edition

Hnh 1.10. Mt Project J2ME c to mi Chn Source vit code. Mc nh NetBean to ra cho bn mt s method : startApp(), pauseApp(), destroyApp(), ...

Hnh 1.11. General code khi mt Project J2ME c to ra Sau khi vit code, ta tin hnh Build v Run Nguyn Quyt Tin Trang 15 ca 102

J2ME Programming 2nd Edition

Hnh 1.12. Kt qu bin dch mt chng trnh J2ME Vng i ca mt MIDlet : Ging nh dng chng trnh Applet trn J2SE, mt MIDlet lun kt tha javax.microedition.midlet. Hm c bn nht trong mi MIDlet l startApp(), hm ny s khi to MIDlet cng nh vn hnh cc thnh phn hoc i tng khc. Ngoi startApp(), mi MIDlet cn c pauseApp() v destroyApp(), mi hm ny s c gi thc thi tng ng khi user chn dng hoc thot chng trnh.

Hnh 1.13. Vng i mt MIDlet

Nguyn Quyt Tin

Trang 16 ca 102

J2ME Programming 2nd Edition 2. CC THNH PHN GIAO DIN MC CAO CA NG DNG MIDP 2.1 i tng Display, Displayable v Screens Mt ng dng MIDlet ch c 1 i tng th hin Display. i tng ny dng ly thng tin v i tng trnh by v bao gm cc phng thc yu cu cc i tng c trnh by. i tng Display cn thit cho b qun l vic trnh by trn thit b iu khin thnh phn no s c hin th ln trn thit b. Mc d ch c mt i tng Display ng vi mi MIDlet nhng nhiu i tng trong mt MIDlet c th c hin th ra trn thit b nh Forms, TextBoxes, ChoiseGroups, ... Mt i tng Displayable l mt thnh phn c hin th trn mt thit b. MIDP cha 2 lp con ca Displayable l Screen v Canvas.

Hnh 2.1. Lp Display Mt i tng Screen khng phi l mt ci g hin ra trn thit b m lp Screen ny s c k tha bi cc thnh phn hin th mc cao, chnh cc thnh phn ny s hin th ra trn mn hnh. Mn hnh di y s m t quan h ca lp Screen v cc thnh phn th hin mc cao.

Nguyn Quyt Tin

Trang 17 ca 102

J2ME Programming 2nd Edition

Hnh 2.2. Lp Screen 2.2 Thnh phn Form v Items Mt Form n gin ch l mt khung cha cc thnh phn, m mi thnh phn c k tha t lp Item. DateField Gauge StringItem TextField ChoiseGroup Spacer CustomItem

Image v ImageItem Nguyn Quyt Tin

Trang 18 ca 102

J2ME Programming 2nd Edition 2.2.1 DateField Thnh phn DateField cung cp mt phng tin trc quan thao tc i tng Date c nh ngha trong java.util.Date. Khi to mi mt i tng DateField, bn cn ch r l ngi dng ch c th chnh sa ngy, chnh sa gi hay chnh sa c hai.

Hnh 2.3. Cc mode ca lp DateField Cc Constructor ca lp DateField gm :

Hnh 2.4. Cc constructor ca lp DateField Cc mode tng ng ca lp DateField c ch ra nh hnh 2.3 DateField.DATE_TIME : cho php thay i ngy gi DateField.DATE : ch cho php thay i ngy DateField.TIME : ch cho php thay i gi

Nguyn Quyt Tin

Trang 19 ca 102

J2ME Programming 2nd Edition

Hnh 2.5. Code minh ha DateField

Hnh 2.6 Kt qu sau khi run code Nguyn Quyt Tin Trang 20 ca 102

J2ME Programming 2nd Edition 2.2.2 Gauge Mt thnh phn Gauge l mt kiu giao din thng c dng m t mc hon thnh mt cng vic. C 2 loi Gauge l loi tng tc v loi khng tng tc (Interactive Gauge v DisInteractive Gauge). Loi u cho php ngi dng c th thay i Gauge, loi 2 th i hi ngi pht trin phi cp nht Gauge. Cc Constructor ca lp Gauge gm :

Hnh 2.7. Cc Constructor ca lp Gauge

Hnh 2.8 Code minh ha Gauge tng gim Volume

Nguyn Quyt Tin

Trang 21 ca 102

J2ME Programming 2nd Edition

Hnh 2.9. Kt qu khi run code 2.2.3 StringItem Mt thnh phn StringItem c dng hin th mt nhn hay mt chui vn bn. Ngi dng khng th thay i nhn hay chui vn bn trong khi chng trnh ang chys. StringItem khng nhn ra s kin. Cc Constructor ca lp StringItem gm :

Hnh 2.10. Cc Constructor ca lp StringItem

Nguyn Quyt Tin

Trang 22 ca 102

J2ME Programming 2nd Edition

Hnh 2.11. Code minh ha (thay i ni dung Label v Text)

Nguyn Quyt Tin

Trang 23 ca 102

J2ME Programming 2nd Edition

Hnh 2.12. Kt qu khi run code 2.2.4 TextField Mt thnh phn TextField th cng tng t nh bt k i tng nhp vn bn tiu biu no. Bn c th ch nh mt nhn, s k t ti a cho php nhp vo v loi d liu c php nhp. Ngoi ra th nh Winform hay Webform hay mt loi lp trnh giao din bt k no, TextField cho php nhp text mode mt m c nhn. Cc k t nhp vo s c che bi cc k t mt n. Cc Constructor ca lp TextField gm :

Hnh 2.13. Cc Constructor ca lp TextField Trong Constructor ny ta quan tm n tham s th 4 l constraints v n phng tin xc nh loi d liu no c php nhp vo TextField. MIDP nh ngha cc tham s rng buc cho thnh phn TextField. Sau y l mt s constraint trong s : ANY : cho php nhp bt k k t no EMAILADDR : ch cho php nhp vo cc a ch email hp l NUMERIC : ch cho php nhp s PHONENUMBER : ch cho php nhp s in thoi Nguyn Quyt Tin Trang 24 ca 102

J2ME Programming 2nd Edition URL : ch cho php nhp cc k t hp l bn trong URL PASSWORD : che t c cc k t nhp vo bng mt n

Hnh 2.14. Code minh ha cho TextField

Nguyn Quyt Tin

Trang 25 ca 102

J2ME Programming 2nd Edition

Hnh 2.15. Kt qu khi run code 2.2.5 ChoiseGroup Thnh phn ChoiseGroup cho php ngi dng chn t mt danh sch u vo c nh ngha t trc. ChoiseGroup c 2 loi : multi-selection (cho php chn nhiu mc) : nhm ny c lin quan n cc

checkbox. exclusive-selection (ch c chn mt mc) : nhm ny lin quan n cc nhm

radio button. Cc Constructor ca lp ChoiseGroup gm :

Hnh 2.16. Cc Constructor ca lp ChoiseGroup

Nguyn Quyt Tin

Trang 26 ca 102

J2ME Programming 2nd Edition

Nguyn Quyt Tin

Trang 27 ca 102

J2ME Programming 2nd Edition

Hnh 2.17. Code minh ha ChoiceGroup

Hnh 2.18 Kt qu khi run on code 2.2.6 Spacer Spacer l thnh phn khng nhn thy c, c dng nh v tr cho cc i tng khc trn mn hnh hin th. Chng ta c th dng Spacer ch r khong trng theo chiu ngang v chiu dc gia cc thnh phn, n gin bng cch ch ra chiu di v chiu rng cho tng ci. V Spacer l thnh phn khng nhn thy c nn n khng c s kin. Nguyn Quyt Tin Trang 28 ca 102

J2ME Programming 2nd Edition 2.2.7 CustomItem Thnh phn CustomItem cho php bn to ra nhng thnh phn Item ca chnh bn. Nhng thnh phn ny cng ging nh cc Item khc l cng c th t vo trong Form v c th nhn bit, x l s kin. CustomItem c v ln mn hnh hin th bng phng thc paint(). V th n s ty thuc vo on m m bn thc hin bn trong phng thc paint(). Qu trnh to ra mt i tng CustomItem cng khng khc cc i tng c sn trn nn Java. on m di y minh ha sn ca vic to ra mt i tng CustomItem.

Hnh 2.19. Sn code to ra mt CustomItem 2.2.8 Image v ImageItem Hai lp c dng hin th nh l Image v ImageItem. Image c dng to ra mt i tng hnh nh v lu gi thng tin nh l chiu cao, chiu rng d nh c bin i hay khng. Lp ImageItem m t mt tm nh s c hin th nh th no (t trung tm, t bn tri hay t bn trn mn hnh). MIDP a ra hai loi hnh nh l hnh nh khng bin i v hnh nh bin i. Mt tm nh khng bin i th khng th thay i k t lc n c to ra. c trng ca loi nh ny l c c t tp tin. Mt tm nh bin i v c bn l mt vng nh. iu ny Nguyn Quyt Tin Trang 29 ca 102

J2ME Programming 2nd Edition ph thuc vo vic bn to ni dung ca tm nh bng cch ghi n ln vng nh. Chng ta s lm vic vi nhng tm nh khng bin i trong bng sau. Cc Constructor ca lp Image v lp ImageItem gm :

Hnh 2.20. Cc constructor ca lp Item v ImageItem Ch rng PNG l loi nh duy nht c h tr t bt k thit b MIDP no.

Hnh 2.21. Code minh ha cho Image v ImageItem

Nguyn Quyt Tin

Trang 30 ca 102

J2ME Programming 2nd Edition

Hnh 2.22. Kt qu khi run on code 2.3 Thnh phn List, TextBox, Alert v Ticker Trong phn ny chng ta xem xt cc i tng ListBox, TextBox, Alert v Ticker trong cc thnh phn giao din cp cao ca ng dng MIDP. Chng ta xem li cy phn cp cc thnh phn trnh by trn thit b hon chnh hn.

Nguyn Quyt Tin

Trang 31 ca 102

J2ME Programming 2nd Edition

Hnh 2.23. Mi quan h gia cc thnh phn giao din mc cao ca MIDP

2.3.1 List Mt List cha mt dy cc la chn c th hin mt trong ba dng. Chng ta thy loi cho php nhiu la chn v loi ch c php chn mt khi lm vic vi ChoiseGroup. Dng th 3 l dng khng tng minh. Cc List khng tng minh c dng th hin mt thc n cc la chn. Cc Constructor ca lp List gm :

Hnh 2.24. Cc Constructor ca lp List

Nguyn Quyt Tin

Trang 32 ca 102

J2ME Programming 2nd Edition

Hnh 2.25. Code minh ha cho List

Hnh 2.26 Kt qu khi run on code Nguyn Quyt Tin Trang 33 ca 102

J2ME Programming 2nd Edition 2.3.2 TextBox TextBox c dng cho php nhp nhiu dng. Thnh phn TextBox v TextField c nhng rng buc ging nhau trong vic ch nh loi ni dung c php nhp vo. V d ANY, URL, EMAILADDR, ... Cc Constructor ca lp TextBox gm :

Hnh 2.27. Cc Constructor ca lp TextBox

Hnh 2.28. Code minh ha cho TextBox

Nguyn Quyt Tin

Trang 34 ca 102

J2ME Programming 2nd Edition

Hnh 2.29 Kt qu khi run on code 2.3.3 Alert v Alert Type Mt Alert n gin l mt hp thoi rt nh. C hai loi Alert :

Modal : l loi hp thoi thng bo c trnh by cho n khi ngi dng n nt ng . Non-modal : l loi hp thoi ch c trnh by trong mt s giy nht nh.

Cc Constructor ca lp Alert gm :

Hnh 2.30 Cc Constructor ca lp Alert Thnh phn AlertType s dng m thanh thng bo cho ngi dng bit c mt s kin xy ra. V d chng ta c th s dng AlertType m mt on m thanh no bo hiu cho ngi dng bit khi c li xy ra. Thnh phn AlertType bao gm 5 loi m thanh nh sn l : thng bo, xc nhn, bo li, thng bo v cnh bo.

Hnh 2.31 Cc thnh phn ca AlertType

Nguyn Quyt Tin

Trang 35 ca 102

J2ME Programming 2nd Edition Ta thy cc Constructor ca Alert cho bit l Alert c th bao gm mt tham chiu n mt i tng AlertType.

Hnh 2.32. Code minh ha cho Alert v AlertType

Nguyn Quyt Tin

Trang 36 ca 102

J2ME Programming 2nd Edition

Hnh 2.33. Kt qu khi run on code 2.3.4 Ticker Thnh phn Ticker c dng th hin mt on chui chy theo chiu ngang. Tham s duy nht ca thnh phn Ticker l on vn bn c trnh by. Tc v chiu cun c xc nh bi vic ci t trn thit b no. Cc Constructor ca lp Ticker gm :

Hnh 2.34. Cc Constructor ca lp Ticker T cy phn cp cc thnh phn th hin trn thit b, ta thy thnh phn Ticker khng l lp con ca lp Screen m Ticker l mt bin ca lp Screen. iu ny c ngha l mt Ticker c th c gn vo bt c lp con ca lp Screen bao gm c Alert.

Nguyn Quyt Tin

Trang 37 ca 102

J2ME Programming 2nd Edition

Hnh 2.35 Code minh ha cho Ticker

Hnh 2.36. Kt qu khi run on code

Nguyn Quyt Tin

Trang 38 ca 102

J2ME Programming 2nd Edition 3. CC THNH PHN GIAO DIN MC THP CA NG DNG MIDP 3.1 Cc hm API mc thp Mc d cc hm API cp cao cung cp mt tp y cc thnh phn xy dng giao din ng dng ngi dng. Tuy nhin cc thnh phn cp cao khng cung cp phng tin v trc tip ln thit b th hin. V thiu kh nng ny nn cc ng dng c to ra s gp nhiu gii hn. V d hu ht cc nh pht trin game di ng da trn kh nng v cc ng thng v cc hnh dng nh l mt phn tch hp trong qu trnh pht trin. Nu cc hm API cp cao cho php chng ta to ra giao din cho cc ng dng theo chun th cc hm API cp thp cho php chng ta c th th hin cc tng ca mnh. Canvas v Graphics l 2 lp tri tim ca cc hm API cp thp. Bn s lm tt c cc cng vic bng tay. Canvas l mt khung v cho php ngi pht trin c kh nng v ln thit b trnh by cng nh l vic x l s kin. Cn lp Graphics cung cp cc cng c thc s v nh drawRoundRect() v drawString(). 3.2 Lp Canvas Lp Canvas cung cp mt khung v cho php to ra giao din ty bin ngi dng. Mt s lng ln cc phng thc trong lp ny c dng x l s kin, v nh v chui ln thit b hin th. Bao gm : H thng ta To i tng Canvas V ln trn i tng Canvas X l cc s kin hnh ng X l cc s kin phm nhn X l s kin hnh ng ca Game X l s kin con tr Chng ta s to ra 2 ng dng MIDlet minh ha kh nng ca lp Canvas. ng dng u tin l KeyMapping s minh ha lm th no chp, nhn ra v x l m phm nhn v cc s kin c lin quan n Game. ng dng cn li l ScratchPad s minh ha lm th no thao tc vi cc s kin con tr to ra mt chng trnh v ng thng n gin. 3.2.1 H thng trc ta Mc tiu u tin ca chng ta l lm quen vi h thng trc ta lm vic vi thit b th hin. H thng ta cho lp Canvas c tm ta l im tri trn ca thit b trnh by. Gi tr x tng dn v pha phi, gi tr y tng dn khi i xung phi di. Khi v dy ca bt v l mt im nh. Nguyn Quyt Tin Trang 39 ca 102

J2ME Programming 2nd Edition

Hnh 3.1. H thng ta trn thit b Cc phng thc sau y s gip xc nh chiu rng v chiu cao ca Canvas : int getWith() : xc nh chiu rng ca Canvas int getHeight() : xc nh chiu cao ca Canvas

Chiu rng v chiu cao ca Canvas cng i din cho ton b din tch ca khung v c th trn thit b trnh by. Ni cch khc, chng ta s khng th ch nh kch thc cho Canvas, m phn mm trn mt thit b MIDP s tr v din tch ln nht c th c i vi mt thit b cho trc. 3.2.2 To mt i tng Canvas Bc u tin lm vic vi mt lp Canvas l to ra mt lp k tha t lp Canvas.

Nguyn Quyt Tin

Trang 40 ca 102

J2ME Programming 2nd Edition

Hnh 3.2. K tha t lp Canvas

3.2.3 V trn i tng Canvas Phng thc paint() ca lp Canvas cho php v cc hnh dng, v nh, xut chui. on m sau minh ha vic xa mn hnh th hin bng mt mu trng. Nguyn Quyt Tin Trang 41 ca 102

J2ME Programming 2nd Edition

Hnh 3.3. Phng thc paint() ca lp Canvas Chng ta c th s dng mt tham chiu n mt i tng Graphics bn trong thn phng thc paint() thc hin cng vic thc s. 3.2.4 S kin hnh ng Cng nh cc thnh phn Form, List, TextBox, mt Canvas c th x l cc Command. Chng ta c th x l cc s kin Command trn thnh phn Canvas cung cch nh cc thnh phn khc.

Hnh 3.4. Minh ha command 3.2.5 M phm Trong trng hp x l cc hnh ng ca cc phm mm, mt Canvas c th truy cp n 12 m phm. Nhng m ny c m bo lun lun c trn bt k cc thit b MIDP no :

Nguyn Quyt Tin

Trang 42 ca 102

J2ME Programming 2nd Edition

Hnh 3.5. Cc m phm Nm phng thc x l cc m phm l :

Hnh 3.6. Nm phng thc x l m phm 3.2.6 Cc hnh ng trong x l cc tr chi MIDP thng c s dng to cc tr chi trn nn Java. Cc hng s sau c nh ngha x l cc s kin c lin quan n tr chi trong MIDP.

Hnh 3.7. Cc hng s x l s kin trong tr chi Ni mt cch n gin th cc gi tr ny c nh x thnh cc phm mi tn ch hng ca thit b, nhng khng phi tt c cc thit b di ng u c nhng gi tr ny. Nu Nguyn Quyt Tin Trang 43 ca 102

J2ME Programming 2nd Edition mt thit b di ng thiu cc phm mi tn th cc hnh ng ca tr chi s c nh x vo cc nt bm, v d phm tri c nh x v phm s 2, phm phi c nh x vo phm s 5, v c tip tc nh th.

Hnh 3.8. Mapping key 3.2.7 Xc nh cc hnh ng ca tr chi on m sau y m t mt cch xc nh cc hnh ng ca tr chi t gi cc phng thc thch hp da trn cc hnh ng xy ra.

Hnh 3.9. Code minh ha Mt la chn na l c th to tham chiu cho mi hnh ng ca tr chi thng qua qu trnh khi to gi tr cho cc bin Nguyn Quyt Tin Trang 44 ca 102

J2ME Programming 2nd Edition

Hnh 3.10. Code minh ha khi to gi tr cho bin

Nguyn Quyt Tin

Trang 45 ca 102

J2ME Programming 2nd Edition

Hnh 3.11. Code minh ha mt s chc nng ca Canvas v cch x l phm

Nguyn Quyt Tin

Trang 46 ca 102

J2ME Programming 2nd Edition

Hnh 3.12. Kt qu khi run code 3.2.8 S kin con tr Trong phn ny chng ta s qun l s kin con tr trong mt Canvas. Nhng s kin ny c thit k lm thun tin cho vic tng tc vi cc thit b c dng con tr. Mt s phng thc c cung cp nhm h tr cho vic x l s kin con tr :

Hnh 3.13. Cc s kin con tr

Nguyn Quyt Tin

Trang 47 ca 102

J2ME Programming 2nd Edition Cc phng thc trn c th t gii thch chc nng thng qua tn ca mnh. Phng thc hasPointerMotionEvents() tr v mt gi tr c kiu boolean nhm ch r rng thit b di ng c h tr khi nim "nhp chut v r" hay khng. on code di y minh ha vic s dng cc s kin con tr thc hin mt chng trnh v n gin :

Nguyn Quyt Tin

Trang 48 ca 102

J2ME Programming 2nd Edition

Hnh 3.14. Code minh ha s kin con tr

Nguyn Quyt Tin

Trang 49 ca 102

J2ME Programming 2nd Edition

Hnh 3.15. Kt qu khi run code 3.3 Lp Graphics Chng ta s dng i tng Graphics v ln mt Canvas. 3.3.1 H tr mu Mt ng dng MIDP ch c mt i tng Display. i tng ny dng ly thng tin ca mn hnh hin th hin ti, v d nh s mu h tr v cc phng thc yu cu cc i tng c hin th. i tng Display n gin l mt b qun l s hin th ca thit b v iu khin nhng g s c hin th ra trn thit b.

Hnh 3.16. Nhn v kim tra mu h tr Phng thc u tin cho bit thit b c h tr hin th mu hay khng. Nu c th phng thc th 2 s c gi xc nh s mu c h tr. Cc phng thc tip theo di y ly mu v v thit lp mu a thch ca bn.

Nguyn Quyt Tin

Trang 50 ca 102

J2ME Programming 2nd Edition

Hnh 3.17. Cc phng thc x l mu Ch chng ta c th xc nh mu bng 2 cch : Cch 1 : c th xc nh mt s nguyn i din cho 3 gi tr ca mu l , xanh l

cy v xanh dng vi 8 bit cho mi mu (phng thc th nht trong hnh v trn). Cch 2 : c th dng tng tham s ring bit xc nh mi mu. Khi s dng mt

gi tr lu gi mu th mu s chim 8 bit u k t bn tri, tip theo l 8 bit dnh cho mu xanh l cy, sau cng l mu xanh dng (phng thc th 2 trong hnh v trn). 3.3.2 Loi nt v Chng ta c th chn nt v khi v ng thng, cung v hnh ch nht trn thit b hin th. Di y l cc phng thc dng thit lp loi nt v :

Hnh 3.18. Cc phng thc thit lp nt v Hai kiu nt v c nh ngha trong lp Graphics l nt chm v nt lin

Hnh 3.19. Hai kiu nt v trong Graphics 3.3.3 V cung Khi v mt cung, chng ta c th v n ch c ng bao xung quanh hay yu cu n c t bn trong. Chng ta c th bt u bng cch ch nh chiu bao quanh bn ngoi ca mt hnh hp ch nht tng tng. Gc bt u xc nh v tr bt u v khung, vi gi tr 0 c xc nh ti thi im 3 gi. Gi tr dng tnh theo ngc chiu kim ng h. hiu r hn, chng ta xem xt v d sau : g.drawArc(10, 10, 100, 100, 0, 150);

Nguyn Quyt Tin

Trang 51 ca 102

J2ME Programming 2nd Edition on m trn yu cu v mt cung, cung trn c bao bi mt hnh ch nht c ta im tri trn l (10, 10), chiu rng v chiu di l 100, gc bt u l 0, gc kt thc l 150.

Hnh 3.20. Minh ha Graphics Mt s phng thc dng v cung :

Hnh 3.21. Mt s phng thc v cung

Nguyn Quyt Tin

Trang 52 ca 102

J2ME Programming 2nd Edition

Hnh 3.22. Code minh ha v cung

Hnh 3.23. Kt qu khi run code 3.3.4 V hnh ch nht Cng ging nh hnh cung th hnh ch nht cng c th ch c v vin bao quanh hoc t bn trong. Bn cnh c th v hnh ch nht c 4 gc l trn hoc l vung. Mt s phng thc v hnh ch nht. Nguyn Quyt Tin Trang 53 ca 102

J2ME Programming 2nd Edition

Hnh 3.24. Cc phng thc v hnh ch nhto

Khi v hnh ch nht c 4 gc l trn, chng ta cn xc nh ng knh theo chiu ngang (arcWidth) v ng knh theo chiu dc (arcHeight).

3.3.5 Font ch Phn sau y cng quan trng khng km l cch s dng font ch c h tr bi giao din cp thp ca ng dng MIDP. Sau y l mt s cc phng thc dng ca lp font.

Hnh 3.25 Cc Constructor ca lp Font Mt s thuc tnh ca lp Font :

Hnh 3.26 Mt s thuc tnh ca lp Font

Hnh 3.27 V d khi to mt i tng font Sau khi c mt tham chiu n mt i tng font, chng ta c th truy vn xc nh thng tin ca cc thuc tnh ca n thng qua :

Nguyn Quyt Tin

Trang 54 ca 102

J2ME Programming 2nd Edition

Hnh 3.28. Cc phng thc xc nh thuc tnh i tng Font Kch thc ca cc font ch c xc nh thng qua chiu cao ca font ch, b di tnh bng im nh ca mt chui k t trong mt font xc nh. Mt s phng thc sau h tr khi tng tc vi mt i tng font :

Hnh 3.29. Cc phng thc thao tc vi i tng kiu Font 3.3.6 im neo xc nh ta x,y ca chui k t c hin th, im neo cho php chng ta ch ra v tr mun t ta x, y trn hnh ch nht bao quanh chui k t

Hnh 3.30. Anchor C 6 im neo c nh ngha trc, 3 theo chiu dc v 3 theo chiu ngang. Khi xc nh im neo v chui, phi chn mt im honh v mt im tung . Cc im neo c nh ngha nh di y.

Chiu ngang Nguyn Quyt Tin Trang 55 ca 102

J2ME Programming 2nd Edition LEFT (bn tri) HCENTER (chnh gia chiu ngang) RIGHT (bn phi) Chiu dc TOP ( trn) BASELINE (ng thng c s) BOTTOM ( di) 3.3.7 V cc chui k t Chng ta c th v ra cc chui k t thng qua cc hm sau:

Hnh 3.31. Cc hm v String

Hnh 3.32. Code minh ha v String "Xin chao"

Hnh 3.33. Kt qu khi run code 3.3.8 V nh Lp Graphics cung cp mt phng thc dng v nh : Nguyn Quyt Tin Trang 56 ca 102

J2ME Programming 2nd Edition

Hnh 3.34. Hm v nh v c mt bc nh trn mn hnh hin th, chng ta phi xc nh ta x,y v im neo. Danh sch cc im neo cho vic hin th nh cng khng khc my so vi hin th chui, tuy nhin khng ging vi vic xut chui th mt bc nh c mt im trung tm. V th VCENTER c thay th cho BASELINE khi lm vic vi nh. Chiu ngang LEFT (bn tri) HCENTER (chnh gia chiu ngang) RIGHT (bn phi) Chiu dc TOP ( trn) VCENTER (im chnh gia theo chiu dc)

BOTTOM ( di) Trong cc phn trc chng ta to ra ng dng MIDP cho vic trnh by mt tm nh c c t mt ngun ti nguyn l mt file. Loi nh ny khng cho php thay i v c bit n l "nh khng th thay i". i vi v d sau y, chng ta s to ra mt tm nh t nhng ng tp nham, chng ta s cp pht b nh cho tm nh ly tham chiu n mt i tng Graphics v chng ta s t v ra bc nh. Loi nh ny cn c bit n vi mt ci tn l "nh c th thay i c".

Nguyn Quyt Tin

Trang 57 ca 102

J2ME Programming 2nd Edition

Hnh 3.35. Code minh ha

Nguyn Quyt Tin

Trang 58 ca 102

J2ME Programming 2nd Edition

Hnh 3.36. Kt qu khi run code 3.3.9 Mt s cc phng thc khc ca lp Graphics clip() v traslate() l 2 phng thc ca lp Graphics. Mt vng hin th c ct

xn c nh ngha l khu vc hin th ca thit b di ng, vng ny c cp nht trong sut thao tc v li. Di y l mt s phng thc h tr cho vic xn mt vng d liu :

Hnh 3.37. Phng thc h tr xn vng d liu translate() l mt phng thc c lin quan n h thng trc ta . Chng ta c th

tnh tin h trc ta n mt im x,y khc. Mt s phng thc h tr cho vic tnh tin h trc ta .

Hnh 3.38. Cc phng thc tnh tin h trc Nguyn Quyt Tin Trang 59 ca 102

J2ME Programming 2nd Edition 3.4 Cc hm API dng lp trnh Game y l phn chng ta quan tm trong ti ny. Cc hm API dng lp trnh Game c gii thiu trong bn MIDP 2.0 tr ln, nhng hm ny l phng tin pht trin Game vi nhiu phn ha. Cc hm API ca Game l mt phn ca gi : javax.microedition.lcdui.game

Hnh 3.39. Package game Thc ra v nh trn vn cha bi bn thn lp Canvas li c k tha t lp Displayable, lp Displayable c k tha t lp Object, lp Object l Top Class. Lp GameCanvas gn ging nh lp Canvas, GameCanvas cung cp nn tng to giao din ngi dng, nhng trong trng hp ny ch cho vic to games. GameCanvas cha mt vng nh tch ri vi vng nh mn hnh cho mi th hin v cung cp cc phng tin tch hp xc nh tnh trng bn phm cc tr chi. Di y l lp GameCanvas :

Hnh 3.40. Lp GameCanvas Layer l mt lp tru tng c s dng th hin mt i tng trc quan trong mt tr chi. Sprite l mt lp k tha t lp Layer, lp ny c cung cp th hin cho mt bc nh. Ngoi ra Sprite cn c th bao gm mt dy cc khung nh. thc hin kh nng chuyn ng, cc khung nh c th hin theo mt th t to hiu ng di chuyn nh. Cc php bin i nh l php quay v php lt nh c th c p dng i vi mt Sprite. TiledLayer l mt lp tng t nh mt bng tnh, vi mi i din cho mt tm Nguyn Quyt Tin Trang 60 ca 102

J2ME Programming 2nd Edition nh. Mt TiledLayer n gin dng th hin cc phn t trc quan c kch thc ln, nh l nn ca mt tr chi. Di y l m t cho 3 lp Layer, Sprite v TiledLayer :

Hnh 3.41. Cc lp Layer, Sprite v TiledLayer n gin cho x l cho vic v nhiu lp trong mt tr chi, cc hm API dnh cho vic lp trnh Game li c thm lp LayoutManager. Lp LayoutManager cha mt danh sch c th t cc i tng Layers v xc nh khu vc no cn c v li v th hin theo ng trt t. Lp LayoutManager c th hin nh sau :

Hnh 3.42. Lp LayoutManager

Nguyn Quyt Tin

Trang 61 ca 102

J2ME Programming 2nd Edition 4. X L S KIN 4.1 i tng Command Khi mt i tng xy ra trn thit b di ng, mt i tng Command gi thng tin v s kin . Thng tin ny bao gm loi hnh ng thc thi, nhn ca mnh lnh v u tin ca chnh n. Trong J2ME, cc hnh ng ni chung c th hin di dng cc nt trn thit b. Nu c qu nhiu hnh ng c hin th trn thit b, thit b s to ra mt thc n cha cc hnh ng. Ch c cc thnh phn MIDP sau y mi c th cha cc i tng Command : Form, TextBox, List, Canvas. Sau y l cc bc c bn x l mt i tng Command : To (khai bo) mt i tng Command. t i tng Command ln trn Form, TextBox, List hay Canvas. To mt b lng nghe. Khi c mt s kin xy ra, b lng nghe s pht sinh mt li gi n phng thc commandAction(). Trong thn ca phng thc ny bn c th xc nh i tng no pht sinh ra s kin v to ra cc x l tng ng.

Hnh 4.1. Code minh ha Command

Nguyn Quyt Tin

Trang 62 ca 102

J2ME Programming 2nd Edition 4.2 i tng Item Ngoi vic x l s kin bng i tng Command, chng ta cn c th x l s kin bng i tng Item. Nhiu i tng trong MIDP c nh ngha trc cho vic x l cc s kin c th no . V d i tng DateField cho php la chn ngy gi trn mn hnh, i tng TextField cho php ngi dng nhp vo mt chui k t, s v cc k t c bit. Tng t nh x l s kin bng Command th khi c s kin xy ra i vi bt k thnh phn Item no th phng thc itemStateChanged() s c gi n. V chng ta s thc hin cc x l bn trong phng thc ny.

Hnh 4.2. Code minh ha Item

Hnh 4.3. Kt qu khi run code

Nguyn Quyt Tin

Trang 63 ca 102

J2ME Programming 2nd Edition 4.3 V d v Command v Item

Hnh 4.4. Code minh ha Item v Command

Nguyn Quyt Tin

Trang 64 ca 102

J2ME Programming 2nd Edition

Hnh 4.5. Kt qu khi run code

Nguyn Quyt Tin

Trang 65 ca 102

J2ME Programming 2nd Edition 5. RECORD MANAGEMENT SYSTEM MIDP khng s dng h thng file lu d liu. Thay vo MIDP lu ton b thng tin vo non-volatile memory bng h thng lu tr gi l Record Management System (RMS). 5.1 Persistent Storage Through the Record Store RMS l h thng c t chc v qun l di dng cc record (bn ghi). Mi bn ghi c th cha bt k loi d liu no, chng c th kiu s nguyn, chui k t hay c th l nh v kt qu l mt Record l mt chui (mng) cc byte. Nu chng ta m ha d liu di dng nh phn (binary), chng ta c th lu d liu bng Record sau c d liu t Record v khi phc li ban u theo qu trnh sau :

Hnh 5.1. M ha d liu v ghi vo Record Tt nhin l kch thc ca chng ta khng c php vt qu gii hn cho php theo qui nh ca thit b di ng. RMS lu tr d liu gn nh l mt c s d liu, bao gm nhiu dng, mi dng li c mt nh danh (not index) duy nht :

Hnh 5.2. RMS lu tr d liu theo mng byte Mt tp cc bn ghi l mt tp cc record c sp xp c th t. Mi record khng ng c lp m n phi ph thuc vo mt RecordStore no , do cc thao tc trn Record phi thng qua RecordStore cha n. Khi to ra mt Record trong RecordStore, Nguyn Quyt Tin Trang 66 ca 102

J2ME Programming 2nd Edition Record c gn mt s nh danh gi l Record ID, Record u tin c to ra s c gn nh danh l 1 v s tng thm 1 cho cc Record tip theo. Cn nh rng Record ID khng phi l ch mc (index), cc thao tc xa Record trong RecordStore s khng gy nn vic tnh ton li cc Record ID ca Record hin c cng nh khng lm thay i Record ID ca cc Record c to mi. V d khi ta xa Record ID = 3 (gi s l RecordStore c 10 Record) th Record mi c to ra s vn c Record ID = 11. Data l i din cho mt dy cc byte c lu. Tn c dng phn bit gia cc RecordStore trong b MIDlet (MIDlet Suite). Cn ch khi nim MIDlet Suite l tp cc MIDlet c chung khng gian tn (name space), c th chia s cng ti nguyn (nh RecordStore), cc bin tnh (Static Variable) trong cc lp v cc MIDlet ny s c ng gi trong cng mt file .jar khi trin khai ng dng. Nu ng dng ca chng ta ch c mt MIDlet th cc RecordStore c s dng cng phn bit ln nhau bng cc tn. Tn ca RecordStore c th di ti a n 32 k t Unicode v l duy nht trong mt b MIDlet Suite.

Hnh 5.3. MIDlet Suite ng lin th hin vic truy xut RecordStore do MIDlet to ra, ng nt t l s truy cp n RecordStore do MIDlet khc to ra. Trong MIDlet Suite ONE, MIDlet #1 v MIDlet #2 cng c th truy xut n 4 RecordStore. MIDlet Suite ONE khng th truy xut n RecordStore trong MIDlet Suite TWO. Trong MIDlet Suite ONE th tn ca cc RecordStore l duy nht, tuy nhin th RecordStore trong cc MIDlet Suite khc nhau c th dng chung mt tn. RecordStore cn c 2 thuc tnh l Version Number v Date/time Stamp, cc gi tr ny thay i khi thc hin thm, thay th hay xa mt Record. Ngoi ra cn c th dng c ch Event Handler (Listener) pht hin mi khi RecordStore thay i. Version Number l mt s Integer, bit gi tr khi u chng ta cn gi hm getVersion() sau khi to mt Nguyn Quyt Tin Trang 67 ca 102

J2ME Programming 2nd Edition RecordStore. Date/time Stamp l s Long Integer, l s miliseconds k t ngy 1/1/1970, chng ta c th bit c gi tr ny thng qua hm getLastModified(). 5.2 Cc vn lin quan n RMS 5.2.1 Hn ch v kh nng lu tr ca thit b di ng Dung lng vng nh (non-volatile memory) dnh cho vic lu tr d liu trong RMS thay i ty theo thit b di ng. c t MIDP yu cu rng cc nh sn xut thit b di ng phi dnh ra vng nh c dung lng t nht l 8K cho vic lu tr d liu trong RMS. c t ny khng nu ra gii hn cho mi mt Record. RMS cung cp cc API cho vic xc nh kch thc ca mi Record, tng dung lng ca RecordStore v kch thc cn li ca vng nh ny. Do trong qu trnh pht trin cc ng dng MIDP ni chung v Game ni ring, chng ta phi cn nhc trong vic s dng vng nh ny. 5.2.2 Tc truy xut d liu Cc thao tc trn vng nh ny (non-volatile memory) tt nhin s chm hn nhiu khi bn truy xut d liu trn b nh RAM (volatile memory). N s ging nh vic c tc cng v tc c t RAM ca my tnh. V vy trong k thut lp trnh, chng ta cn phi cache d liu v cc thao tc lin quan n RMS ch thc hin tp trung mt ln (lc khi ng hay ng gi d liu). 5.2.3 C ch lung an ton Nu RecordStore ca chng ta ch c s dng bi mt MIDlet th chng ta khng phi lo lng v vn ny v RMS s dnh ring mt Thread thc hin cc thao tc trn RecordStore. Tuy nhin nu c nhiu MIDlet v Thread cng chia s mt RecordStore th phi ch n k thut lp trnh Thread m bo khng c s xung t d liu.

5.3 Cc hm API trong RMS RecordStore khng c Constructor.

Nguyn Quyt Tin

Trang 68 ca 102

J2ME Programming 2nd Edition

Hnh 5.4. Cc hm API trong javax.microedition.rms.RecordStore Chng ta xem xt 2 v d sau v vic c ghi record trong RecordStore :

V d 1 : c v ghi i tng String

Nguyn Quyt Tin

Trang 69 ca 102

J2ME Programming 2nd Edition

Hnh 5.5. c v ghi i tng String

Nguyn Quyt Tin

Trang 70 ca 102

J2ME Programming 2nd Edition

Hnh 5.6 Kt qu khi run code Trong v d trn, chng ta xem xt n hm readRecords(). Do chng ta bit trc kch thc ca string nn s dng :

Hnh 5.7. c v ghi d liu bng mng byte trong thc t ta nn kim tra kch thc ca record khai bo dy byte cn thit trnh pht sinh li, do hm readRecords() c th c sa li nh sau :

Hnh 5.8. c ghi d liu bng mng byte Nu ch cn c, ghi on text vo record th v d trn l qu thc hin. Tuy nhin thc t l ta cn lu nhng gi tr khc nh int, boolean, ... Trong v d 2 ny, chng ta s s dng Stream c v ghi record. Vic s dng Stream gip chng ta linh ng v nng cao hiu qu ca vic c, ghi d liu vo RecordStore. Trong v d ny cc hm openRecStore(), closeRecStore() v deleteRecStore() khng thay i, ta ch thay i cc hm readRecords() thnh readStream() v writeRecord(String str) thnh writeStream(String[] sData, boolean[] bData, int[] iData).

Nguyn Quyt Tin

Trang 71 ca 102

J2ME Programming 2nd Edition V d 2 : c v ghi Stream

Hnh 5.9. Code minh ha

Nguyn Quyt Tin

Trang 72 ca 102

J2ME Programming 2nd Edition

Hnh 5.10. Kt qu khi run on code Trong v d trn, hm writeStream s dng 2 stream l baos v dos. baos l mt mng byte s ghi vo RecordStore cn dos dng cha d liu. Nh vy qu trnh ghi d liu vo RecordStore c thc hin thng qua cc bc nh sau :

Hnh 5.11. Qu trnh ghi d liu vo RecordStore Ch : Khi s dng DataOutputStream v DataInputStream cn phi c v ghi theo th t c kt qu nh mong mun.

Nguyn Quyt Tin

Trang 73 ca 102

J2ME Programming 2nd Edition 5.4 Duyt Record vi RecordEnumeration Trong cc v d trn, duyt cc Record trong RecordStore, ta s dng vng lp for. Ngoi ra ta cn c th duyt RecordStore theo cch sau :

Hnh 5.12. Duyt RecordStore bng RecordEnumeration Trong on code trn s dng phng thc nextRecord() duyt n record sau , ngoi ra cn c previousRecord() duyt v record trc . RecordEnumeration c uy tr mt index ca cc record. Khi RecordStore c s thay i th RecordEnumeration c th hot ng khng chnh xc, do chng ta cn phi gi hm reindex() mi khi RecordStore c s thay i. RecordEnumeration API : javax.microedition.rms.RecordEnumeration

Hnh 5.13. RecordEnumeration API

Nguyn Quyt Tin

Trang 74 ca 102

J2ME Programming 2nd Edition 5.5 Sp xp cc Record vi Interface RecordComparator Interface ny cho php ngi lp trnh so snh hai record theo mt tiu ch no . Interface ny nh ngha phng thc compare vi gi tr u vo l hai mng byte th hin hai record cn so snh. Phng thc ny tr v cc tr sau c nh ngha trong interface : EQUIVALENT : nu hai record bng nhau FOLLOWS : nu record 1 ng sau record 2 PRECEDES : nu record 1 ng trc record 2 Do RecordComparator l mt interface nn khi s dng ta cn phi implements n :

Hnh 5.14. RecordComparator Sau s dng lp Comparator bng cch gn kt n vi RecordEnumeration :

Hnh 5.15. Gn RecordComparator vi RecordEnumeration Enumeration s s dng hm compare sp xp cc record trong RecordStore :

Hnh 5.16. Hm compare() trong RecordComparator

V d 3 : Sp xp String n gin Nguyn Quyt Tin

Trang 75 ca 102

J2ME Programming 2nd Edition

Nguyn Quyt Tin

Trang 76 ca 102

J2ME Programming 2nd Edition

Hnh 5.17. Code minh ha

Nguyn Quyt Tin

Trang 77 ca 102

J2ME Programming 2nd Edition

Hnh 5.18. Kt qu khi run on code V d 3 trn ng trong trng hp d liu lu vo record l dng text, nu xem li v d 2 khi ta ghi nhiu kiu d liu vo record th v d 3 s chy sai khi p dng kiu d liu binary. khc phc vn ny ta cn vit li hm compare() thc hin chc nng chuyn i chui byte v sp xp ng kiu d liu. Trong thc t th ta cn phi lu nhiu trng d liu trong mt record nh trong v d 2 (gm string, boolean, int). Trong trng hp ny s c nhiu la chn sp xp cc record, v la chn ny ty thuc vo ng dng ca chng ta. Ta s vit hai ng dng dng so snh da vo String v so snh da vo Int vi d liu u vo nh sau :

Hnh 5.19. D liu u vo cho hm sp xp

Nguyn Quyt Tin

Trang 78 ca 102

J2ME Programming 2nd Edition V d 4 : Sp xp da vo String

Nguyn Quyt Tin

Trang 79 ca 102

J2ME Programming 2nd Edition

Hnh 5.20. Code minh ha

Hnh 5.21. Kt qu sau sp xp V d 5 : Sp xp da vo Integer Nguyn Quyt Tin Trang 80 ca 102

J2ME Programming 2nd Edition Vn vi d liu u vo nh v d 4, nhng hm compare trong lp ComparatorInt s c vit li nh sau :

Hnh 5.22. Hm compare c vit li khi so snh da vo Integer

Hnh 5.23. Kt qu sau sp xp Ch : on code ca hm compare, c 2 ng khung mu . Chng ta cn phi c d liu kiu String, Boolean ri mi c kiu Int, tc l phi lm vic c th t vi Nguyn Quyt Tin Trang 81 ca 102

J2ME Programming 2nd Edition DataOutputStream v DataInputStream nu mun c kt qu nh mong i. V n gin l trong record, field String c xp u tin, sau n field Boolean v cui cng l field Int. 5.6 Searching with RecordFilter Ngoi vic sp xp cc record, enumeration cn cung cp c ch lc (tm kim cc record tha mn mt iu kin no ). Khi s dng RecordComparator, tt c cc record trong RecordStore c lu trong mt ResultSet. Nhng khi dng RecordFilter, ch c tha mn cc iu kin ra mi c mt trong ResultSet. Do RecordFilter l mt interface nn khi s dng chng ta cn implements n :

Hnh 5.24. RecordFilter Class ny s c gn vi mt enumerator v khi enumerator s dng hm matches() duyt ht RecordStore v ly ra nhng Record cn tm.

Hnh 5.25. Hm matches() trong RecordFilter

Nguyn Quyt Tin

Trang 82 ca 102

J2ME Programming 2nd Edition

Hnh 5.26. Gn RecordFilter vi RecordEnumeration V d 6 : Tm kim record

Nguyn Quyt Tin

Trang 83 ca 102

J2ME Programming 2nd Edition

Nguyn Quyt Tin

Trang 84 ca 102

J2ME Programming 2nd Edition

Hnh 5.27. Code minh hot tm kim

Hnh 5.28. Kt qu khi run on code V d 7 : Tm kim c s dng Stream Nguyn Quyt Tin Trang 85 ca 102

J2ME Programming 2nd Edition So vi v d 6 th v d 7 c mt s thay i sau :

Nguyn Quyt Tin

Trang 86 ca 102

J2ME Programming 2nd Edition

Hnh 5.29. Code minh ha tm kim s dng Stream

Hnh 5.30. Kt qu khi run on code

Nguyn Quyt Tin

Trang 87 ca 102

J2ME Programming 2nd Edition 5.7 Notification of changes with RecordListener pht hin cc thay i cng nh thm vo cc record trong RecordStore, RMS cung cp giao din RecordListener. Giao din ny nh ngha 3 phng thc, cc phng thc c gi tr u vo l mt i tng RecordStore v mt s int cha Record ID. Cc phng thc l :

Hnh 5.31. Cc s kin ca RecordListener V d 8 : S dng RecordListener

Nguyn Quyt Tin

Trang 88 ca 102

J2ME Programming 2nd Edition

Hnh 5.32. Code minh ha RecordListener

Nguyn Quyt Tin

Trang 89 ca 102

J2ME Programming 2nd Edition

Hnh 5.33. Kt qu khi run on code 5.8 Exception Handling Cc phng thc trong API ca RMS ngoi vic pht sinh cc ngoi l thng thng n mi trng chy (runtime enviroment) RMS cn nh ngha thm cc ngoi l trong gi javax.microedition.rms nh sau :

Hnh 5.34. RMS Exception

Nguyn Quyt Tin

Trang 90 ca 102

J2ME Programming 2nd Edition 6. THE GENERIC CONNECTION FRAMEWORK Vi kch thc hn 200KB v hn 100 class v interfaces trong gi java.io, java.net ca J2SE s chim hu ht b nh vn d nh b ca thit b di ng. Do SUN khng th k tha nhng gi ny vo trong J2ME, m h xy dng mt chun l Generic Connection Framework (GCF). GCF s gip cho cc thit b di ng c th truy xut c cc ti nguyn mng, cng nh cc ti nguyn khc m a ch ca chng c xc nh bng URL. GCF bao gm mt tp cc interface c khai bo trong javax.microedition.io. Hnh v sau y s th hin mi quan h gia cc interface :

Hnh 6.1. Generic Connection Framework (GCF) C mt lp chnh l Connector v 7 interfaces c nh ngha trong GCF. T hnh v d dng nhn thy GCF h tr kt ni mng datagram(packet) v stream. Class Connector c dng m kt ni n mt ti nguyn no thng qua phng thc Open() c khai bo nh sau :

Hnh 6.2. Cc phng thc ca lp Connector Phng thc Open() : Connector.Open("protocol:address;parameters");

Nguyn Quyt Tin

Trang 91 ca 102

J2ME Programming 2nd Edition 6.1 Nhng Protocol c h tr trong GCF GCF h tr nhiu loi Protocol khc nhau. Khi c mt yu cu kt ni, class Connector s s dng phng thc Class.forName() tm kim mt Class ph hp vi Protocol . Nu tm thy mt i tng s c tr v v thc thi interface Connection. Di y l cc cch m mt kt ni :

Hnh 6.3. Cc cch m mt kt ni to mt kt ni, GCF cung cp cho chng ta n 7 phng thc nh hnh 6.2 Sau y l mt on code minh ha vic m kt ni thng qua Stream :

Hnh 6.4. M kt ni thng qua Stream Tuy nhin l ngoi class ContentConnection, ta cng c th m kt ni trc tip bng InputStream. Sau y l on code minh ha vic ti v mt bc nh v ti to li n :

Nguyn Quyt Tin

Trang 92 ca 102

J2ME Programming 2nd Edition

Hnh 6.5. M kt ni trc tip bng InputStream Nhng cc bn nhn vo v d trn th chng ta khng th no xc nh c kch thc ca data c ti v do chng ta khng s dng class ContentConnection. khc phc cho vn ny th chng ta s dng ByteArrayOutputStream lu d liu ti v. Di y l mt v d ti v v hin th mt bc nh t mt a ch download (Do khng kt ni mng nn ti s dng mng local test trn v d ny vi a ch l http://localhost/welcome.png) :

Nguyn Quyt Tin

Trang 93 ca 102

J2ME Programming 2nd Edition

Nguyn Quyt Tin

Trang 94 ca 102

J2ME Programming 2nd Edition

Hnh 6.6. Code minh ha ti nh t mt a ch

Nguyn Quyt Tin

Trang 95 ca 102

J2ME Programming 2nd Edition

Hnh 6.7. Kt qu khi run on code 6.2 H tr giao thc HTTP trong MIDP n y th chng ta bit c rng GCF h tr nhiu kiu kt ni v pht trin ng dng MIDP ti v hin th hnh nh trn thit b di ng. c t ca phin bn MIDP 1.0 ch h tr HTTP, trong khi MIDP 2.0 h tr HTTP v HTTPS, cung cp kh nng bo mt tt hn. Cc hm API c khai bo trong HttpConnection (cho HTTP) v trong HttpConnections (cho HTTP v HTTPS). 6.2.1 Request and Response protocols C HTTP v HTTPS u gi request v response. My client gi request cn Server gi response. Client request gm 3 phn sau : Request Method Header Body Request Method nh ngha cch thc m d liu s c gi n Server. C 3 phng thc c cung cp sn l POST, GET, HEADER (c thm so vi cc cch thc lm vic thng thng ca mt trang Web). Khi s dng GET th d liu cn request s nm trong URL, vi POST th d liu gi t Client s c phn chia thnh cc Stream. Trong khi , HEADER s khng gi d liu ln Server, thay vo HEADER ch request nhng Nguyn Quyt Tin Trang 96 ca 102

J2ME Programming 2nd Edition meta information n Server. GET v POST l hai phng thc kh ging nhau, tuy nhin th GET gi d liu thng qua URL nn s b gii hn, cn POST s dng Stream nn s khc phc c gii hn ny.

Hnh 6.8. V d v vic m HttpConnection thng qua GET Nhng Header File s cho php chng ta truyn cc tham s n Server. Cc header file thng dng l If-Modified-Since, Accept, User Agent. Chng ta c th t field ny thng qua phng thc setRequestProperty(), ch c nhng d liu thay i sau ngy 18-072009 mi c gi v t Server :

Hnh 6.9. V d v setRequestProperty() Sau khi nhn c v x l yu cu t pha Client, Server s ng gi v gi d liu v pha Client. Server gm 3 phn sau : Status Line Header Body Status Line : s thng bo cho Client kt qu ca Request m Client gi cho Server. HTTP phn loi Status line thnh cc nhm sau y : 1xx is informational 2xx is success 3xx is redirection 4xx is client error 5xx is server error Nguyn Quyt Tin Trang 97 ca 102

J2ME Programming 2nd Edition Status line bao gm version ca HTTP trn Server, Status code v on text i din cho status code, v d : "HTTP/1.1 200 OK" "HTTP/1.1 400 Bad Request" "HTTP/1.1 500 Internal Server Error" Header : Khng ging nh header ca client, server c th gi data thng qua header. Sau y l nhng phng thc dng ly thng tin Header m server gi v :

Hnh 6.10. Cc phng thc ly thng tin Header m Server gi v Phng thc th nht ly ni dung trong Header nu bit tn ca Header Filed. Trong trng hp m Server gi v nhiu Header Field th s s dng phng thc th 2 xc nh Header Field da vo index. Cn nu mun bit tn (key) ca Header Field c th s dng phng thc cui cng. Body : Server gi hu ht nhng thng tin trong phn Body v cho Client. Client s d dng Stream ly v v c kt qu. 6.2.2 The HttpConnection API Chng ta s s dng HttpConnection API thit lp kt ni trong MIDP.

Nguyn Quyt Tin

Trang 98 ca 102

J2ME Programming 2nd Edition Hnh 6.11. HttpConnection API Sau y chng ta xem xt mt v d v vic ti v v hin th ni dung mt file theo mt a ch no (v d ny ly localhost test "http://localhost/file/demo.txt").

Nguyn Quyt Tin

Trang 99 ca 102

J2ME Programming 2nd Edition

Hnh 6.12. Code minh ha xem ni dung mt file qua mt a ch URL

Nguyn Quyt Tin

Trang 100 ca 102

J2ME Programming 2nd Edition

Hnh 6.13. Kt qu khi run on code Khi a file demo.txt ln Server CE51.ORG, ti nhn c kt qu nh sau trong Output Form ca NetBean :

Hnh 6.14. Kt qu xem file demo.txt trn Server ce51.org 6.3 Accessing a Java Servlet Trong phn ny chng ta s cp qua tng bc truy xut java servlet. Bc u, client s truyn tham s cho servlet yu cu tr v ngy kt qu nh mong i.Sau , Servlet tr v kt qu v hin th ln mn hnh.

Nguyn Quyt Tin

Trang 101 ca 102

J2ME Programming 2nd Edition Ti liu tham kho 1. Java 1.4 Game Programming by Andrew Mulholland and Glen Murphy (2003 - 647 pages). 2. J2ME Step by step (ibm.com/developerWorks) 3. Mobile Information Device Profile (JSR - 37) by Sun Microsystems. 4. Core J2ME by John Muchow (Sun Microsystems). 5. J2ME & Gaming version 0.5.6 by Jason Lam. 6. MIDP 2.0 Style Guide by Cynthia Bloch, Annette Wagner. 7. J2ME in NutShell by O'Reilly. 8. Enterprise J2ME : Developing Mobile Java Applications by Micheal Juntao Yaun. 9. Thinking in Java 4th Edition by Bruce Eckel. 10. Wireless Java Developing with J2ME 2nd Edition by Jonathan Knudsen. 11. Mobile Programming by thongtinmobile.com 12. J2ME Example in java2s.com.13. Mobile Programming 1st Edition by L Quc Hng - Ging vin i hc Cn Th.

Cng c h tr Trong qu trnh thc hin project, nhm s dng nhng cng c sau : 1. T in Lc Vit (h tr c dch ti liu) 2. Microsoft Office Word 2007 (vit ti liu) 3. Microsoft Office Visio 2007 (v biu v thit k ti liu) 4. Edraw Max (v biu v thit k ti liu) 5. Wireless Toolkit 2.5.2 ca Sun (test project) 6. NetBean 6.8.1 ca NetBean.Org (coding and test project) 7. Cc gi ci t ca J2SDK, J2ME Platform.

Nguyn Quyt Tin

Trang 102 ca 102