1. Trang chủ
  2. » Luận Văn - Báo Cáo

Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java

80 486 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 80
Dung lượng 2,12 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chính vì những hạn chế trên, trong đề tài này em không sử dụng việc hiển thị bản đồ bằng cách vẽ các thành phần của bản đồ như đường, điểm mà em đã sử dụng ảnh tĩnh được quét để làm phần

Trang 1

MỤC LỤC

LỜI NÓI ĐẦU

DANH SÁCH HÌNH VẼ VÀ BẢNG BIỂU

Chương 1 TÌM HIỂU VỀ J2ME 1

1.1 Giới thiệu J2ME 1

1.1.1 Lịch sử 1

1.1.2 Lý do chọn J2ME 2

1.1.3 Kiến trúc của J2M 2

1.1.4 Sự khác nhau giữa ngôn ngữ Java trên CLDC với Java thông thường 5

1.1.5 Giới thiệu MIDP 9

1.1.6 Môi trường phát triển J2ME 10

1.2 Các thành phần giao diện ở mức cao của ứng dụng MIDP 11

1.2.1 Đối tượng Display, Displayable và Screens 12

1.2.2 Thành phần Form và Items 13

1.2.3 Thành phần List, TextBox, Alert và Ticker 18

1.3 Các thành phần giao diện ở mức thấp của ứng dụng MIDP 20

1.3.1 Các hàm API ở mức thấp 20

1.3.2 Lớp Canvas 21

1.3.3 Lớp Graphics 26

1.3.4 Các hàm API dùng để lập trình game 32

1.4 Xử lý sự kiện 33

1.4.1 Đối tượng Command 33

1.5 Record Management System 34

1.5.1 Persistent Storage Through the Record Store 34

1.5.2 Các vấn đề liên quan đến RMS 36

1.5.3 Các hàm API trong RMS 37

1.5.4 Duyệt Record với RecordEnumeration 38

Trang 2

1.5.5 Sắp xếp các record với interface RecordComparator 40

1.5.6 Searching with RecordFilter 41

Chương 2 PHÂN TÍCH, THIẾT KẾ ỨNG DỤNG 43

2.1 Khảo sát hiện trạng 43

2.2 Phân tích bài toán 44

2.2.1 Mô tả hoạt động 44

2.2.2 Phân tích và xác định yêu cầu 44

2.3 Thiết kế ứng dụng 45

2.3.1 Lược đồ sử dụng 45

2.3.2 Đặc tả Ucase 46

2.3.3 Các biểu đồ hoạt động 51

2.3.4 Thiết kế các lớp 55

2.4 Sản phẩm 65

KẾT LUẬN 68

CÁC THUẬT NGỮ ĐƯỢC SỬ DỤNG 70

TÀI LIỆU THAM KHẢO 72

Trang 3

LỜI NÓI ĐẦU

Có thể nói rằng đề tài về bản đồ giao thông không mới Trong các năm qua, đã

có nhiều người nghiên cứu về đề tài này, sản phẩm ứng dụng trong thực tế cũng

có khá nhiều và được đánh giá khá tốt Tuy nhiên ứng dụng bản đồ giao thông trên điện thoại di động lại chưa có nhiều lắm, hơn nữa các chương trình ứng dụng chủ yếu xây dựng bản đồ cho các thành phố lớn như Hà Nội, thành phố Hồ Chí Minh Còn ứng dụng bản đồ giao thông thành phố Thái Nguyên trên điện thoại

di động gần như là chưa có

Trong thời điểm hiện nay, trên thế giới cũng như tại Việt Nam, thị trường cho điện thoại di động cũng trở nên sôi động hơn bao giờ hết Đó là do thu nhập của người dân ngày càng được nâng cao cùng với nhu cầu trao đổi thông tin ngày càng tăng khiến cho nhu cầu sử dụng các phương tiện thông tin liên lạc cũng tăng theo, trong đó số lượng người dân sử dụng điện thoại di động tăng nhiều nhất Các nhà sản xuất điện thoại di động nắm bắt được nhu cầu này của người dân, đặc biệt là của giới trẻ ưa chuộng những sản phẩm công nghệ cao, và yêu cầu cạnh tranh giữa các hãng sản xuất với nhau nên liên tục tung ra nhiều sản phẩm với nhiều tính năng, cấu hình ngày càng được nâng cao, nhất là trong một vài năm trở lại đây đã xuất hiện dòng điện thoại được xem như là một máy tính xách tay bỏ túi, hơn nữa giá thành mà nhà sản xuất đưa ra ngày càng giảm Chiếc điện thoại di động ngày nay không phải là một món hàng quá xa xỉ và ngày càng có nhiều người sở hữu được phương tiện trao đổi thông tin hữu ích này

Cùng với sự phát triển của thị trường điện thoại di động là sự phát triển mạnh

mẽ của xu hướng lập trình phần mềm ứng dụng cho các thiết bị này Phần mềm cho các điện thoại di động hiện nay rất đa dạng mà chủ yếu là các trò chơi, các chương trình tiện ích như đo lường, từ điển, nghe nhạc, xem phim

Với các lý do trên em đã chọn đề tài “Xây dựng bản đồ Thái Nguyên trên điện thoại di động có hỗ trợ Java” với mục tiêu là xây dựng bản đồ thành phố Thái

Nguyên bằng ngôn ngữ lập trình Java, có thể thực thi trên nhiều điện thoại di động khác nhau Nhờ vào phần mềm này người sử dụng có thể: xem bản đồ, tra cứu tên đường, tên các địa điểm, các công trình công cộng như bệnh viện, trường

Trang 4

học, chợ , đặc biệt là giúp người sử dụng có thể xác định lộ trình ngắn nhất để

đi từ địa điểm này tới một địa điểm khác Đây có thể nói là một ứng dụng rất hữu ích, rất thực tế và tiện dụng đối với nhiều người, đặc biệt là các bạn trẻ, và những người bận rộn trong việc đi lại

Nói đến lập trình cho điện thoại di động, tất cả những ai đã và đang dùng điện thoại di động, nhất là những ai đã từng là lập trình viên, thì đều thấy được các trở ngại đó là khả năng xử lý của bộ vi xử lý điện thoại rất yếu và dung lượng của bộ nhớ rất nhỏ Tuy nhiên, với sự phát triển của khoa học công nghệ hiện nay, các hãng sản xuất điện thoại di động đã tung ra thị trường dòng điện thoại có thẻ nhớ,

và nâng cấp bộ nhớ của điện thoại lớn hơn 1GB Song các trở ngại trên vẫn gây khó khăn không nhỏ đến việc tổ chức dữ liệu cho phần mềm, bởi thông tin về bản đồ giao thông là lớn, việc lưu trữ và truy xuất chúng cũng khá phức tạp Thêm vào đó, các thư viện hàm trong ngôn ngữ Java được hỗ trợ cho điện thoại thì bị hạn chế, lược bỏ Chính vì những hạn chế trên, trong đề tài này em không

sử dụng việc hiển thị bản đồ bằng cách vẽ các thành phần của bản đồ như đường, điểm mà em đã sử dụng ảnh tĩnh được quét để làm phần hiển thị của bản đồ Các

dữ liệu của bản đồ được xây dựng và đặt vào file ngoài

Nội dung bài báo cáo này được chia thành 2 chương như sau:

Chương 1: Tìm hiểu về J2ME Chương này nêu kiến thức tổng quan về

J2ME và các phương thức xây dựng cơ bản trong lập trình J2ME

Chương 2: Phân tích, thiết kế bài toán Phân tích các yêu cầu nghiệp vụ,

đặc tả các chi tiết ứng dụng ở mức phân tích, thiết kế Cuối chương là mô tả sản phẩm đã xây dựng được

Kết luận: Đánh giá kết quá đã đạt được, trình bày các ưu điểm khuyết điểm

và hướng phát triển mở rộng cho phần mềm

Các thuật ngữ được sử dụng: Liệt kê và giải thích các thuật ngữ đã được

sử dụng

Em xin chân thành cảm ơn các thầy, cô trong khoa Công nghệ thông tin Trường đại học Thái Nguyên đã tận tình dạy bảo, truyền đạt những kinh nghiệm

Trang 5

quý báu của mình cho em trong suốt thời gian học tập tại trường Em xin kính chúc các thầy cô luôn luôn mạnh khỏe và ngày càng thành công hơn nữa

Đặc biệt em xin bày tỏ lòng biết ơn sâu sắc đến cô Phạm Thị Thương, người

đã tận tình hướng dẫn em trong suốt thời gian thực hiện đề tài

Mặc dù em đã cố gắng rất nhiều trong quá trình thực hiện, nhưng chắc chắn đề tài vẫn còn nhiều thiếu sót Em rất mong nhận được nhiều sự góp ý phê bình của các thầy cô, và các bạn

Một lần nữa, em xin chân thành cảm ơn!

Thái Nguyên, tháng 5 năm 2008

Trang 6

DANH SÁCH HÌNH VẼ VÀ BẢNG BIỂU DANH SÁCH HÌNH VẼ

Tên

hình

Trang 7

2.14 Sơ đồ lớp mức thiết kế (các lớp biên) 65

DANH SÁCH BẢNG BIỂU

Trang 8

2-16 Danh sách các thuộc tính của lớp SettingsForm 64

Trang 9

Chương 1

TÌM HIỂU VỀ J2ME

1.1 Giới thiệu J2ME

1.1.1 Lịch sử

Khi Sun Microsystems nhận ra rằng việc tạo ra một nền tảng chung để chạy

trên tất cả các môi trường là điều không thể thực hiện được, công ty đã quyết định chia công nghệ Java của mình thành 3 phiên bản, mỗi phiên bản được ứng dụng trong một lĩnh vực riêng biệt, đó là:

 Java 2 Platform, Enterprise Edition (J2EETM) phục vụ cho các nhu cầu về thương mại như phục vụ khách hàng, các nhu cầu về phân phối, các vấn

đề về nhân sự Phiên bản này được chạy trên các máy server

 Java 2 Platform, Standard Edition (J2SETM) được cung cấp cho thị trường máy tính để bàn trong các máy tính phục vụ văn phòng hay trong gia đình

 Java 2 Platform, Microedition (J2METM) chạy trên các máy với tài nguyên hạn chế

Hình vẽ dưới đây minh họa các phiên bản hiện có của Java và các lĩnh vực ứng dụng của chúng

Hình 1.1 Các phiên bản khác nhau của Java và lĩnh vực ứng dụng

Trang 10

J2ME được phát triển từ kiến trúc Java Card, Embeded Java và Personal Java của phiên bản Java 1.1 Đến sự ra đời của Java 2 thì Sun quyết định thay thế Personal Java và được gọi với tên mới là Java 2 Micro Edition, viết tắt là 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

1.1.2 Lý do chọn J2ME

a) Java ban đầu được thiết kế dành cho các máy tính với tài nguyên các bộ nhớ hạn chế

b) Thị trường của J2ME được mở rộng ra cho nhiều chủng loại thiết bị như:

 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ết bị trọ giúp cá nhân)

 Các hộp điều khiển dành cho ti vi, thiết bị giải trí gia dụng,

1.1.3 Kiến trúc của J2M

Kiến trúc J2ME được thiết kế để có thể hỗ trợ các thiết bị nhúng khác nhau trên thị trường Để làm được như thế, môi trường J2ME cung cấp nhiều loại máy ảo Java (Java Virtual Machine) khác nhau

Với các thiết bị cấp thấp, tài nguyên hạn chế, môi trường J2ME cung cấp một cấu hình máy ảo rất nhỏ và các thư viện Java chỉ gồm các gói lớp cần thiết cho thiết bị

Hình 1.2: Kiến trúc tổng quát của J2ME

Trang 11

Giới thiệu các thành phần trong nền tảng J2ME:

 Configuration (Cấu hình): là đặc tả định nghĩa một môi trường phần

mềm cho một dòng các thiết bị được phân loại bởi tập hợp các thuộc tính, ví dụ như:

 CLDC (Connected Limited Device Configuration - Cấu hình thiết bị kết nối giới hạn): được thiết kế để nhắm vào thị trường các thiết bị cấp thấp (low-end), các thiết bị này thông thường là máy điện thoại di động và PDA với khoảng 512KB bộ nhớ Vì tài nguyên bộ nhớ hạn chế nên CLDC được gắn với Java không dây (Java Wireless), dạng như cho phép người sử dụng mua và tải về các ứng dụng Java, ví dụ như là Midlet

 CDC - Connected Device Configuration (Cấu hình thiết bị kết nối): CDC được đưa ra để nhắm tới các thiết bị có tính năng mạnh hơn dòng thiết bị thuộc CLDC nhưng vẫn yếu hơn các hệ thống máy để bàn sử dụng J2SE Những thiết bị này có nhiều bộ nhớ hơn (thông thường là trên 2Mb) 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

Cả hai dạng Cấu hình kể trên đều chứa máy ảo Java (Java Virtual Machine) và tập hợp các lớp (class) Java cơ bản để cung cấp một môi trường cho các ứng dụng J2ME Tuy nhiên phải chú ý rằng đối với các thiết bị cấp thấp, do hạn chế

về tài nguyên như bộ nhớ, bộ vi xử lý nên không thể yêu cầu các máy ảo hỗ trợ

Trang 12

tất cả các tính năng như với máy ảo của J2SE, ví dụ, các thiết bị thuộc CLDC không có phần cứng yêu cầu các phép tính toán dấu phẩy động, nên máy ảo thuộc CLDC không được yêu cầu hỗ trợ kiều float và double

Bảng dưới là sự so sánh các thông số kĩ thuật của CDC và CLDC

các class khác nhau, nên thường ta không thể chuyển một ứng dụng Java

viết cho một profile này và chạy trên máy hỗ trợ cho một profile khác

Cũng với lí do đó, ta không thể lấy một ứng dụng viết trên J2SE hoặc J2EE

để 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 nối, các thành phần hỗ trợ giao diện người dùng

vào CLDC Profile này được thiết kế chủ yếu để nhắm vào điện thoại

di động với đặc tính là màn hình hiển thị hạn chế, dung lượng chứa 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

 PDA Profile: tương tự MIDP, nhưng với thị trường là các máy PDA với

màn hình và bộ nhớ lớn hơn

 Foundation Profile: cho phép mở rộng các tính năng của CDC với phần

lớn các thư viện của bộ Core Java2 1.3

Trang 13

Ngoài ra còn có Personal Basis Profile, Personal Profile, RMI Profile, Game Profile

1.1.4 Sự khác nhau giữa ngôn ngữ Java trên CLDC với Java thông thường

 Khả năng xử lý số thực:

Các phép toán trên số thực thường cần nhiều thời gian để xử lý Ngoài

ra phần lớn các thiết bị không có phần cứng hỗ trợ cho việc tính toán trên số thực, do đó CLDC không hỗ trợ số thực

 Finalization:

Trong các lớp được viết bằng J2SE, chúng ta thường định nghĩa một phương thức là finalize() Phương thức này sẽ được gọi trước khi bộ thu gom rác (garbage collector) thu gom đối tượng Phương thức này là nơi chúng ta đặt các mã lệnh để giải phóng các tài nguyên đã sử dụng Tuy nhiên CLDC không hỗ trợ phương thức finalize()

lý lỗi được vì đã quá trễ

 Các lớp kế thừa từ J2SE:

CLDC yêu cầu khoảng 160KB để chạy máy ảo Java và các thư viện cơ bản Do

đó chỉ có một số lớp trong J2SE là được giữ lại:

 System Classes

java.lang.Class java.lang.Object java.lang.Runnable (interface)

Trang 14

java.lang.Runtime java.lang.String java.lang.StringBuffer java.lang.System java.lang.Thread java.lang.Throwable

 Data Type Classes

java.lang.Boolean java.lang.Byte java.lang.Character java.lang.Integer java.lang.Long java.lang.Short

 Collection Classes

java.util.Enumeration (interface) java.util.Hashtable

java.util.Stack java.util.Vector

 Input/output Classes

java.io.ByteArrayInputStream java.io.ByteArrayOutputStream java.io.DataInput (interface) java.io.DataInputStream java.io.DataOutput (interface) java.io.DataOutputStream java.io.InputStream java.io.InputStreamReader java.io.OutputStream java.io.OutputStreamWriter java.io.PrintStream

Trang 15

java.io.Reader java.io.Writer

 Calendar and Time Classes

java.util.Calendar java.util.Date java.util.TimeZone

 Utility Classes

java.lang.Math java.util.Random

 Exception Classes

java.io.EOFException java.io.InterruptedIOException java.io.IOException

java.io.UnsupportedEncodingException java.io.UTFDataFormatException java.lang.ArithmeticException java.lang.ArrayIndexOutOfBoundsException java.lang.ArrayStoreException

java.lang.ClassCastException java.lang.ClassNotFoundException java.lang.Exception

java.lang.IllegalAccessException java.lang.IllegalArgumentException java.lang.IllegalMonitorStateException java.lang.IllegalThreadStateException java.lang.IndexOutOfBoundsException java.lang.InstantiationException

java.lang.InterruptedException java.lang.NegativeArraySizeException java.lang.NullPointerException

Trang 16

java.lang.NumberFormatException java.lang.RuntimeException java.lang.SecurityException java.lang.StringIndexOutOfBoundsException java.util.EmptyStackException

java.util.NoSuchElementException

 Error Classes

java.lang.Error java.lang.OutOfMemoryError java.lang.VirtualMachineError

 Internationalization

java.io.InputStreamReader java.io.OutputStreamWriter

Trang 17

1.1.5 Giới thiệu MIDP

a) Định nghĩa:

Đây là Profile được định nghĩa dành riêng cho các thiế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

b) Yêu cầu phần cứng:

 Màn hình có kích thước tối thiểu là 96x54 pixel

 Có ít nhất một trong các thiết bị nhập sau: bàn phím, màn hình cảm ứng

 Ít nhất 128 KB để chạy các thành phần của MIDP

 Ít nhất 8 KB để chạy các ứng dụng để chứa dữ liệu

 Ít nhất 32 KB để chạy Java

 Kết nối mạng không dây

c) Những chức năng MIDP không thực hiện được:

 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 class (Class loader)

 Hỗ trợ từ khóa finalize() như trong J2SE: việc “dọn dẹp” tài nguyên trước khi nó bị xóa được đẩy về phía lập trinh viên

d) Những chức năng MIDP cung cấp:

Trang 18

 Các lớp và kiểu dữ liệu: Phần lớn các lớp quen thuộc vẫn còn được giữ lại như các lớp trong gói Java.until: Stack, Vector, Hastable, Enumeration

 Hỗ trợ đối tượng Display: Đúng như tên gọi một chương trình MIDP sẽ

hỗ trợ duy nhất một đối tượng Display là đối tượng quản lý việc hiển thị

dữ liệu lên màn hình điện thoại

 Hỗ trợ Form và các giao diện người dùng

 Nâng cấp 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: ví dụ như các chương trình không thể kết nối tới server nếu thiếu sự chấp thuận của người sử dụng

 Thêm các API hỗ trợ Multimedia: Một trong những cải tiến hấp dẫn nhất của MIDP 2.0 là tập các API media của nó 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

 Hỗ trợ các lập trình viên Game bằng cách tung ra Game API ý tưởng của Game API là việc giả định rằng một màn hình game là tập hợp các layer, điều này sẽ làm giảm đáng kể kích thước file của sản phẩm Ngoài

ra Game API còn cung cấp các tính năng khác như quản lý các thao tác bàn phím

 Hỗ trợ kiểu ảnh RGB: một trong những cải tiến hấp dẫn nhất cho các nhà phát triển MIDP là việc biểu diễn hình ảnh dưới dạng mảng các số nguyên, cho phép MIDlet thao tác với dữ liệu hình ảnh một cách trực tiếp

1.1.6 Môi trường phát triển J2ME

Trang 19

Có nhiều môi trường phát triển ứng dụng J2ME và mỗi hãng điện thoại cũng đưa ra môi trường phát triển riêng Trong quá trình xây dựng đồ án này

em đã dùng toolkit của Sun: J2ME Wireless Toolkit 2.5.2 để làm môi trường phát triển J2ME, kết hợp với phần mềm Eclipse 3.2 để xây dựng code

Giao diện của chương trình Wireless Toolkit:

Hình 1.3: Giao diện của chương trình Wireless Toolkit 2.5.2

1.2 Các thành phần giao diện ở mức cao của ứng dụng MIDP

Trước hết chúng ta hãy tìm hiểu vòng đời của một MIDlet:

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ượng

khác, ngoài startApp(), mỗi Midlet còn có pauseApp() và destroyApp(), mỗi hàm

này sẽ được gọi thực thi tương ứng khi user chọn dừng hoặc thoát chương trình

Trang 20

Hình 1.4: Minh họa vòng đời của một MIDlet 1.2.1 Đối tượng Display, Displayable và Screens

Một đối tượng MIDlet chỉ có một đối tượng thể hiện Display Đối tượng

này dùng để lấy thông tin về đối tượng trình bày, ví dụ màu được hỗ trợ, và bao gồm các phương thức để yêu cầu các đối tượng được trình bày Đối tượng Display cần thiết cho bộ quản lý việc trình bày trên thiết bị điều khiển thành phần nào sẽ được hiển thị lên trên thiết bị

Mặc dù chỉ có một đối tượng Display ứng với mỗi MIDlet, nhưng nhiều đối tượng trong một MIDlet có thể được hiển thị ra trên thiết bị như Forms, TextBoxes, ChoiceGroups,

Một đối tượng Displayable là một thành phần được hiển thị trên một thiết

bị MIDP chứa 2 lớp con của lớp Displayable là Screens và Canvas Hình dưới

đây mô tả mối quan hệ trên:

Trang 21

Hình 1.5: Mối quan hệ giữa Display, Displayable, Screen

Một đối tượng Screen không phải là một cái gì đó hiện ra trên thiết bị, mà lớp Screen này sẽ được kế thừa bởi các thành phần hiển thị ở mức cao, chính các

thành phần này sẽ được hiển thị ra trên màn hình

DateField(String label, int mode)

DateField(String label, int mode, TimeZone timeZone)

Các mode tương ứng của lớp DateField bao gồm:

DateField.DATE_TIME: cho phép sửa đổi ngày giờ

DateField.DATE: chỉ cho phép sửa đổi ngày

Trang 22

DateField.TIME: chỉ cho phép sửa đổi giờ

Một thành phần Gauge là một kiểu giao diện thường được dùng để mô tả mức

độ hoàn thành một công việc Có 2 loại Gauge: loại tương tác (cho phép người dùng có thể thay đổi Gauge), loại không tương tác (đòi hỏi người phát triển phải cập nhật Gauge)

Hàm dựng của lớp Gauge:

Gauge(String label, boolean interactive, int maxValue, int initialValue)

Trong đó:

label : nhãn của Gauge

interactive: cho biết người dùng có thể thay đổi giá trị hay không Nếu là true cho phép người dùng thay đổi, nếu là false thì không cho phép

maxValue: giá trị lớn nhất của Gauge, hoặc có thể là INDEFINITE ( trong trường hợp non-interactive)

initialValue: giá trị bắt đầu trong khoảng [0 maxValue], nếu maxValue là INDEFINITE thì initialValue sẽ nhận một trong các giá trị:

CONTINUOUS_RUNNING, INCREMENTAL_UPDATING

Ví dụ:

private Gauge gaVolume;

gaVolume = new Gauge (“Volume”, true, 75, 2);

Trang 23

int getValue() Trả về giá trị hiện tại của Gauge

boolean isInteractive() Trả về true nếu Gauge là loại tương tác, trả về

false nếu Gauge là loại không tương tác

void setDefaultCommand

(Command cmd)

void setItemCommandListener

(ItemCommandListener it)

void setLabel(String label) Thiết lập nhãn cho Item

void setLayout(int layout)

void setMaxValue(int maxValue)

void setPreferredSize(int width,

int height)

void setValue(int value)

Bảng 1-2: Danh sách một số hàm trong Gauge

c) StringItem

Một thành phần StringItem dùng để hiển thị nhãn hay chuỗi văn bản Người

dùng không thể thay đổi nhãn hay chuỗi văn bản khi chương trình đang chạy

StringItem không nhận ra sự kiện

Phương thức dựng của lớp StringItem:

StringItem(String label, String text)

d) TextField

Một thành phần TextFiel tương tự như bất kì các đối tượng nhập văn bản

tiêu biểu khác Có thể chỉ định một nhãn, số kí tự tối đa và loại dữ liệu được phép nhập

Phương thức dựng của lớp TextField:

Trang 24

TextField (String label, String text, int maxSize, int constraints)

Trong đó constraints là thành phần xác định loại dữ liệu nào sẽ được nhập

vào, gồm có:

 any - cho phép nhập kí tự bất kì

 emailaddr - chỉ cho phép nhập vào các địa chỉ email hợp lệ

 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ự hợp lệ bên trong URL

 password - che tất cả các kí tự nhập vào

Ví dụ:

private TextField tfText;

tfText = new TextField(“Password:”, “”, null, TextField.PASSWORD);

private ChoiceGroup cgChoice;

cgChoice = new ChoiceGroup(“ Lua chon”, Choice.EXCLUSIVE);

cgChoice.append(“Chuc nang 1”, null);

cgChoice.append(“Chuc nang 2”, null);

f) Spacer

Spacer là thành phần không nhìn thấy, được dùng để định vị cho các đối tượng khác trên màn hình hiển thị Có thể dùng Spacer chỉ rõ khoảng trắng

theo chiều dọc và chiều ngang giữa các thành phần bằng cách chỉ ra chiều

rộng và chiều dài cho từng cái Vì Spacer là thành phần không nhìn thấy nên

nó không có sự kiện

Trang 25

g) CustomItem

Thành phần CustomItem cho phép các lập trình viên tạo ra những thành phần Item của chính họ Những thành phần này cũng giống như các Item khác,

có thể được đặt vào trong Form và nhận biết xử lý sự kiện

CustomItem được vẽ lên màn hình hiển thị bằng phương thức paint() Vì thế

nó sẽ tùy thuộc vào đoạn mã bên trong phương thức paint() Ví dụ minh họa sườn tạo ra đối tượng CustomItem:

public class NewItem extends CustomItem

Hai lớp được dùng để hiển thị hình ảnh là: Image và ImageItem Image

được dùng để tạo một đối tượng hình ảnh và giữ thông tin như chiều cao,

chiều rộng, và dù ảnh có biến đổi hay không Lớp ImageItem mô tả một ảnh sẽ

được hiển thị như thế nào, ví dụ như tấm ảnh đó sẽ được đặt ở đâu trên màn hình hiển thị: ở trung tâm, hay về phía trái, hay phía dưới

Trang 26

MIDP đưa ra hai loại hình ảnh là loại ảnh biến đổi và loại ảnh không biến đổi Một tấm ảnh không biến đổi thì nó không thể bị thay đổi kể từ lúc nó được tạo ra Đặc trưng của loại ảnh này là được đọc từ một tập tin Một tấm ảnh biến đổi về cơ bản nó là một vùng nhớ Điều này tùy thuộc vào việc tạo nội dung tấm ảnh bằng cách ghi nó lên vùng nhớ

Các phương thức dựng cho lớp Image và ImageItem:

Image createImage(String name)

Image createImage(Image source)

Image createImage(byte[] imageDate, int imageOffset, int imageLength) Image createImage(int width, int height)

Image createImage(Image image, int x, int y, int width, int height, int transform)

Image createImage(InputStream stream)

Image createRGBImage(int[] rgb, int width, int height, boolean processAlpha)

ImageItem(String label, Image img, int layout, String altText)

Ví dụ: Mô tả cách tạo một tấm ảnh từ một tập tin, gắn nó với một đối tượng

ImageItem và thêm nó vào một Form:

Form fmMain = new Form(“Images”);

Image im = Image.createImage(“/vidu.png”);

fmMain.append(new ImageItem(null, im, ImageItem.LAYOUT_CENTER, null));

PNG là loại ảnh duy nhất được hỗ trợ bởi bất kì thiết bị MIDP nào

1.2.3 Thành phần List, TextBox, Alert và Ticker

Cây phân cấp trình bày trên một thiết bị hoàn chỉnh;

Trang 27

Hình 1.6: Cây phân cấp các lớp hiển thị ở mức cao

a) List

Một List chứa một dãy các lựa chọn thể hiện một trong ba dạng: cho phép

chọn nhiều lựa chọn (multi), chỉ chọn một lựa chọn (exclusive), và dạng không

tường minh (implicit) Các List không tường minh được dùng để thể hiện một

thực đơn các chọn lựa

List.MULTIPLE List.EXCLUSIVE List.IMPLICIT

Hình 1.7: Minh họa các dạng của List b) TextBox

TextBox được dùng để cho phép nhập nhiều dòng Thành phần TextBox và TextField có những ràng buộc giống nhau trong việc chỉ định loại nội dung

được phép nhập vào

Trang 28

Phương thức dựng của một TextBox:

TextBox(String title, String text, int maxSize, int constraints)

c) Alert và AlertType

Một Alert đơn giản là một hộp thoại rất nhỏ Có 2 loại Alert:

 Modal: là loại hộp thoại thông báo được hiển thị cho đến khi người

có một sự kiện xảy ra, ví dụ như báo khi có lỗi xảy ra Thành phần Alert bao

gồm 5 loại âm thanh định sẵn là: thông báo, xác nhận, báo lỗi, thông báo và

Nếu các hàm API cấp cao cho phép chúng ta tạo ra giao diện cho các ứng dụng theo chuẩn, thì các hàm API cấp thấp cho phép chúng ta có thể thể hiện được ý tưởng của mình

Canvas và Graphics là hai lớp trái tim của các hàm API cấp thấp Canvas là

một khung vẽ cho phép người phát triển có khả năng vẽ lên thiết bị hiển thị cũng

như là việc quản lý sự kiện Còn lớp Graphics cung cấp các phương tiện thật sự

để vẽ như drawString() và drawRoundRect()

Trang 29

1.3.2 Lớp Canvas

Lớp Canvas cung cấp một khung vẽ cho phép tạo ra giao diện tùy biến

người dùng Một số lượng lớn các phương thức trong lớp này được dùng để xử lý

sự kiện, vẽ ảnh và chuỗi lên thiết bị hiển thị

a) Hệ thống trục tọa độ

Hệ thống tọa độ cho lớp Canvas có tâm tọa độ là điểm trái trên của

thiết bị hiển thị giá trị x tăng dần về phía phải, giá trị y tăng dần khi đi xuống phía dưới Khi vẽ độ dày bút vẽ là một điểm ảnh

Hình 1.8: Hệ tọa độ trên màn hình điện thoại di động

Các phương thức sau đây sẽ xác định chiều rộng và chiều cao của canvas:

 int getWidth(): xác định chiều rộng của canvas

 int getHeight(): xác định chiều cao của canvas

Chiều rộng và chiều cao của canvas cũng đại diện cho toàn bộ diện tích khung

vẽ có thể trên thiết bị trình bày Nói cách khác, không thể chỉ định kích thước cho canvas, mà phần mềm trên thiết bị MIDP sẽ trả về diện tích lớn nhất có thể đối với một thiết bị cho trước

b) Tạo một đối tượng Canvas

Bước đầu tiên để làm việc với một lớp Canvas là tạo ra một lớp thừa kế

từ lớp Canvas Ví dụ:

class TestCanvas extends Canvas implements CommandListener{

private Command cmdExit;

Trang 30

TestCanvas canvas = new TestCanvas(this);

c) Vẽ trên đối tượng Canvas

Phương thức paint của lớp Canvas cho phép vẽ các hình dạng, vẽ ảnh, xuất

chuỗi Ví dụ: xóa màn hình bằng màu trắng:

protected void paint(Graphics g){

// Thiết lập màu nền là màu trắng

g.setColor(255, 255, 255);

// Tô đầy toàn bộ canvas

g.fillRect(0, 0, getWidth(), getHeight());

class TestCanvas extends Canvas implements CommandListener{

private Command cmdExit;

display = Display.getDisplay(this);

Trang 31

cmdExit = new Command("Exit", Command.EXIT, 1);

public void commandAction(Command c, Displayable d){

if (c == cmdExit) .}

}

e) Mã phím

Trong trường hợp xử lý các hành động của các phím mềm, một Canvas có

thể truy cập đến 12 mã phím Những mã này được đảm bảo luôn luôn có trên bất kì các thiết bị MIDP nào

KEY_NUM0

KEY_NUM1 KEY_NUM2 KEY_NUM3 KEY_NUM4 KEY_NUM5 KEY_NUM6 KEY_NUM7 KEY_NUM8 KEY_NUM9 KEY_STAR KEY_POUND Các phương thức để xử lý mã phím:

void keyPress(int keyCode)

void keyReleased(int keyCode)

Trang 32

void keyRepeated(int keyCode)

g) Xác định các hành động của trò chơi

Dưới đây là đoạn mã mô tả một cách xác định các hành động của trò chơi để

từ đó gọi các phương thức thích hợp dựa trên các hành động xảy ra:

protected void keyPressed(int keyCode){

Trang 33

goRight();

break;

} }

Một lựa chọn nữa là có thể tạo một tham chiếu cho mỗi hành động của trò chơi thông qua quá trình khởi tạo giá trị cho các biến

else if (keyCode == keyRight) goRight()

}

h) Sự kiện con trỏ

Phần này sẽ quản lý con trỏ trong một Canvas Những sự kiện này được thiết

kế để làm thuận tiện cho việc tương tác với các thiết bị có dạng con trỏ Một số phương thức được cung cấp nhằm hỗ trợ cho việc xử lý sự kiện con trỏ:

boolean hasPointerEvents()

boolean hasPointerMotionEvents() - trả về giá trị có kiểu boolean nhằm chỉ

rõ rằng thiết bị di động có hỗ trợ khái niệm “nhấp chuột và rê” hay không

void pointerPressed(int x, int y)

void pointerReleased(int x, int y)

void pointer Dragged(int x, int y)

Trang 34

1.3.3 Lớp Graphics

Chúng ta sử dụng đối tượng Graphics để vẽ lên một đối tượng Canvas

a) Hỗ trợ màu

Một ứng dụng MIDP chỉ có một đối tượng Display Đối tượng này để lấy

thông tin của màn hình hiển thị hiện tại, ví dụ như số màu hỗ trợ và các phương

thức để yêu cầu các đối tượng được hiển thị Đối tượng Display đơn giản là một

quản lý sự hiển thị của thiết bị và điều khiển những gì sẽ được hiển thị ra trên thiết bị

boolean isColor()

int numColors()

Phương thức đầu tiên cho biết thiết bị hiển thị có hỗ trợ màu hay không Nếu

có thì phương thức 2 sẽ được gọi để xác định số lượng màu được hỗ trợ Các phương thức dưới đây để lấy màu và thiết lập màu:

Cách 2: dùng từng tham số riêng biệt để xác định mỗi màu

Khi sử dụng một giá trị để lưu giữ màu, thì màu đỏ sẽ chiếm 8 bit đầu kể từ bên trái, tiếp theo là 8 bit dành cho màu xanh lá cây, sau cùng là màu xanh dương

Ví dụ thiết lập màu chỉ sử dụng một số nguyên:

int red = 0,

Trang 35

blue = 255,

green = 128;

g.setColor((red<<16) | (green<<8) | blue);

Xác định màu bằng cách thiết lập giá trị cho 3 tham số:

g.setColor(red, green, blue);

b) Loại nét vẽ

Chúng ta có thể chọn nét khi vẽ đường thẳng, cung và hình chữ nhật trên thiết

bị hiển thị thông qua một số phương thức sau:

int getStrokeStyle()

void setStrokeStyle(int style)

Hai kiểu nét vẽ được định nghĩa trong lớp Graphics là nét chấm và nét liền: g.setStrokeStyle(Graphics.DOTTED);

g.setStrokeStyle(Graphics.SOLID);

c) Vẽ cung

Chúng ta có thể vẽ một cung chỉ có đường bao quanh hoặc được tô đầy bên trong Có thể bắt đầu bằng cách chỉ định chiều bao quanh bên ngoài của một hình hộp chữ nhật tưởng tượng Góc bắt đầu xác định vị trí bắt đầu vẽ cung, với giá trị 0 được xác định tại thời điểm 3 giờ Giá trị dương tính theo chiều ngược chiều kim đồng hồ Góc của cung chỉ ra rằng có bao nhiêu độ được vẽ tính từ góc ban đầu, theo ngược chiều kim đồng hồ

void drawRect(int x, int y, int width, int height)

Trang 36

void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

void fillRect(int x, int y, int width, int height) void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)

Khi vẽ hình chữ nhật có 4 góc là tròn phải xác định đường kính theo chiều

ngang (arcWidth) và đường kính theo chiều dọc (arcHeight) Những tham số

này được định nghĩa độ sắc nét của cung theo mỗi chiều, giá trị càng lớn thể hiện một cung tăng dần, ngược lại là một đường cong hẹp

e) Font chữ

Dưới đây là cách sử dụng font chữ được hỗ trợ bởi giao diện cấp thấp của ứng dụng MIDP Một số phương thức dựng của lớp Font:

Font getFont(int face, int style, int size)

Font getFont(int fontSpecifier)

Các tham số kiểu dáng có thể được kết hợp thông qua toán tử hoặc Ví dụ:

Font font = Font.getFont(Font.FACE_PROPORTIONAL,

Font.STYLE_BOLD | Font.STYLE_ITALIC, Font.SIZE_MEDIUM);

Trang 37

Sau khi có một tham chiếu đến một đối tượng Font, ta có thể truy vấn nó để xác định thông tin của các thuộc tính của nó, thông qua các phương thức:

Kích thước của các font chữ được xác định bởi các chiều cao của font chữ,

bề dài tính bằng điểm ảnh của một chuỗi kí tự trong một font xác định Một số

các phương thức sau hỗ trợ khi tương tác với một đối tượng font:

Hình 1.9: Vị trí các điểm neo trong drawString()

Có 6 điểm neo được định nghĩa trước, 3 theo chiều dọc và 3 theo chiều thẳng đứng Khi xác định điểm neo để vẽ chuỗi (các điểm neo thường được sử dụng thành từng cặp), ta phải chọn một điểm hoành độ và một điểm tung độ Các điểm neo được định nghĩa như sau:

Trang 38

Chiều ngang

LEFT (Bên trái)

HCENTER (Chính giữa của chiều ngang)

RIGHT (Bên phải)

Hình 1.10: Mô tả kết quả của hàm drawString

Bằng cách thay đổi điểm neo chúng ta có thể thay đổi vị trí của chuỗi được hiển thị

g) Vẽ các chuỗi ký tự

Sau khi tìm hiểu về font và các điểm neo chúng ta có thể vẽ chuỗi ký tự ra màn hình thông qua một số phương thức sau:

void drawChar(char character, int x, int y, int anchor)

void drawChars(char[] data, int offset, int length, int x, int y, int anchor) void drawString(String str, int x, int y, int anchor)

void drawSubstring(String str, int offset, int len, int x, int y, int anchor)

Ví dụ minh họa:

Trang 39

// Lấy tâm của vùng hiển thị

int xcenter = getWidth() / 2, ycenter = getHeight() / 2;

// Thiết lập font chữ hiển thị

g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_ITALICS,

Font.SIZE_MEDIUM));

// Chỉ định tâm của chuỗi ký tự (hình hộp bao quanh) sử dụng điểm neo

g.drawString("developerWorks", xcenter, ycenter, Graphics.BASELINE |

Graphics.HCENTER);

}

h) Vẽ ảnh

Lớp Graphics cung cấp một phương thức dùng để vẽ ảnh:

drawImage(Image img, int x, int y, int anchor)

Chúng ta cũng áp dụng từng bước khi vẽ ảnh cũng giống như xuất chuỗi ra màn hình Đối với cả 2 chúng ta đều phải bắt đầu bằng việc thiết lập tọa độ x,

y cũng như điểm neo Danh sách các điểm neo cho việc hiển thị ảnh gần giống với việc xuất chuỗi, tuy nhiên có một điểm khác là một bức ảnh có một điểm

trung tâm Vì thế VCENTER được thay thế cho giá trị BASELINE khi làm việc

với ảnh

Chiều ngang

LEFT (Bên trái)

HCENTER (Điểm chính giữa theo chiều ngang)

RIGHT (Bên phải)

Chiều dọc

TOP (điểm trên)

VCENTER (Điểm chính giữa theo chiều dọc)

BOTTOM (Bên dưới)

Trang 40

Hình 1.11: Vị trí các điểm neo trong drawImage i) Một số phương thức khác của lớp Graphics

clip() và translate() là 2 phương thức của lớp Graphics Một vùng hiển thị

được cắt xén được định nghĩa là khu vực hiển thị của thiết bị di động, vùng này sẽ được cập nhật trong suốt thao tác vẽ lại Một số phương thức hỗ trợ cho việc xén một vùng hiển thị:

void setClip(int x, int y, int width, int height)

void clipRect(int x, int y, int width, int height)

int getClipX()

int getClipY()

int getClipWidth()

int getClipHeight()

translate() là phương thức được sử dụng có liên quan đến hệ thống trục tọa

độ Chúng ta có thể tịnh tiến đến một tọa độ x, y khác Một số phương thức hỗ

trợ cho việc tịnh tiến hệ trục tọa độ:

void translate(int x, int y)

tảng để tạo giao diện người dùng, nhưng trong trường hợp này chỉ cho việc tạo

game GameCanvas chứa một vùng nhớ tách rời với vùng nhớ màn hình cho

Ngày đăng: 04/08/2016, 09:38

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[5] Sun Microsystems Inc, http://www.sun.com Link
[6] Sun Developer Network, http://developers.sun.com [7] Nokia, http://forum.nokia.com Link
[1] Trương Mĩ Dung, Bài giảng Lý thuyết đồ thị, Đại học Khoa học tự nhiên TP.HCM, 2002 Khác
[2] Đoàn Văn Ban, Lập trình Java nâng cao, Nhà xuất bản Khoa học và Kĩ thuật, 2006 Khác
[3] Roger Riggs - Antero Taivalsaari - Jim Van Peursem, Programming Wriless Devices with the Java TM 2 Platform Micro Edition - Second Edition, Addison Wesley, 2003 Khác
[4] John W.Muchow, Core J2ME TM Technology &amp; MIDP, Prentice Hall PTR, 2001 Khác

HÌNH ẢNH LIÊN QUAN

Hình 1.4: Minh họa vòng đời của một MIDlet  1.2.1. Đối tượng Display, Displayable và Screens - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Hình 1.4 Minh họa vòng đời của một MIDlet 1.2.1. Đối tượng Display, Displayable và Screens (Trang 20)
Hình 1.12: Mô tả cách truy cập các RecordStore của các MIDlet - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Hình 1.12 Mô tả cách truy cập các RecordStore của các MIDlet (Trang 44)
Bảng 2-0: Danh sách các yêu cầu nghiệp vụ  2.3 Thiết kế ứng dụng - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Bảng 2 0: Danh sách các yêu cầu nghiệp vụ 2.3 Thiết kế ứng dụng (Trang 53)
Hình 2.2: Sequence Diagram SearchStreets - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Hình 2.2 Sequence Diagram SearchStreets (Trang 60)
Hình 2.3: Collaboration Diagram SearchStreets - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Hình 2.3 Collaboration Diagram SearchStreets (Trang 61)
Hình 2.4: Sequence Diagram SearchPlaces - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Hình 2.4 Sequence Diagram SearchPlaces (Trang 62)
Hình 2.5: Collaboration Diagram SearchPlaces  2.3.4 Thiết kế các lớp - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Hình 2.5 Collaboration Diagram SearchPlaces 2.3.4 Thiết kế các lớp (Trang 63)
Hình 2.6: Thiết kế lớp MapMIDlet - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Hình 2.6 Thiết kế lớp MapMIDlet (Trang 65)
Hình 2.7: Thiết kế lớp MapCanvas - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Hình 2.7 Thiết kế lớp MapCanvas (Trang 66)
Hình 2.8: Thiết kế lớp IndexList - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Hình 2.8 Thiết kế lớp IndexList (Trang 69)
Bảng 2-8: Danh sách các thuộc tính lớp Index - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Bảng 2 8: Danh sách các thuộc tính lớp Index (Trang 70)
Bảng 2-15: Danh sách các phương thức của lớp XMLAttribute - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Bảng 2 15: Danh sách các phương thức của lớp XMLAttribute (Trang 72)
Bảng 2-16: Danh sách các thuộc tính SettingsForm - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Bảng 2 16: Danh sách các thuộc tính SettingsForm (Trang 73)
Hình 2-15 : Giao diện ban đầu khởi chạy của ứng dụng - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Hình 2 15 : Giao diện ban đầu khởi chạy của ứng dụng (Trang 74)
Hình 2-17: Kết quả của việc tìm kiếm địa điểm - Xây dựng bản đồ thái nguyên trên điện thoại di động có hỗ trợ java
Hình 2 17: Kết quả của việc tìm kiếm địa điểm (Trang 75)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w