Ộ Ộ

Ậ Ậ

Ế Ế

Ị Ị

L P TRÌNH J2ME CHO THI T B  DI Đ NG L P TRÌNH J2ME CHO THI T B  DI Đ NG

PH N 1ẦPH N 1Ầ

H n ( BKF)

Hà n i, 17/06/2009

ự ự

ứ ứ

ướ ướ H ng t H ng t ơ ở ề ệ ố

ế

nghiên c u (1)  nghiên c u (1) 1. C  s  v  h  th ng thông tin di đ ng

ộ  (liên quan đ n IT)

 M ng GSM (Global System for Mobile Communication ­ H  th ng thông tin di

ệ ố

ạ ộ ầ đ ng toàn c u)

 Ki n trúc m ng GSM và các th  h  c a nó

ế ệ ủ ế ạ

 Khía c nh liên k t sóng vô tuy n (radio)

ế ế ạ

ạ ạ  Khía c nh m ng

ệ 2. Hai công ngh  IEEE802.11 và Bluetooth

 Khái ni m IEEE802.11 (  m ng c c b ) và Bluetooth

 Các mô hình OSI

 Bluetooth và 802.11 dùng các scenario

 Bluetooth Multiplayer Games Framework (BluetoothMGF)

ụ ộ ở ạ ệ

2

ề ấ  Các v n đ  khác

ướ ướ

ự ự

ứ ứ

nghiên c u (2)  nghiên c u (2)

H ng  t H ng  t ứ ứ

ụ 3. Giao th c  ng d ng không dây (Wireless Application Protocol – WAP)

 Gi

ớ ứ ệ i thi u giao th c WAP

 C ng WAP

 WML (Wireless Markup Language)/ WML script

 Web Service

4. VoiceXML

ẩ ả 5. Các s n ph m

 T  mình thi

ự ế ế ự t k  và xây d ng

 Nghiên c u các s n ph m s n có sau đó phát tri n lên

ứ ể ả ẩ ẵ

3

ự ọ 6. Các l a ch n khác

ớ ớ

ệ ề ệ ề

i thi u v  J2ME i thi u v  J2ME

ể ừ ế ượ

c phát tri n t ả ế ị

ươ ọ ớ c g i v i tên m i là Java 2 Micro Edition, hay vi ọ ế ắ t t ấ ế ị ớ

1.Gi 1.Gi ử ị  L ch s  ki n trúc Java Card, Embeded Java và Personal Java  J2ME đ ờ ủ ế ế ự ủ c a phiên b n Java 1.1. Đ n s  ra đ i c a Java 2 thì Sun quy t đ nh thay th   ớ t là  Personal Java và đ ỏ ề ả J2ME. Đúng v i tên g i, J2ME là n n t ng cho các thi t b  có tính ch t nh ,  g n.ọ

c thi

ị ườ ế ế ế t k  dành cho các máy v i tài nguyên b  nh  h n ch . ượ ở ộ ớ ề ủ ạ ớ ạ ế ị ư t b  nh :

ộ c m  r ng ra cho nhi u ch ng lo i thi ư

ạ ệ ạ ộ

ế ị ợ

 Lý do ch n J2ME ầ ượ Java ban đ u đ ủ Th  tr ng c a J2ME đ • Các lo i th  cá nhân nh  Java Card ẻ • Máy đi n tho i di đ ng • Máy PDA (Personal Digital Assistant ­ thi • Các h p đi u khi n dành cho tivi, thi ể

4

ề ộ ụ t b  tr  giúp cá nhân) i trí gia d ng … ế ị ả t b  gi

ủ ủ

ế ế

(1)  (1)

Ki n trúc c a J2ME Ki n trúc c a J2ME

ng ph n m m cho

ị ộ

ạ ở ậ

ặ ả ị  là đ c t ợ

ể ể ể

ế ị ư

ặ ả

ả ị

ấ ể

ự t b  nh  Samsung, Nokia …b t bu c ph i th c thi  ậ ng l p trình

ượ ạ

ộ ườ  do Sun qui đ nh đ  các l p trình viên có th  d a vào môi tr ứ ư

ế ị

ườ Đ nh nghĩa v  Configuration (C u hình):  đ nh nghĩa m t môi tr ế ị ượ ụ ư t b  đ m t dòng các thi c phân lo i b i t p h p các đ c tính, ví d  nh : •  Ki u và s  l ố ượ ộ ớ ng b  nh •  Ki u và t c đ  b  vi x  lý ử ố ộ ộ •  Ki u m ng k t n i ế ố ạ ặ ả  nên các nhà s n xu t thi Do đây là đ c t ầ ủ đ y đ  các đ c t ự ấ ấ nh t quán và thông qua s  nh t quán này, các  ng d ng đ ạ ể ậ l p thi

ể ự ể c t o ra có th  mang tính đ c  t b  cao nh t có th . Hi n nay Sun đã đ a ra 2 d ng Configuration: 5

ề ả ầ Các thành ph n trong n n t ng J2ME

ế ế

ủ ủ Ki n trúc c a J2ME (2) Ki n trúc c a J2ME (2)

ế ị ế ố

ế

t b  k t n i gi ế ị

ị ườ

ượ c thi t  ng là máy

• CLDC (Connected Limited Device Configuration­C u hình thi ng các thi ớ

ớ ạ  đ i h n): ườ t b  này thông th ế

ớ ạ

ườ ử ụ

ộ i s  d ng mua và t

ả ề i v

ụ ư

ấ ắ ế ể ế ị ấ k  đ  nh m vào th  tr t b  c p th p (low­end), các thi iạ  di đ ng và PDA v i kho ng 512 KB b  nh . Vì tài nguyên b  nh  h n ch  nên CLDC  ớ ệ ộ ả đi n tho ư ượ ắ c g n v i Java không dây (Java Wireless ), d ng nh  cho phép ng đ ứ các  ng d ng Java, ví d  nh  là Midlet.

ế

ơ

ế ị

ắ ệ ố

ơ

t b  k t n i): ư ớ ơ ư

ấ t b  có tính năng m nh h n dòng thi ế ị ẩ

• CDC­ Connected Device Configuration (C u hình thi ượ ư ế ị ế ố  CDC đ c đ a ra nh m đ n  ơ ế ẫ ộ t b  thu c CLDC nh ng v n y u h n các h  th ng  ề ườ ộ ng là trên 2Mb)  t b  này có nhi u b  nh  h n (thông th ấ ể ể ế

ể ổ ợ

t. C  2 Configuration đ u có nh ng profile liên quan và t ể

ả ẫ

ế

ộ ậ

ỗ ụ

ữ ậ ng ta không th  chuy n m t  ng d ng Java vi

ấ ộ ứ ớ ỗ ợ

ể ấ

ạ ế

ẽ ổ

i dùng … vào CLDC. Profile này đ

c thi

ườ ớ ặ

ượ ế

ệ ộ

ị ạ

ứ ơ

ạ ả ự

ườ ổ ế

ơ ấ ở

ế

ế ị các thi ể ử ụ máy đ  bàn s  d ng J2SE. Nh ng thi ạ ộ ử và có b  x  lý m nh h n. Các s n ph m này có th  k  đ n nh  các máy PDA c p cao, đi n  ế ị tho i web, các thi t b  gia d ng trong gia đình …   Đ nh nghĩa v  Profile:  ở ộ Profile m  r ng Configuration b ng cách thêm vào các class đ  b  tr  các  ừ ế ị tính năng cho t ng thi t b  chuyên bi   ị ể nh ng profile này có th  dùng các class l n nhau. Đ n đây ta có th  nh n th y do m i profile đ nh  ườ ế nghĩa m t t p h p các class khác nhau, nên th t  ỗ ợ ộ cho m t profile này và ch y trên m t máy h  tr  m t profile khác. Cũng v i lý do đó, b n không  ộ ứ th  l y m t  ng d ng vi t trên J2SE hay J2EE và ch y trên các máy h  tr  J2ME. Sau đây là các  profile tiêu bi u:ể ư ỗ ợ ế Mobile Information Device Profile (MIDP): profile này s  b  sung các tính năng nh  h  tr  k t  ỗ ợ ế ế ủ ố t k  ch   n i, các thành ph n h  tr  giao di n ng ượ ọ ệ ế ng ch a  y u đ  nh m vào đi n th ai di đ ng v i đ c tính là màn hình hi n th  h n ch , dung l ạ có h n. Do đó MIDP s  cung c p m t giao di n ng i dùng đ n gi n và các tính năng m ng đ n  ứ ơ ả gi n d a trên HTTP. Có th  nói MIDP là profile n i ti ng nh t b i vì nó là ki n th c c  b n cho  ậ l p trình Java trên các máy di đ ng (Wireless Java)

6

ớ ớ

ệ ệ

i thi u MIDP (1) i thi u MIDP (1)

Gi Gi  Đ nh nghĩa:

ượ ị

ế ị ầ

ơ ả

ộ ế

ầ ị

c đ nh nghĩa dành riêng cho các thi ứ ạ

ổ ế ả

ượ

ư

ế

t, MIDP đ

c thi

t k  cho

ệ ọ ậ ấ

Đây là Profile đ t b  di đ ng và là thành ph n chính  trong J2ME. MIDP cung c p các ch c năng c  b n cho h u h t các dòng thiêt b  di đ ng  ư ộ ph  bi n nh t nh  các máy đi n tho i di đ ng và các máy PDA. Tuy nhiên MIDP không  ế ế ầ ph i là cây đũa th n cho m i l p trình viên vì nh  chúng ta đã bi các máy di đ ng có c u hình r t th p.

 Nh ng ch c năng MIDP không th c hi n đ

c:

ỏ ấ

ế ị

ỗ ợ

ầ ớ

ướ

ư

c khi nó b  xóa

ộ ạ ớ ỗ ợ ừ c đ y v  phía các l p trình viên.

khóa finalize() nh  trong J2SE: Vi c “d n d p“ tài nguyên tr ề ỗ ợ

ắ ỗ

i.

ỗ ợ ạ ầ ớ

ư ệ

c trong MIDP.

ể ử ụ ể

ự ế

ườ

ỗ ợ  là các thi

ư ụ ế ị t b  J2ME không có h  tr  các thi ề

ng nh   ọ

ỗ ợ ạ

ọ ữ ệ

ả ươ

ươ

ượ ạ ữ ế ị ư t b  l u tr  thông th ấ ng đ

t máy, Sun đã cung c p m t ch c năng khác t ấ

ế ị

ư

ệ ượ • Phép tính d u ph y đ ng (floating point): Phép tính này đòi h i r t nhi u tài nguyên CPU  và ph n l n các CPU cho các thi t b  di đ ng không h  tr  phép tính này, do đó MIDP cũng  không có. • B  n p l p (Class Loader). • H  tr  t ượ ẩ đ • Không h  tr  JNI ế • H  tr  h n ch  thao tác b t l • Ph n l n các th  vi n API cho Swing và AWT không th  s  d ng đ ư • Không h  tr  các tính năng qu n lý file và th  m c: Đây có th  làm b n ng c nhiên nh ng  ư ổ ứ  c ng  th c t ỗ v.v. Tuy nhiên, đi u đó không có nghĩa là b n ph i m t đi m i d  li u quan tr ng m i khi  ộ ắ t system (RMS) đ  cung c p kh  năng l u tr  cho các thi

ng g i là Record Management  t b  này.

7

ớ ớ

ệ ệ

Gi Gi ữ

i thi u MIDP (2) i thi u MIDP (2) ứ

 Nh ng ch c năng MIDP cung c p :

ấ ớ ư ớ • Các l p và ki u d  li u: các l p trong gói java.util nh  Stack, Vector, Hastable

ể ữ ệ cũng nh  Enumeration.

ẽ ỗ ợ ộ ố ấ • H  tr  đ i t

ng Display: m t ch ố ượ ươ ng trình MIDP s  h  tr  duy nh t m t đ i  ệ ộ ả ể ệ ng Display,đ i t ị ữ ệ ng qu n lý vi c hi n th  d  li u trên màn hình đi n

ườ ệ i dùng.

ư ỗ ợ ố ượ ượ t tho i.ạ ỗ ợ ỗ ợ

ệ ư ấ • H  tr  Form và các giao di n ng • H  tr  Timer và Alert • Cung c p tính năng Record Management System (RMS) cho vi c l u tr  d   ữ ữ

li uệ

ạ ớ ượ c

ả ế ổ ậ ớ ả ớ

ấ ấ ả

ệ ỗ ợ ậ ơ ứ

8

• Tháng 11 năm 2003 Sun đã tung ra MIDP 2.0 v i hàng lo t tính năng khác đ ữ cung c p thêm so v i b n 1.0. Nh ng c i ti n n i b t so v i MIDP 1.0 • Nâng c p các tính năng b o m t nh : ư ạ ệ ế ố ữ ể ộ Download qua m ng an toàn h n qua vi c h  tr  giao th c HTTPS.   Ki m soát vi c k t n i gi a máy di đ ng và server

ớ ớ

ệ ệ

Gi Gi

i thi u MIDP (3) i thi u MIDP (3)

ấ ủ ỗ ợ ấ

ẫ ỉ ỗ ợ ộ ậ ủ

• Thêm các API h  tr  Multimedia.C i ti n h p d n nh t c a MIDP 2.0 là t p  ậ ả ế các API media. Các API này là m t t p con ch  h  tr  âm thanh c a Mobile  Media API (MMAPI).

ề ả ế ở ộ ượ ư • M  r ng các tính năng c a Form. Nhi u c i ti n đã đ ủ c đ a vào API

ổ ớ ư ấ

javax.microedition.lcdui trong MIDP 2.0, nh ng các thay đ i l n nh t (ngoài  API cho game) là trong Form và Item.

ả ể ớ ộ ả ự ỗ ợ ậ t code đ  qu n lý các hành đ ng c a nhân

ẽ ư ả

ị ỗ ư ệ ậ ẩ ướ ượ ưở ợ V i MIDP 1.0 thì  ủ ủ ả c file c a s n  ấ ừ i nh t t ng l

ậ ồ ọ ấ

ưở ợ ằ

ụ ư ậ ộ ườ

ế ằ ớ ộ

ấ ượ c cung c p các tính năng nh  qu n lý các thao tác bàn

ữ ấ ẫ ộ m t trong nh ng c i ti n h p d n cho các nhà phát

ỗ ợ ể ả ể ả ế ướ ạ ệ ả

i d ng các m ng s  nguyên, cho  ộ ả ự ế • H  tr  các l p trình viên Game b ng cách tung ra Game API. ằ ậ ế  mình vi các l p trình viên ph i t ệ ồ ọ v t cũng nh  qu n lý đ  h a. Vi c này s  làm tăng kích th ạ ệ ấ ph m cũng nh  vi c xu t hi n các đo n mã b  l   i. Đ c h Game API trong MIDP 2.0 không ch  là các l p trình viên Game mà còn là các  ơ ả ủ ầ ử ụ ậ l p trình viên c n s  d ng các tính năng đ  h a cao c p. Ý t ng c  b n c a  ớ ộ ả ị ệ  đ nh r ng m t màn hình game là t p h p các layer (l p).  Game API là vi c gi ề ộ Ví d  nh : trong m t game đua xe thì màn hình n n là m t layer, con đ ng là  ư c xem nh  đang n m trên layer khác. V i Game API  m t layer và chi c xe đ ư ả ượ ể nhà phát tri n còn đ phím.  H  tr  ki u  nh RGB: ể ố ễ tri n MIDP là vi c bi u di n hình  nh d 9 ả ớ ữ ệ phép MIDlet thao tác v i d  li u hình  nh m t cách tr c ti p.

ườ ườ ườ

ể ả ợ ể ệ

Môi tr Môi tr ộ  M t môi tr

ể ể ng phát tri n J2ME (1) ng phát tri n J2ME (1) ằ ng phát tri n tích h p (IDE) nh m đ  c i thi n năng su t c a  ằ

ấ ủ ợ ộ ậ ụ ậ

ườ ệ ấ ồ ọ i dùng đ  h a (GUI)

 M t IDE cho J2ME c n ph i cung c p các ti n ích sau:

ậ l p trình viên b ng cách cung c p m t t p các công c  l p trình tích h p  ộ thông qua m t giao di n ng ả ộ ệ ấ ầ

ả ả ố ồ

ạ ả ạ ồ

t trong class (nh  tên

ế ệ ả

ươ

ư ng th c,..). Ngoài vi c b o v  mã ngu n,

ứ ậ

ồ ướ ủ ậ

c c a các t p tin class, làm cho kích th

c c a t p tin

ẽ ạ ỏ ỳ ọ  obfuscate (tu  ch n): s  lo i b  các thông tin không c n thi ớ ế ụ ộ ủ c a các bi n c c b , các l p, ph ướ ủ ả obfuscate còn gi m kích th JAR cũng gi m đi…ả

 pre­verify  (ti n ki m tra)

ị • Qu n lý project ­ Qu n lý các t p tin ngu n và các thông s  MIDlet ậ • Trình so n th o ­ So n th o mã ngu n và các tài nguyên ả • Build (Biên d ch)

ả ậ ự ộ ớ l p (emulation) ­ Th c thi các MIDlet v i m t trình gi ả ậ  l p

10

ỡ ố ỡ ố • Đóng gói (package) ­ Đóng gói các MIDlet thành các t p tin JAR và JAD • Gi • G  r i (debugger) ­ G  r i MIDlet

ườ ườ

Môi tr Môi tr

ể ể ng phát tri n J2ME (2) ng phát tri n J2ME (2) ổ ế

 Các J2ME IDE ph  bi n và n i ti ng sau:

ổ ế

 Sun J2ME Wireless Toolkit 2.5 (WTK)

• WTK là m t b  công c  phát tri n Java J2ME (Java Development Kit ­ JDK) cung c p

ả ậ

ụ ầ

l p, công c , tài li u và các ví d  c n thi

ể ng gi

ấ ế ể t đ

ộ ộ ườ cho các l p trình viên môi tr ứ phát tri n các  ng d ng MIDP.

• WTK không ph i là m t IDE hoàn ch nh, vì nó đã b  các tính năng so n th o và g  r i  ỡ ố ấ

ượ

ư

ạ c xem là b t bu c ph i có trong m t IDE. Nh ng KToolbar, đ

ả ườ

ắ ộ

ả c cung c p  ệ

ộ i thi u cung c p m t GUI dành cho vi c

ộ ể ố ng phát tri n t ụ

ố ượ v n đ ể ộ trong b  WTK là m t môi tr ự biên d ch, đóng gói và th c thi các  ng d ng MIDP.

ộ ả ậ

ả ậ

• WTK 2.5 cũng cung c p các b  gi

c c i ti n v i các tính năng gi

l p,

ế

l p đã đ ộ ơ ế ượ ộ ự

ượ ả ế ể ớ monitor và debug m i. Có m t c  ch  đ c thêm vào ti n trình build c a KToolbar đ   ợ cho phép vi c tích h p và th c thi b  obfuscate Java byte code khi đóng gói MIDlet suite.

11

IntelliJ IDEA 3089 ớ • Sun J2ME Wireless Toolkit 2.5 • Borland Jbuilder • NetBeans IDE • • Eclipse v i EclipseME plug­in

ườ ườ

Môi tr Môi tr

ể ể ng phát tri n J2ME (3) ng phát tri n J2ME (3)

ỉ ả i J2SE

 Cài đ t b  J2SE vào máy tính,   Cài đ t J2ME Wireless Toolkit,

ặ ộ ặ ị đ a ch  t ị Đ a ch http://java.sun.com/j2se/   ỉ http://java.sun.com/j2me/download.html

ậ ư ụ ậ ớ JAR và tên c a th  m c project m i), nh p tên

ủ ứ ụ

ứ ẽ

ư ụ ụ ấ ỳ ươ ể ạ ơ ả ạ ả ủ ng trình so n th o văn b n nào đ  so n ể ng d ng. Có th  dùng b t k  ch

12

ươ  Ch nọ  "New Project..." đ  t o m t project m i. ể ạ ớ  Nh p tên project (tên c ủ ủ a file ủ c a MIDlet class (là main class c a  ng d ng)  Th  m c : “C:\WTK25­Beta2\apps\Vidu2\src”, đây s  là n i ch a source c a  ứ code.  Ti n hành build và run ch ế ng trình

ườ ườ

ể ể ng phát tri n J2ME (4) ng phát tri n J2ME (4)

Môi tr Môi tr ấ

 Nh n vào "Settings..." trên toolbar đ  vào menu c u hình cho project.

ể ấ

ừ ế ớ ị ể  Đ ng đ  ý đ n tr ng "MIDlet­Jar­Size" (v i giá tr  là "100" bytes), Chúng

ẽ ế ậ ườ ta s  làm cho giá tr  t ị ự ượ  đ t l p đúng.

ủ ấ

ọ ổ ể c thi ử ổ  Ch n ọ MIDlets tab trong c a s  dialog c u hình c a porject. ả  Ch nọ  hàng duy nh t trong b ng ("MIDlet­1") đ  làm n i nó và ch n. Sau đó

ấ ấ nh n vào nút "Edit“.

 Xoá tr

ườ ể ặ ế ậ ậ

 Ch p nh n các thay đ i.

ấ ng "Icon" n u không có t p tin *.PNG đ  đ t vào t p tin JAR. ậ ổ

ấ ả ậ t c  t p tin *.class. ấ ả ậ t c  t p tin *.class và preverify.

ể ẵ ế ậ ả

ư ể c trên, t p tin *.JAR và *.JAD k t qu  đã có th  s n sàng đ ng trình mô ph ng, hay đ a lên WWW site đ  download. Tr ự c th c  ng

ướ ươ ướ ủ ẽ ự ỏ ậ (1) Project ­­> Clean: Xoá t    (2) Build                 : Build t    (3)Project ­­> Package ­­> Create Package: Sinh ra t p tin *.JAR và *.JAD. ượ Khi làm 3 b ườ thi trong ch kích th c c a *.JAR trong t p tin *.JAD s  t đúng.

 Đ ng quên th c hi n b

13

ệ ướ ừ ự ỗ c 3 m i khi rebuild

ươ ươ

Ch Ch

ơ ơ ng trình đ n gi n :  ng trình đ n gi n :

ả HelloHello(L i chào) ờ(L i chào) ả

import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class TestMidlet  extends MIDlet {{ private Form mForm; public TestMidlet() { mForm = new Form("Lap trinh voi J2ME"); mForm.append(new StringItem(null, "Hello world!, MIDP!")); }

public void startApp() {

Display.getDisplay(this).setCurrent(mForm);   }   public void pauseApp() {}   public void destroyApp(boolean unconditional) {}

14

}}

ờ ủ ờ ủ

ộ ộ

Vòng đ i c a m t MIDlet  Vòng đ i c a m t MIDlet

ố ươ

ế ừ

ấ ơ ả

ở ạ

ng khác,

c g i

ẽ ựợ ọ ng  ng khi user  ươ ng

15

Gi ng nh  d ng ch ư ạ ng  trình Applet trên J2SE, m t ộ Midlet luôn luôn k  th a  javax.microedition.midlet  Hàm c  b n nh t trong m i  ọ Midlet là startApp(), hàm này  ư ẽ s  kh i t o Midlet cũng nh   ậ v n hành các thành ph n  ặ ố ượ ho c đ i t M i Midlet còn có  ỗ pauseApp() và destroyApp(),  ỗ m i hàm này s  đ ươ ứ ự th c thi t ặ ọ ừ ch n d ng ho c thoát ch trình.

import javax.microedition.lcdui &midlet import javax.microedition.lcdui &midlet

 import javax.microedition.lcdui

• Classes: Alert, AlertType, Canvas,ChoiceGroup, Command, CustomItem,

Interfaces: Choice, CommandListener, ItemCommandListener, ItemStateListener

DateField, Display,Displayble, Font, Form,Gauge, Graphics, Image,  ImageItem,Item, List, Screen, StringItem, TextBox, TextField,Ticker..

• Ví d  ta có th  khai báo:

ụ ể

Ho c khai chi ti

 import javax.microedition.midlet

• Classes: MIDlet

import javax.microedition.lcdui.*;  ế ặ t import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.StringItem; import javax.microedition.lcdui.TextField; //..............

16

Ta có th  khai báo: import javax.microedition.midlet.*;                       Hay : import javax.microedition.midlet.MIDlet;

ệ ở ứ ệ ở ứ

ụ ụ

ầ ầ

2. Các thành ph n giao di n  2. Các thành ph n giao di n

ủ ứ ủ ứ  m c cao c a  ng d ng   m c cao c a  ng d ng

MIDPMIDP

ụ ể ệ

ỉ ố ượ ề ố ượ

ể ấ

ng này  ng trình

 M t  ng d ng MIDlet ch  có 1 đ i  ộ ứ ố ượ ng th  hi n Display. Đ i t t dùng đ  l y thông tin v  đ i t bày.

ị ứ

M t đ i t ộ ố ượ ng Displayable  ầ ượ ể ộ là m t thành ph n đ c hi n  ế ị ộ t b . MIDP  th  trên m t thi ủ ớ ch a 2 l p con c a l p  Displayable là Screen và  Canvas.

ng Screen không ph i là m t cái gì hi n ra trên thi

t b ,

ế ị  l p Screen s   ẽ ẽ ầ  m c cao, chính các thành ph n này s

ừ ế ở ị ể

ộ ộ ố ượ ị ở ứ c th a k  b i các thành ph n hi n th   c hi n th  ra trên màn hình

ầ .

 M t đ i t ượ đ ượ đ

17

ạ ạo Form TT o Form

ạ Form(String title, Item[] items);

form.append("Tat ca cac ban");        form.append("\nChung ta bat dau lam viec nao!\n

Mot dong moi\n");

form.append("Day la mot dong rat dai chung ta  khong viet chung tren mot dong duoc"); form.append(new TextField("Ho va ten:", "Le Thi

Cham Chi", 32, TextField.ANY));

import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.StringItem; import javax.microedition.lcdui.TextField; import javax.microedition.midlet.MIDlet; public class CreateForm extends MIDlet {     protected Display display;     // Flag indicating first call of startApp     protected boolean started;     protected void startApp() {         if (!started) {             display = Display.getDisplay(this);     Form form = new Form("Tieu de Form");            form.append("Chao");

form.append("Dia chi:"); form.append(new TextField(null, null, 32,  TextField.ANY));             display.setCurrent(form);       started = true;         }     }   protected void pauseApp() {}   protected void destroyApp(boolean unconditional)  {} }

18

 T o Form :  Ví d : ụ TaoForm TaoForm

Các hành đ ngộ Các hành đ ngộ

 Các hành đ ng (Command) nh : Thoát (EXIT), tr  l

ở ạ ư ọ ộ ươ i (BACK) và g i m t ph ng

ứ ộ th c ..Các Type: BACK, EXIT,CANCEL,HELP,ITEM,SCREEN,STOP,OK

Command(String label, int commandType, int priority);

ư

private Command cmExit; // khai báo cmExit = new Command("Exit", Command.EXIT, 1); // t o hành đ ng thoát fmMain.addCommand(cmExit); // đ a hành đ ng vào Form  fmMain.setCommandListener(this); // Listen for Event  public void commandAction(Command c, Displayable s)  {  // Th c thi nó     if (c == cmExit){       destroyApp(false);       notifyDestroyed();     }    }

 Ví d : ụ CacHanhDong CacHanhDong

19

Ví d :ụ

ầ ầ Thành ph n Form Thành ph n Form

 Khai báo: import javax.microedition.lcdui.Screen

ỉ ơ ứ ầ ầ ộ ỗ  M t Form ch  đ n gi n là m t khung ch a các thành ph n, mà m i thành ph n

•  StringItem  •  TextField   •  DateField  •  Gauge •  ChoiceGroup •  Image and ImageItem • CustomItem • Spacer

20

ộ ượ ừ ế ừ ớ đ c th a k  t ả  l p Item

ườ

ượ

 M t thành ph n

i dùng

ầ StringItem

StringItem và TextField  StringItem và TextField  StringItem đ ổ

ị ộ ươ

ỗ ạ

ng trình đang ch y. StringItem không

ể ể ả ủ ớ

ươ

ng th c d ng c a l p StringItem

c dùng đ  hi n th  m t nhãn hay chu i văn b n. Ng ỗ ể không th  thay đ i nhãn hay chu i văn b n khi ch ứ ự ự ệ nh n ra s  ki n. Ph StringItem(String label, String text)

Ví d  StringItem :

ể ỉ ng nh p văn b n tiêu bi u nào. Có th  ch

 M t thành ph n  ộ

c phép nh p. V ượ

ự ậ

ầ TextField ự ố i đa đ  t ậ

ậ ở c che b i các ký t

ạ ữ ệ ượ  nh p vào đ

ủ ớ

ứ ự

ng th c d ng c a l p TextField

ượ

ố  nào

ợ ệ

chuoi, chuoi2, chuoi3 chuoi, chuoi2, chuoi3 ư ấ ỳ ượ à

ậ ố

ậ ố ệ

bên trong URL

ỉ ậ ấ ả

ự ợ ệ  h p l ự ậ  nh p vào

ập các đ a ch  email h p l ỉ

 Ví d  TextField :

ả ố ượ TextField nh  b t k  các đ i t ậ ố ị c phép nh p, và lo i d  li u đ đ nh m t nhãn, s  ký t à các ký t ậ TextField còn cho phép nh p vào m t kh u m ặ ạ m t n .  ươ Ph TextField(String label, String text, int maxSize, int constraints) ạ ữ ệ ị c phép nh p vào TextField constraints: đ  xác đ nh lo i d  li u nào đ ầ MIDP đ nh nghĩa các tham s  ràng bu c sau cho thành ph n TextField: ậ ấ ỳ •  ANY: nh p b t k  ký t ỉ •  EMAILADDR: ch  cho phép nh ỉ •  NUMERIC: ch  cho phép nh p s ạ •  PHONENUMBER: Ch  cho phép nh p s  đi n tho i ỉ •  URL: Ch  cho phép nh p các ký t t c  các ký t •  PASSWORD: che t

21

ụ ONhapLieu, TextField1,Login, ONhapLieu, TextField1,Login

DateField , Gauge  DateField , Gauge

 Thành ph n ầ DateField

ạ ị ng Date, đ nh nghĩa trong java.util.Date. T o

ươ ứ ủ ố ượ ử ộ ố ượ ả ờ hay c  hai. Các ph ng th c c a DateField: thao tác đ i t ỉ ng DateField: ch nh s a ngày, gi

ươ ứ ng  ng c a l p DateField g m:

m t đ i t ồ ớ l p DateField g m: DateField(String label, int mode) DateField(String label, int mode, TimeZone timeZone) ồ ủ ớ Các mode t ổ DateField.DATE_TIME: cho phép thay đ i ngày gi ờ ỉ DateField.TIME: ch  cho phép thay đ i gi ỉ DateField.DATE: ch  cho phép thay đ i ngày

ệ ạ ộ Gauge: mô t m c đ  hoàn thành m t công vi c. Có 2 lo i Gauge là

 Ví d :hien thoi  Thành ph n ầ Gauge ng tác(thay

p nh t Gauge)

ươ và không t ng tác(c .Hàm ổ ổ ,thay doi:  ThoiGian ThoiGian, ả ứ ộ ổ đ i Gauge)

ạ ươ lo i t ủ ớ ự d ng c a l p Gauge: Gauge(String label, boolean interactive, int maxValue, int initialValue)

 private Gauge gaVolume;    // Đi u ch nh âm l

ề ỉ ượ ng

 Ví d : ụ HoanThanh

22

gaVolume = new Gauge("Sound Level", true, 100, 4); HoanThanh ; T ngổ  h pợ  cả hai:  bai4 bai4 ho cặ   ktra4 ktra4

ChoiceGroup ChoiceGroup

 Thành ph n ầ ChoiceGroup

ầ ọ ừ ChoiceGroup: ch n t   ượ ị c đ nh

 ChoiceGroup(String label,  int choiceType, String [] stringElements, Image [] imageElements);

 ChoiceType có 2 lo i: ạ

ướ ộ m t danh sách đ u vào đã đ nghĩa tr c.

ộ ụ

ế

•  EXCLUSIVE (ch n ọ m t m c):  nhóm này liên quan đ n các radio  button  •  MULTIPLE (ch n ọ nhi u m c):  ụ nhóm này liên quan nhóm các  checkbox

private ChoiceGroup radio1;  private int defaultIndex;  private int RadioGroup;  radio1 = new ChoiceGroup(“Moi ban chon:",  Choice.EXCLUSIVE);            radio1.append(“Chon 1", null); radio1.append(“Chon 2", null); defaultIndex = radio1.append(“Chon 3", null);  radio1.setSelectedIndex(defaultIndex, true); radioButtonsIndex = form.append(radio1); public void itemStateChanged(Item item){    if (item == radio1){     StringItem msg = new StringItem(“Ban da chon: ",                radio1.getString(radio1.getSelectedIndex()));    form.append(msg);           }   } NhomChon NhomChon

23

ktra6 (exclusive) Ví d :chon nhieu muc (CheckBox):            Chon mot muc (Radio): NhomChonRadio, NhomChonRadio1 NhomChonRadio, NhomChonRadio1            T ngổ  h pợ :  ktra5 ktra5  (multile);  ktra6

Image and ImageItem  Image and ImageItem  ả ớ

ộ ố ượ

ể  Hai l p hi n th  hình  nh:

ế

ả ng hình  nh và   thông tin chi u cao, chi u r ng, và dù  nh có bi n đ i hay không. L p ImageItem: t m

ề ể

ImageItem. Image dùng t o m t đ i t ớ ủ

ả ặ ở  trung tâm, bên trái, bên trên c a màn hình. ế

ạ ả

ế ượ ọ ừ ộ ậ

ữ ẽ ượ nh s  đ ư  lúc nó đ

ộ ả ộ ả ủ ấ ả

ế ổi và bi n đ i. M t  nh không bi n đ i  ổ ổ ơ ả  m t t p tin. M t  nh bi n đ i c  b n  c đ c t ằng cách ghi  ệ ạ ạ

ng th c d ng cho l p Image và ImageItem

Image và ImageItem Image ề ộ gi ụ ấ ả ả c hi n th , ví d  t m  nh đ t  ạ ạ ả MIDP đ a ra 2 lo i hình  nh là lo i không bi n đ ượ ạ ế ể ừ c t o ra. Lo i  nh này đ k  t ề ớ ộ là m t vùng nh . Đi u này tùy thu c vào vi c b n t o n i dung c a t m  nh b nó lên vùng nh .ớ ứ ự ươ Các ph • Image createImage(String name) • Image createImage(Image source) • Image createImage(int width, int height) • Image createImage(Image image, int x, int y, int width,int height, int transform)(TOP|LEFT) •I mageItem(String label, Image img, int layout, String altText)

 Form fmMain = new Form("Images");

// Tao mot image Image img = Image.createImage("/terrain1.png"); // Them vao form fmMain.append(new ImageItem(null, img, ImageItem.LAYOUT_CENTER, null));

 Ví dụ: HinhAnh HinhAnh

24

ầ ầ

Thành ph n List, Textbox Thành ph n List, Textbox

 ListList không t

ườ ể ể ệ ự ơ ọ ự ộ ợ ng minh đu c dùng đ  th  hi n m t th c đ n các ch n l a.

List(String title, int listType, String[] stringElements, Image[] imageElements);

 Ví d : Danh sách c  ph n image ­

ụ ả ầ DanhSach DanhSach

ể ọ Danh sách ch n ki u checkbox ­ DanhSachCheckBox DanhSachCheckBox

ủ ọ ch n các mode (listType) c a danh sách ­ DanhSach1  DanhSach1

ề ụ ươ ệ

ộ ậ TextBox dùng đ  cho phép nh p nhi u dòng. TextBox và TextField có ràng bu c   TextBox ứ ự ố gi ng nhau cho phép nhâp li u. Ví d  ANY, EMAIL, URI… Ph ng th c d ng  ủ c a m t TextBox: TextBox(String title, String text, int maxSize, int constraints)

 Ví d : Vi

ụ ế ờ t ra l i chào dùng TextBox – HelloTextBox HelloTextBox

25

Nhap du lieu ­ NhapTextBox NhapTextBox

Alert, và Ticker Alert, và Ticker

ộ ộ

 M t ộ AlertAlert đ n gi n là m t h p tho i r t nh . Có 2 lo i Alert:

ơ ộ

ả ạ

ế

ượ

ườ

ạ ấ ỏ c trình bày đ n khi ng

ấ ộ ố

ồ ấ ị

ỉ ượ

i dùng  n nút đ ng ý  c trình bày trong m t s  giây nh t đ nh

ạ ng th c d ng c a Alert:

ộ ự ệ

ườ

ế

i dùng bi

ậ ể

ế

ế

i, thông báo và  t là Alert có th  bao g m 1 tham chi u

•  Modal: h p tho i thông báo đ ộ •  Non­modal: h p tho i thông báo ch  đ ứ ự ươ Các ph Alert(String title) Alert(String title, String alertText, Image alertImage, AlertType alertType) ử ụ t có m t s  ki n x y ra.  AlertType s  d ng âm thanh đ  thông báo cho ng ỗ ị ạ ồ AlertType bao g m 5 lo i âm thanh đ nh s n là: thông báo, xác nh n, báo l ồ ủ ả c nh báo. Các ph ng th c d ng c a Alert cho bi ộ ố ượ ế đ n m t đ i t

ươ ứ ự ng AlertType.  ử ụ ả

 Ví d : Thông báo có s  d ng  nh –

ThongBao1 ThongBao1

ạ             Hai lo i thông báo –  ạ                   Các lo i thông báo ­  ể ệ  Ticker

ố ượ

ấ ủ ệ

ố ị

ThongBao2 ThongBao2 HopThoaiBao HopThoaiBao ạ ộ ố ộ ả ượ c trình bày. T c đ  và chi u cu n đ

ạ ế ị ươ

ng th c d ng c a Ticker

ủ ớ

ớ ể ượ ắ

ấ ứ ớ

ủ ớ

ấ ộ

ế ủ c g n vào b t c  l p con c a l p Screen bao

Ticker th  hi n m t đo n chu i ch y theo chi u ngang. Tham s  duy nh t c a Ticker là  ề đo n văn b n đ c xác đ nh b i vi c cài đ t trên  thi t b  nào. ứ ự Ph Ticker(String str) ừ T  cây phân c p,ta th y Ticker không là l p con c a l p Screen mà Ticker là m t bi n c a  ớ l p Screen. Nghĩa là m t Ticker có th  đ ả ồ g m c  Alert.

 Ví d : Chụ

26

ạ y dòng ch  ­ ữ ChuoiChay, Ticker1,  ChuoiChay,Ticker1