GIAO DIỆN ĐỒ HỌA CẤP CAO

Một phần của tài liệu LẬP TRÌNH ỨNG DỤNG MOBILE BẰNG JAVA (Trang 44)

4.2.1. Screen:

Lớp Screen không được sử dụng trực tiếp như một đối tượng trong chương trình mà lớp con của nó (Textbox, List, Alert, Form) mới là các thành phần hiển thị trên màn hình. Tại một thời điểm chỉ có duy nhất một đối tượng thuộc một trong các lớp này hiển thị trên màn hình. Đây là điểm khác biệt khi so sánh với các lớp con của lớp Item sau này.

Lớp Screen cũng định nghĩa sẵn một đối tượng Ticker kết buộc với nó. Đối tượng này thể hiện một chuỗi ký tự tự động cuộn liên tục từ phải sang trái màn hình.

Bảng 9:Các phương thức và chức năng của lớp Screen.

Phương thức Mô tả

String getTitle() Lấy tiêu đề của Screen.

Void setTitle(String) Gán tiêu đề cho Screen.

Ticker getTicker() Lấy biến Ticker của Screen.

Void setTicker(Ticker ticker) Gán biến Ticker cho Screen.

4.2.2. Form:

Form là một lớp thông dụng nhất trong các đối tượng Displayable. Nếu khi sử dụng Textbox, List, Alert ta chỉ có thể hiển thị một đối tượng duy nhất tại một thời điểm thì sử dụng Form, chúng ta có thể hiển thị nhiều đối tường có chức năng tương

tự cùng một thời điểm. Để làm được điều này, ta chỉ cần tạo một đối tượng thuộc

lớp Form và gắn vào đối tượng này một hay nhiều đối tượng thuộc lớp con của lớp Item (TextField, DateField, ChoiceGroup, Gauge, ImageItem, StringItem). Lớp Form cũng hỗ trợ sẵn các chữc năng cuộn màn hình nếu thiết bị không hiển thị hết tất cả các Item trong một màn hình.

Các phương thức của lớp Form.

Lớp Form hỗ trợ sẵn các phương thức thêm, xóa, sửa các thành phần trong Form một các dễ dàng. Khi gắn một đối tượng thành phần – một đối tượng thuộc lớp con

của Item – vào Form, ta nhận được một giá trị trả về tương ứng với chỉ mục của thành phần đó trong Form. Với chỉ mục này, ta có thể tham chiếu đến thành phần này khi cần tra cứu hay thay đổi thông tin đối tượng. Sau đây là bảng mô tả các phương thức và chức năng tương ứng của lớp Form, các phương thức này nằm trong lớp javax.microedition.lcdui.Form.

Bảng 10:Các phương thức và chức năng tương ứng của lớp Form.

Phương thức Mô tả

Form(String title) Khởi tạo một Form.

Form(String title, Item[] items) Khởi tạo một Form và thêm các Item vào Form.

int append(Image image) Thêm một biến Image vào Form.

int append(Item item) Thêm một biến Item vào Form.

int append(String string) Thêm một biến String vào Form.

void delete(int itemNum) Xóa một Item khi biến chỉ mục của nó.

void insert(int itemNum, Item item) Chèn một Item vào vị trí chỉ mục cho trước.

Item getItem(int itemNum) Lấy một biến Item khi biết chỉ mục của nó.

void set(int itemNum, Item item) Thay biến item ở chỉ mục cho trước bằng biến Item mới.

Void

setItemStateListener(ItemStateListe ner iListener)

Thêm biến Listener vào Form.

int size() Lấy số Item trong Form.

4.2.3. Item:

Một Item là một thành phần có thể thêm vào Form. Các lớp con của Item gồm: ChoiceGroup, DateField, TextField, Gauge, ImageItem và StringItem. Item thường được dùng chung với lớp ItemStateListener. Khi muốn bắt sự kiện của một Item, ta chỉ cần kết buộc Item đó với 1 biến listener thuộc lớp ItemStateChanged() khi Item kết buộc với nó có sự thay đổi. Trong phương thức này, ta có thể viết xử lý cho các sự kiện cần bắt của Item.

private DateField dfToday;

frmMain = new Form(“Core J2ME”);

dfToday = new DateField(“Today: ”, DateField.DATE); public void itemStateChanged(Item item)

{

if(item == dfToday) { // Xử lý…………} }

Bảng 11:Các phương thức và chức năng tương ứng của lớp Item.

Phương thức Mô tả

String getLabel() Lấy nhãn của Item.

Void setLabel(String label) Gán nhãn cho Item.

4.2.3.1. DateField:

Dùng để hiển thị một đối tượng ngày giờ (java.util.Date) và cho phép người dùng thay đổi giá trị ngày giờ này bằng các phím bấm của thiết bị di động. Giao diện DateField dễ dùng, khi tạo mới một đối tượng DateField, ta có thể lựa chọn cho phép người dùng chỉ thay đổi giá trị ngày tháng, giờ phút hay cả hai:

Bảng 12: Các phương thức và chức năng tương ứng của lớp DateField.

Phương thức Mô tả

DateField (String label, int mode) Khởi tạo một đối tượng DateField. DateField (String label, int mode,

TimeZone timeZone)

Khởi tạo một đối tượng DataField với múi giờ cho trước.

Date getDate () Lấy giá trị ngày tháng của đối tượng.

int getInputMode () Gán giá trị ngày tháng cho đối tượng.

Void setDate (Date date) Lấy thông tin kiểu nhập liệu.

Void setInputMode (int mode) Gán kiểu nhập liệu.

Có thể chọn 1 trong 3 kiểu nhập liệu cho đối tượng DateField:

 DATE: chỉ cho phép người dùng thay đổi giá trị ngày tháng.

 TIME: chỉ cho phép người dùng thay đổi giá trị giờ phút.

 DATE_TIME: cho phép thay đổi giá trị cả ngày, tháng, giờ, phút. Ví dụ: //Tạo 1 biến DateField cho phép người dùng nhập ngày tháng.

DateField dfDate = new DateField(“Ngày tháng ”, DateField.DATE); // Gán ngày tháng hiện thời cho biến dfDate.

dfDate.setDate(new Date());

// Cho phép người dùng thay đổi thông tin ngày tháng và giờ phút. dfDate.setInputMode(DateField.DATE_TIME);

// Lấy thông tin ngày tháng của biến dfDate (thường để lấy giá trị mới mà người dùng nhập).

Date dNewDate = new Date(); dNewDate = dfDate.getDate();

4.2.3.2. Gauge:

Gauge dùng để biểu diễn tiến độ hoàn thành một việc nào đó (download, upload….) hoặc cấp độ từ thấp đến cao (của âm lượng, độ khó….). Gauge đặc trưng bởi hai giá trị: giá trị hiện hành và giá trị cực đại cho phép. Giá trị hiện hành này luôn được duy trì giữa 0 và gía trị cực đại. Gauge gồm 2 dạng:

 Chế độ tương tác (Interactive mode): Trong chế độ này, đối tượng Gauge sẽ

được vẽ dạng các thanh song song có chiều cao tăng dần hiển thị các cấp độ từ thấp đến cao. Người sử dụng có thể điều chỉnh giá trị hiện thời của Gauge bằng các phím. Ví dụ: Điều chỉnh âm lượng cao thấp.

 Chế độ không tương tác (Non-interactive mode): Đối tượng được biểu diễn dạng các thanh song song có chiều cao bằng nhau, người dùng không được phép thay đổi giá trị của nó. Người lập trình sẽ lập trình cho đối tượng này tự động cập nhật giá trị theo thời gian.

Bảng 13:Các phương thức của lớp Gauge.

Phương thức Mô tả

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

Khởi tạo một đối tượng Gauge.

int getMaxValue () Lấy giá trị cực đại cho phép của Gauge.

Void setMaxValue (int maxValue)

int getValue () Lấy giá trị hiện thời của Gauge.

Void setValue (int value) Gán giá trị cho đối tượng Gauge.

boolean isInteractive () Kiểm tra xem Gauge có thuộc chế độ tương

tác không.

Ví dụ: // Tạo một biến Gauge cho phép người dùng điều chỉnh âm thanh (dùng chế độ tương tác).

Gauge gVolume = new Gauge(“Volume”, true, 6, 2); // Gắn Gauge vào Form.

frmMain.append(gVolume);

frmMain.setCommandListener(this);

// Tạo một biến Gauge biểu diễn tiến trình Download (dùng chế độ không tương tác).

Gauge gDownload = new Gauge(“Download Process”, false, 20, 1); // Gắn Gauge vào Form.

frmMain.append(gDownload); frmMain.setCommandListener(this);

// Cập nhất lại giá trị cho Gauge bằng cách sử dụng 1 biến timer // khoảng cách mỗi lần cập nhật là 1000 mili giây.

Timer tTimer = new Timer();

DTTask ttTimeTast = new DTTask(); // class DTTask extends TimerTask. tTime.sheduleAtFixedRate(ttTimerTask, 0, 1000);

// Lớp DDTask được viết trong MIDlet. private class DDTask extends TimerTask {

public final void run() {

// nếu giá trị hiện tại gDownload < giá trị cực đại thì tiếp tục tăng, không thì dừng lại.

if(gDownload.getValue() < gDownload.getMaxValue())

gDownload.setValue(gDownload.getValue() + 1);

cancel();// Xóa toàn bộ. }

}

4.2.3.3. StringItem:

Đối tượng StringItem dùng để hiển thị 1 đoạn văn bản lên màn hình. Người dùng chỉ được phép xem mà không được thay đổi nội dung đoạn văn bản này.

Bảng 14: Các phương thức và chức năng tương ứng của lớp StringItem.

Phương thức Mô tả

StringItem (String label, String text) Khởi tạo một đối tượng StringItem

String getText () Lấy nội dung văn bản.

void setText (java.lang.String text) Gán nội dung văn bản cần hiển thị.

Để lấy giá trị nhãn (label) hay thay đổi nội dung nhãn có thể dùng các phương thức getLabel(), setLabel (String label) của lớp Item.

Ví dụ: // Tạo một đối tượng StringItem

StringItem siText = new StringItem(“User: ”, “John”); // Gắn vào Form

frmMain.append(siText);

// Sau đó muốn hiển thị 1 nội dung khác, chỉ cần thay đổi label và text của đối tượng,

// không cần tạo 1 đối tượng StringItem mới. siText.setLabel(“UserID”);

siText.setText(“12345”);

Lưu ý: Đối tượng lớp String cũng có thể append() vào Form để hiển thị 1 đoạn văn bản nhưng không có hai thành phần nhãn và nội dung riêng biệt như StringItem. Tùy theo yêu cầu của chương trình mà người lập trình có thể lựa chọn đối tượng phù hợp để sử dụng.

4.2.3.4. TextField:

Lớp TextField được sử dụng khi ứng dụng cần người dùng nhập liệu. Không chỉ nhập dữ liệu text mà còn có thể nhập số, password, địa chỉ… Để hỗ trợ cho người lập trình, MIDP đã định nghĩa sẵn một số các ràng buộc (constraints) để đối

tượng tự động kiểm tra tính hợp lệ của dữ liệu nhập vào. Các ràng buộc này là các hằng lớp của lớp TextField gồm:

 EMAILADDR: người dùng chỉ được phép nhập dữ liệu đúng chuẩn của một địa chỉ email.

 NUMERIC: chỉ cho phép nhập số (có thể là âm hay dương), nếu muốn giới hạn

các giá trị được phép nhập thì ứng dụng phải tự xử lý.

 PASSWORD: dữ liệu nhập vào sẽ được hiển thị lên màn hình có dạng dấu *.

 PHONENUMBER: dữ liệu nhập phải đúng chuẩn của số điện thoại.

Và có thể được sử lớp dụng khi kiểm tra ràng buộc cho đối tượng TextBox. Các ràng buộc này được biểu diễn với dạng một số nguyên kiểu int, giá trị được đề cập trong bảng sau:

Các giá trị của ràng buộc là các số nguyên liên tục nên các ràng buộc này phải sử dụng độc lập, không được kết hợp với nhau vì có thể gây sai sót.

Ví dụ: TextField.EMAILADDR | TextField.NUMERIC = 00000000 00000000 00000001 OR 00000000 00000000 00000010 --- = 00000000 00000000 00000011 = TextField.PHONENUMBER

Ngoại trừ PASSWORD có thể kếp hợp với một trong các ràng buộc còn lại bằng toán tử OR mà không gây nhầm lẫn cho chương trình.

Ví dụ: TextField.ANY | TextField.PASSWORD

= 00000000 00000000 00000000

OR 00000001 00000000 00000000

---

= 00000001 00000000 00000000

MIDP cũng cung cấp sẵn giá trị CONSTRAINT_MASK để có thể dễ dàng kiểm tra lại ràng buộc nào đã được sử dụng bằng cách dùng toán tử AND giữa giá trị ràng buộc của đối tượng TextField và CONSTRAINT_MASK.

Ví dụ: tfPassword.getConstraints() 00000001 0000000 00000000

---

AND 00000000 00000000 00000000

Sau đó lấy giá trị này so sánh với các ràng buộc để biết đối tượng TextField đó đã được áp ràng buộc nào.

Bảng 15: Các phương thức và chức năng tương ứng của lớp TextField.

Phương thức Mô tả

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

Khởi tạo một đối tượng TextField với maxSize là số ký tự lớn nhất cho phép mà người dùng nhập vào, constraints là các giá trị ràng buộc khi nhập.

int getConstraints () Lấy giá trị ràng buộc của TextField.

void setConstraints (int constraints) Gán giá trị ràng buộc cho TextField. void insert (char[] data, int offset, int

length, int position)

Chèn chuỗi ký tự có chiều dài length từ vị trí offset trong mảng data vào TextField bắt đầu từ vị trí position.

void insert (String src, int position) Chèn chuỗi src vào TextField bắt đầu từ vị trí position.

void delete (int offset, int length) Xóa chuỗi ký tự có chiều dài length bắt đầu từ vị trí offset.

int getCaretPosition () Lấy vị trí con trỏ hiện hành.

int getChars (char[] data) Lấy giá trị TextField ra một mảng ký tự.

void setChars (char[] data, int offset, int length)

Gán giá trị cho TextField bằng length ký tự có vị trí bắt đầu offset trong mảng data. void setString (java.lang.String text) Gán giá trị text cho TextField.

String getString() Lấy giá trị TextField.

int getMaxSize () Lấy kích thước tối đa của TextField.

int setMaxSize (int maxSize) Gán kích thước tối đa cho TextField.

int size () Lấy kích thước thật của TextField.

Ví dụ: // Tạo các đối tượng TextField để nhập địa chỉ mail, số điện thoại.

TextField tfPhone = new TextField(“Phone: ”, “”, 10, TextField.PHONENUMBER); // gắn vào Form. frmMain.append(tfAddr); frmMain.append(tfPhone); 4.2.3.5. ChoiceGroup:

Lớp Choice được sử dụng để biểu diễn một danh sách các khả năng cho người lựa chọn. ChoiceGroup kế thừa từ interface Choice, ChoiceGroup cũng giống như List. Nhưng List nằm trong Screen còn ChoiceGroup nằm trong lớp Item của Form, gồm hai dạng:

 Cho phép chọn nhiều khả năng (Multiple): Thể hiện danh sách các khả năng

lên màn hình dạng checkbox và cho phép người đánh dấu check lên các lựa chọn.

 Chỉ được phép chọn một khả năng (Exclusive): Thể hiện danh sách các khả

năng lên màn hình cùng các radio button và chỉ cho phép người dùng chọn duy nhất một khả năng.

Bảng 16:Các phương thức và chức năng tương ứng của lớp ChoiceGroup.

Phương thức Mô tả

ChoiceGroup (String label, int choiceType)

Khởi tạo đối tượng ChoiceGroup 2 kiểu type là choiceType. choiceType là một trong hai giá trị Choice.EXCLUSIVE và Choice.MULTIPLE. Với choiceType là EXCLUSIVE thì phần tử đầu tiên là mặc định được chọn.

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

Khởi tạo đối tượng ChoiceGroup, cho trước khả năng lựa chon và biểu tượng của từng vùng chọn.

int append (String stringPart, Image imagePart)

Thêm một phần tử vào cuối ChoiceGroup.

elementNum)

Image getImage (int

elementNum)

Lấy biểu tượng ở vị trí elementNum.

int getSelectedFlags (boolean[]

selectedArray_return)

Lấy thông tin kết quả lựa chọn vào mảng.

int getSelectedIndex () Lấy vị trí của phần tử được chọn.

String getString (int

elementNum)

Lấy giá trị của phần tử ở vị trí elementNum.

void insert (int elementNum, String stringElement, Image imageElement)

Chèn một phần tử mới vào vị trí elementNum.

boolean isSelected (int elementNum)

Kiểm tra phần tử ở vị trí elementNum có được chọn không.

void set (int elementNum, java.lang.String stringPart, Image imagePart)

Gán giá trị và biểu tượng cho vị trí elementNum.

void setSelectedFlags (boolean[] selectedArray)

Gán kết quả lựa chọn cho đối tượng ChoiceGroup.

void setSelectedIndex (int elementNum, boolean selected)

MULTIPLE gán giá trị được chọn hay không được chọn cho choicegroup ở vị trí elementNum. EXCLUSIVE gán giá trị cho phần tử ở vị trí elementNum là được chọn mà không cần quan tâm đến giát trị selected.

int public int size () Lấy số phần tử của ChoiceGroup.

 Bắt sự kiện cho đối tượng ChoiceGroup, có thể dùng hai cách để bắt sự kiện cho đối tượng ChoiceGroup:

 ItemStateListener: khi Form chứa đối tượng ChoiceGroup đã gọi phương thức

setItemStateListener() thì khi người dùng chọn vào bất cứ khả năng nào, phương thức itemStateChanged() sẽ được gọi thực hiện. Cách này nên dùng cho

ChoiceGroup dạng chỉ cho phép chọn một khả năng hoặc một số trường hợp đặc biệt.

 CommandListener: Khi gắn đối tượng ChoiceGroup vào Form thì tạo thêm một

Command (tên là OK chẳng hạn). Khi người dùng chọn xong thì nhấn chọn Command này và chương trình sẽ gọi phương thức commandAction() để xử lý. Cách này có thể sử dụng để bắt sự kiện cho cả hai loại ChoiceGroup cũng như các đối tượng Item khác.

Ví dụ 1: // Tạo một đối tượng ChoiceGroup chỉ được chọn một khả năng: ChoiceGroup cgExclusive = new ChoiceGroup(“Email Options”, Choice.EXCLUSIVE);

// Lần lược thêm các phần tử cho đối tượng, không kèm biểu tượng. CgExclusive.append(“Read”, null) ;

CgExclusive.append(“Forward”, null);

int iReplyIndex = cgExlusive.append(“Reply”, null); cgexclusive.append(“Delete”, null); // Gán “Reply” là phần tử được chọn. cgexclusive.setSeletedIndex(iReplyIndex, true); // Gắn vào Form frmMain.append(cgExclusive); // Bắt sự kiện.

public void itemStateChanged(Item item) {

if(item == cgExclusive){//………….} }

Ví dụ 2: // Tạo 1 đối tương ChoiceGroup cho phép chọn nhiều khả năng: ChoiceGroup cgMultiple = new ChoiceGroup(“Multiple Choice”, Choice.MULTIPLE);

// Lần lượt thêm các phần tử cho đối tượng, không thèm biểu tượng. cgMultiple.append(“Auto Indent”, null);

cgMultiple.append(“Replace Tabs”, null); cgMultiple.append(“Warp Text”, null);

// Tạo 1 command OK để bắt sự kiện.

Command cmOK = new Command (“OK”, Command.Screen, 1); // Gắn vào Form.

int iChoiceGroupIndex = frmMain.append(cgMultiple); frmMain.addCommand(cmOK);

frmMain.setCommandListener(this); // xử lý sự kiện.

public void commandAction (Command c, Displayable d) {

if(c == cmOK) {// ……… } }

4.2.3.6. Image:

Là một đối tượng chứa dữ liệu ảnh đồ họa, gồm hai dạng:

Một phần của tài liệu LẬP TRÌNH ỨNG DỤNG MOBILE BẰNG JAVA (Trang 44)

Tải bản đầy đủ (PDF)

(156 trang)