Canvas và Screen là hai lớp con của lớp Displayable nên cùng kế thừa phương thức abstract paint() của lớp cha. Trong khi phương thức paint() trong lớp Screen và các lớp con của nó đã được dựng sẵn để vẽ các đối tượng đồ hoạ cấp cao(title, ticker, form, textbox, list, alert…) lên màn hình thì trong lớp Canvas, phương thức này vẫn
được khai báo với từ khoá abstract, nghĩa là phải viết xử lý cho phương thức này ở
lớp con của Canvas (lớp kế thừa mà ta xây dựng để vẽ lên màn hình). abstract public class Displayable {
abstract void paint(Graphics g); }
Java Mobile
public abstract class Canvas extends Displayable { protected abstract void paint(Graphics g); }
public abstract class Screen extends Displayable { abstract void paintContent(Graphics g);
paint(Graphics g){ // gắn tiêu đề //gắn đối tượng Ticker … paintContent(g); } }
public class Form extends Screen {
void paintContent(Graphics g){… } }
public class TextBox extends Screen { void paintContent(Graphics g) {… } }
public class List extends Screen implements Choice { void paintContent(Graphics g){… }
}
public class Alert extends Screen{
void paintContent(Graphics g){… } }
Java Mobile
Các phương thức hỗ trợ vẽ của lớp Canvas:
Lớp Canvas: javax.microedition.lcdui.Canvas
Phương thức Chức năng
abstract void paint (Graphic g) vẽđối tượng g lên Canvas final void repaint () yêu cấu vẽ Canvas
final void repaint (int x, int y, int width, int height)
yêu cấu vẽ một vùng của Canvas ((x,y) là toạ độ góc trái trên; width, height là kích thước vùng cần vẽ lại)
final void serviceRepaints() xử lý các yêu cầu vẽ còn treo
boolean isDoubleBuffered () kiểm tra thiết bị có hỗ trợ hai buffer không
Bảng 5.2 Lớp Canvas
Phương thức paint() được dùng để xử lý các sự kiện vẽ trong đối tượng Canvas. Nhưng khi cần yêu cầu thiết bị vẽ lại màn hình thì không gọi trực tiếp phương thức này mà gọi phương thức repaint(). Phương thức repaint() này sẽ gọi hàm paint() để
vẽ lại toàn bộ hay một phần màn hình.
Phương thức serviceRepaint() yêu cầu tất cả các yêu cầu vẽ trước đó phải được thực hiện ngay. Do đó, khi gọi phương thức này các tiến trình khác sẽ bị block cho đến khi tất cả các phương thức vẽđược thực hiện.
Các phương thức hỗ trợ giao tiếp với Application Manager:
Lớp Canvas: javax.microedition.lcdui.Canvas
Phương thức Chức năng
void showNotify () Được gọi trước khi application manager vẽ đối tượng canvas lên màn hình
void hideNotify () Được gọi sau khi application manager xoá
đối tượng canvas khỏi màn hình
Bảng 5.3 Giao tiếp với Application Manager
Java Mobile
protected void showNotify(){ }; protected void hideNotify(){ };
và được gọi bởi application manager trước khi vẽ và sau khi xoá đối tượng canvas lên màn hình. Do đó, không gọi trực tiếp các phương thức này trong chương trình. Mà chỉ nên viết code trong các phương thức này để cấp phát, khởi tạo các biến cũng như tạo lập hay hủy các tiến trình xử lý cho việc vẽ các đối tượng lên Canvas.