Luận văn Nghiên cứu java mobile và xây dựng ứng dụng minh họa

Tiền kiểm tra (Pre-verification): Trước khi một lớp được nạp vào thiết bị,

một phần mềm sẽ được sửdụng đểthêm vào một sốthông sốbổsung vào

file class. Quá trình này giảm thời gian và bộnhớcần thiết đểmáy ảo thực

hiện giai đoạn 2 trong quá trình kiểm tra

pdf234 trang | Chia sẻ: huong.duong | Lượt xem: 1211 | Lượt tải: 1download
Bạn đang xem trước 20 trang tài liệu Luận văn Nghiên cứu java mobile và xây dựng ứng dụng minh họa, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hết hạn. VD: Alert alTest = new Alert (“Alert”); alTest.setTimeout (Alert.FOREVER); ... display.setCurrent (alTest); 73 Java Mobile Lớp Alert là lớp con của Screen, Screen là lớp con của Displayable nhưng đối tượng Alert không được phép gọi trực tiếp một số hàm sau của lớp Displayable: • addCommand(Command) • removeCommand(Command) • setCommandListener(CommandListener) Điều này nghĩa là đối tượng Alert không được phép gắn thêm nút (đối tượng Command ) cũng như không xử lý và bắt sự kiện. Đối tượng này chỉ có chức năng gửi thông báo đến người dùng chứ không thêe nhận phản hồi từ người dùng. Nếu đối tượng Alert gọi các hàm này thì sẽ bị phát sinh Exception IllegalStateException. 4.6.2. AlertType: AlertType là lớp định nghĩa sẵn các loại Alert cho thiết bị, hỗ trợ âm thanh tương ứng khiAlert hiển thị. Gồm năm loại: • Báo giờ (alarm) • Nhắc lại (confirmation) • Báo lỗi (error) • Thông báo (info) • Cảnh báo (warning) Âm thanh của Alert có thể được chơi bằng một trong hai cách: • Nếu đối tượng Alert được gán loại Alert trước thì âm thanh tương ứng của loại Alert này sẽ được phát khi đối tượng hiển thị lên màn hình. VD: Alert alWarning = new Alert (“Alert”, “Message”, null, AlertType.WARNING); hay Alert alTest =new Alert (“Alert”, “Message”, null, null); alTest.setType(AlertType.WARNING); 74 Java Mobile • Phát âm thanh Alert trực tiếp mà không cần tạo một đối tượng Alert nghĩa là chỉ phát âm thanh thông báo mà không hiển thị lên màn hình, bằng cách dùng phương thức: AlertType..playSound (Display); cách này có thể dùng khi chỉ cần báo cho ngưòi dùng biết về sự kiện mà không cần hiển thị thông tin trực tiếp lên màn hình. Các sự kiện khác nhau có thể được thông báo bằng các âm thanh khác nhau. VD: AlertType.CONFIRMATION.playSound(fmMain); Hay AlertType.ALARM.playSound(fmMain); Các loại AlertType được định nghĩa trước: Giá trị Ý nghĩa ALARM Báo giờ hoặc nhắc nhở CONFIRMATION Thông báo hoàn tất 1 công việc nào đó ERROR Báo lỗi INFO Thông báo chung WARNING Khuyến cáo Bảng 4.18 AlertType Lớp AlertType chỉ hỗ trợ một phương thức duy nhất là boolean playSound (Display display) để gọi thực hiện chức năng play sound của đối tượng AlertType. VD: //tạo một đối tượng Alert có kèm hình ảnh và âm thanh dạng thông báo khi hiển thị Image img = Image.createImage(“/coffee.png”); Alert alAlert= new Alert (“Hello”, “It’s time for coffee”, img, AlertType.INFO); //gán kiểu Modal Alert alAlert.setTimeout(Alert.FOREVER); …. 75 Java Mobile //gọi hiển thị Alert display.setCurrent(alAlert, fmMain); Hình 4.12 Giao diện đối tượng Alert 76 Java Mobile 4.7. Ticker: Ticker là lớp hỗ trợ hiển thị chuỗi ký tự cuộn liên tục trên màn hình. Đối tượng Ticker có thể được gắn vào bất kỳ đối tượng Screen nào, kể cả Alert. Vị trí chuỗi ký tự ở trên hay dưới màn hình, cũng như tốc độ cuộn phụ thuộc vào đặc tả MIDP. Các phương thức và chức năng tương ứng của lớp Ticker: Lớp Ticker: javax.microedition.lcdui.Ticker Phương thức Chức năng Ticker (String strText) Tạo một đối tượng Ticker với nội dung chuỗi cuộn strText cho trước String getString () Lấy chuỗi ký tự của Ticker void setString (String strText) Gán chuỗi ký tự cho Ticker Bảng 4.19 Lớp Ticker VD: //tạo đối tượng Ticker Ticker tkMessage = new Ticker (“Wellcome to J2ME, have a nice day!!!”); //gắn vào form fmMain.setTicker(tkMessage); Hình 4.13 Giao diện Ticker 77 Java Mobile Chương 5: Giao diện đồ họa cấp thấp Đồ hoạ cấp thấp trong J2ME được hỗ trợ chủ yếu qua hai lớp chính là Canvas và Graphics. Lớp Canvas có dạng một phông có kích thước cố định và những gì vẽ lên phông này sẽ được hiển thị cho người dùng. Lớp Canvas cũng hỗ trợ các phương thức bắt sự kiện ở cấp thấp Lớp Graphics cung cấp những đối tượng để vẽ lên Canvas (hay được gọi là những ngữ cảnh đồ họa (graphics context)). Lớp Graphics hỗ trợ vẽ các đối tượng đường thẳng, đừơng tròn, hình chữ nhật, text… cũng như các phương thức chọn màu và font chữ. 5.1. Canvas: Canvas là lớp con của lớp Displayable (ngang cấp với lớp Screen), nghĩa là có thể gắn thêm các đối tượng Command vào Canvas để bắt sự kiện như Form. Khi sử dụng, không tạo trực tiếp một đối tượng Canvas mà xây dựng một lớp kế thừa lớp này và xử lý các chức năng đồ hoạ của chương trình bên trong lớp con này. VD: class MyFirstCanvas extends Canvas implements CommandListener{ … Command cmdExit =new Command(“Exit”, Command.EXIT, 1); addCommand(cmdExit); setCommandListener(this); … } MyFirstCanvas mfcCanvas = new MyFisrtCanvas(this); display.setCurrent(mfcCanvas); 78 Java Mobile 5.1.1. Hệ toạ độ: Tương tự hệ toạ độ trong lập trình Windows, gốc toạ độ (0,0) nằm ở góc trái trên của màn hình. Tung độ y tăng dần theo chiều dọc từ trên xuống, hoành độ x tăng dần theo chiều từ trái sang phải. Độ dày mặc định của các đối tượng đồ hoạ trong J2ME là 1 pixel. Đối tượng Canvas đặc trưng bởi 2 giá trị là chiều dài và chiều rộng. Hai giá trị này là cố định cho các đối tượng Canvas khác nhau đựơc tạo lập trong cùng một thiết bị và phụ thuộc vào loại thiết bị di động. Các phương thức của lớp Canvas để truy vấn các giá trị này: Lớp Canvas: javax.microedition.lcdui.Canvas Phương thức Chức năng int getWidth () Lấy giá trị độ rộng đối tượng Canvas int getHeight () Lấy giá trị độ dài đối tượng Canvas Bảng 5.1 Truy vấn kích thước Canvas 5.1.2. Vẽ trên đối tượng Canvas: 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); } 79 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){… } } 80 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 Các phương thức này đựơc khai báo trong lớp Canvas với kiểu protected 81 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. 5.1.3. Bắt sự kiện trong các đối tượng Canvas: Đối tượng canvas có thể hỗ trợ bắt sự kiện dưới hai cấp độ: • bắt sự kiện cấp cao: thêm một hay nhiều đối tượng Command vào đối tượng Canvas và bắt sự kiện thông qua các Command này (dùng CommandListener) • bắt sự kiện cấp thấp: bắt sự kiện các phím số trên thiết bị cũng như các sự kiện con trỏ, sự kiện trong game… 5.1.3.1 Bắt sự kiện cấp cao: Lớp Canvas cũng là lớp con của Displayable như lớp Screen do đó cũng kế thừa các phương thức hỗ trợ Command như lớp Screen, gồm: • addCommand(Command) • isShown() • removeCommand(Command) • setCommandListener(CommandListener) VD: class TestCanvas extends Canvas implements CommandListener { private Command cmExit; // Exit MIDlet ... cmExit = new Command("Exit", Command.EXIT, 1); addCommand(cmExit); setCommandListener(this); 82 Java Mobile ... public void commandAction(Command c, Displayable d) { if (c == cmExit) {...} } } 5.1.3.2 Bắt sự kiện cấp thấp: Sử dụng mã phím(key code) Mã phím là các giá trị nguyên gán cho các phím tương ứng trong thiết bị di động. Các mã phím này được gán với các tên tương ứng cho dễ nhớ như: public static final int KEY_NUM0 = 48; public static final int KEY_NUM1 = 49; … Bảng mã phím các phím bàn phím ITU-T (0-9, *, #) Lớp Canvas: javax.microedition.lcdui.Canvas Tên Giá trị KEY_NUM0 48 KEY_NUM1 49 KEY_NUM2 50 KEY_NUM3 51 KEY_NUM4 52 KEY_NUM5 53 KEY_NUM6 54 KEY_NUM7 55 KEY_NUM8 56 KEY_NUM9 57 KEY_STAR 42 KEY_POUND 35 Bảng 5.4 Mã Phím 83 Java Mobile Lớp Canvas hỗ trợ việc bắt sự kiện các phím này bằng các phương thức: Lớp Canvas: javax.microedition.lcdui.Canvas Phương thức Chức năng void keyPressed (int keyCode) được gọi khi người dùng nhấn phím void keyReleased (int keyCode) được gọi khi người dùng nhả phím void keyRepeated (int keyCode) được gọi khi người dùng nhấn 1 phím nhiều lần (một số thiết bị không hỗ trợ phương thức này) boolean hasRepeatEvents () kiểm tra thiết bị có hỗ trợ nhấn 1 phím nhiếu lần không String getKeyName () lấy tên phím tương ứng của mã phím Bảng 5.5 Sự kiện keyPressed Các phương thức keyPressed(), keyReleased() và keyRepeated() được khai báo trong lớp Canvas với thuộc tính protected. protected void keyPressed (int keyCode){ }; protected void keyReleased (int keyCode){ }; protected void keyRepeated (int keyCode){ }; Do đó, muốn bắt sự kiện nào thì ta chỉ cần khai báo phương thức tương ứng trong lớp kế thừa Canvas và viết code xử lý cho phương thức đó. Vd: protected void keyPressed(int keyCode) { switch (keyCode) { KEY_NUM1: … break; KEY_NUM2: … break; … } } 84 Java Mobile 5.1.4. Game action: MIDP cũng hỗ trợ lập trình game bằng cách định nghĩ sẵn một bộ các phím bấm xử lý sự kiện game. Mỗi sự kiện game cũng được gán bởi một số nguyên như sự kiện phím bấm. Các sự kiện chính bao gồm các sự kiện sang trái, sang phải, lên, xuống và bắn. Với các loại điện thoại có hỗ trợ các phím di chuyển thì các sự kiện này sẽ được gán trực tiếp cho các phím đó. Nếu không, có thể gán các sự kiện này với các phím số 2, 4, 6, 8, 5. Lớp Canvas: javax.microedition.lcdui.Canvas Tên sự kiện Mô tả Giá trị UP di chuyển lên trên 1 DOWN di chuyển xuống dưới 6 LEFT di chuyển sang trái 2 RIGHT di chuyển sang phải 5 FIRE bắn 8 GAME_A Tuỳ chọn 9 GAME_B Tuỳ chọn 10 GAME_C Tuỳ chọn 11 GAME_D Tuỳ chọn 12 Bảng 5.6 Sự kiện Game Action 85 Java Mobile Các phương thức sử dụng cho lập trình game: Lớp Canvas: javax.microedition.lcdui.Canvas Phương thức Chức năng int getKeyCode (int gameAction) lấy mã phím tương ứng với hành động game int getGameAction (int keyCode) xác định hành động game tương ứng với mã phím cho trước Bảng 5.7 Bắt sự kiện trong Game Action VD: //lấy mã phím tương ứng cho các hành động trong game: int keyFire = getKeyCode(FIRE); int keyRight = getKeyCode(RIGHT); … //lấy loại hành động game để xử lý protected void keyRepeated (int keyCode) { switch (getGameAction (keyCode)) { case Canvas.FIRE: … break; case Canvas.LEFT:… break; } } Một hành động game có thể gán cho nhiều phím bấm, chẳng hạn gán cho cả phím chức năng (trái, phải, lên, xuống) lẫn các phím số. Khi đó, người dùng có thể bấm phím chức năng sang trái hay phím số 4 đều phát sinh sự kiện game LEFT như nhau. 86 Java Mobile 5.1.5. Sự kiện con trỏ: MIDP cũng hỗ trợ các phương thức để lập trình trên thiết bị di động có sử dụng con trỏ như chuột hay màn hình cảm ứng. Lớp Canvas: javax.microedition.lcdui.Canvas Phương thức Chức năng boolean hasPointerEvents() kiểm tra thiết bị có hỗ trợ con trỏ không boolean hasPointerMotionEvents() kiểm tra thiết bị có khả năng nhận các chuyển động của con trỏ không void pointerDragged(int x, int y) được gọi khi người dùng rê con trỏ, (x,y) là toạ độ con trỏ. void pointerPressed(int x, int y) được gọi khi người dùng nhấn nút con trỏ void pointerReleased(int x, int y) được gọi khi người dùng nhả con trỏ Bảng 5.8 Sự kiện con trỏ Các sự kiện con trỏ cũng được xử lý tương tự các sự kiện phím bấm. Nếu thiết bị có hỗ trợ xử lý sự kiện con trỏ, các phương thức pointerDragged(), pointerPressed(), pointerReleased() sẽ được gọi khi người dùng rê, nhấn nút hay nhả con trỏ. Các phương thức pointerDragged(), pointerPressed(), pointerReleased() cũng được khai báo trong lớp Canvas với thuộc tính protected nên nếu muốn xử lý sự kiện con trỏ cho chương trình phải khai báo hàm với tên tương ứng trong lớp con của chương trình và viết xử lý bên trong VD: protected void pointerPressed(int x, int y) { // xác định vị trí điểm đầu startx = x; starty = y; } protected void pointerDragged(int x, int y) { // xác định vị trí điểm hiện tại 87 Java Mobile currentx = x; currenty = y; repaint(); } protected void pointerReleased (int x, int y) { //xác định vị trí điểm cuối endx = x; endy = y; repaint(); } 88 Java Mobile 5.2. Graphics: Đối tượng Graphics dùng để vẽ lên màn hình Canvas. Lớp Graphics cung cấp sẵn trên 30 phương thức hỗ trợ vẽ các đối tượng hình học cơ bản (đường thẳng, đường tròn, hình chữ nhật…), text, cũng như điều khiển màu sắc, phông chữ… Có thể sử dụng lớp Graphics trong hai trường hợp: • Trong phương thức paint() của lớp Canvas: protected void paint(Graphics g){ … } đối tượng Graphics này chỉ có giá trị bên trong phương thức paint(), ra khỏi phương thức này thì không còn dùng để vẽ lên Canvas được nữa. • Trong các đối tượng mutable image: Các immutable image thường được tạo từ file hay resource, có tính cố định, không thay đổi. Do đó, người ta thường dùng immutable image làm biểu tượng cho các thành phần trong ChoiceGroup, Form, List hay Alert. Ngược lại, đối tượng mutable image chỉ là một vùng nhớ có kích thước cố định được cấp khi khởi tạo. VD: Image iImage=Image.createImage(80,20); Graphics gGraphics=iImage.getGraphics(); Đối tượng Graphics được tạo theo cách này có giá trị cùng với đối tượng Image. Khi đối tượng Image bị huỷ thì đối tượng Graphics tương ứng cũng bi huỷ theo. 89 Java Mobile Các phương thức và chức năng của lớp Graphics: Lớp Graphics: javax.microedition.lcdui.Canvas Phương thức Chức năng void setColor (int RGB) Gán giá trị màu sắc, kết hợp các giá trị 3 màu cơ bản (đỏ, lục, xanh dương) trong một số nguyên void setColor (int red, int green, int blue) Gán giá trị màu sắc theo các thành phần riêng biệt int getColor () Lấy giá trị màu int getBlueComponent() Lấy giá trị thành phần màu xanh dương trong đối tượng int getGreenComponent() Lấy giá trị thành phần màu xanh lục trong đối tượng int getRedComponent() Lấy giá trị thành phần màu đỏ trong đối tượng void setGrayScale (int value) Gán giá trị grayscale int getGrayScale () Lấy giá trị grayscale hiện tại int getStrokeStyle () Lấy kiểu nét vẽ void setStrokeStyle (int style) Gán kiểu nét vẽ, style có thề mang 1 trong 2 giá trị Graphics.DOTTED hay Graphics.SOLID Bảng 5.9 Lớp Graphics (Grayscale là một số nguyên kiểu int có giá trị từ 0 đến 255 biểu thị độ sáng của màu xám (shade of gray) ) 5.2.1. Màu sắc: Màu sắc trong đối tượng Graphics được tạo từ 3 màu cơ bản là đỏ, xanh lục và xanh dương(RGB) được biểu diễn bởi 24 bit màu, mỗi màu chiếm 8 bit. Nếu thiết bị không hỗ trợ hiển thị màu hay chỉ hỗ trợ với số màu ít hơn thì thiết bị sẽ tự chuyển 90 Java Mobile đổi để hiển thị ra màu gần nhất so với yêu cầu. Grayscale dùng để hiển thị các sắc độ màu khác nhau trên màn hình trắng đen. Khi gán màu cho đối tượng Graphics, có thể dùng một trong 2 cách: • Kết hợp 3 màu (đỏ, xanh dương và xanh lục) trong một số nguyên kiểu int hay biểu diễn từng thành phần trong từng số int. Khi kết hợp 3 màu với nhau, mỗi màu được biểu diễn bởi 8 bit và xếp theo thứ tự từ cao xuống thấp là đỏ, xanh lục và xanh dương. R R R R R R R R G G G G G G G G B B B B B B B B RED GREEN BLUE Do đó, để kết hợp 3 giá trị màu này vào một số nguyên kiểu int, ta phải dịch bit để có kết quả chính xác. Giá trị màu đỏ sẽ dịch trái 16bits, giá trị màu xanh lục dịch trái 8 bits và giá trị màu xanh dương chiếm 8 bit thấp nhất. VD: int red=0; 0 0 0 0 0 0 0 0 int reen=127; 0 1 1 1 1 1 1 1 int blue=255; 1 1 1 1 1 1 1 1 int color=(red<<16) | (green<<8) | blue; 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 RED GREEN BLUE g.setColor(color); //g là đối tượng kiểu Graphics //Gán giá trị cho từng màu cơ bản riêng biệt: int red=0; int green=127; int blue=255; g.setcolor(red, green, blue); 91 Java Mobile Tương tự, khi lấy giá trị màu, ta cũng có thể lấy ra dưới dạng kết hợp hay từng màu riêng biệt. Nếu lấy giá trị màu dưới dạng kết hợp, để có được giá trị màu cho từng màu cơ bản cần phải bỏ đi các bit không thích hợp. Vd: int color, red, green, blue; color= g.getColor(); //g là đối tượng kiểu Graphics red=(color & 0xFF0000)>>16; green=(color & 0xFF00)>>8; blue=color & 0xFF; Có thể kiểm tra thiết bị di động có màn hình màu không bằng phương thức: javax.microedition.lcdui.Display.isColor(). Ngoài ra có thể lấy số màu thiết bị có hỗ trợ bằng phương thức javax.microedition.lcdui.Display.numColors(). , nếu thiết bị chỉ có màn hình trắng đen thì giá trị trả về là giá trị grayscale mặc định. 92 Java Mobile 5.2.2. Nét vẽ: Kiểu nét vẽ (stroke style): Khi vẽ đường thẳng, đường tròn, hay hình chữ nhật, ta có thể lựa chọn kiểu nét vẽ là nét liền (Graphics.SOLID) hay cách khoảng (Graphics.DOTTED). Nét liền là giá trị mặc định của các kiểu vẽ. Các phương thức vẽ: Lớp Graphics: javax.microedition.lcdui.Canvas Phương thức Chức năng void drawLine (int x1, int y1, int x2, int y2) Vẽ đường thẳng từ điểm (x1, y1) đến điểm (x2, y2) void drawArc (int x, int y, int width, int height, int startAngle, int acrAngle) vẽ đường cong góc arcAngle bắt đầu từ góc startAngle nội tiếp hình chữ nhật xác định bởi góc trái trên (x,y) và chiều dài hai cạnh width, height void fillArc (int x, int y, int width, int height, int startAngle, int acrAngle) vẽ đường cong góc arcAngle bắt đầu từ góc startAngle nội tiếp hình chữ nhật xác định bởi góc trái trên (x,y) và chiều dài hai cạnh width, height và tô màu bên trong đường cong vừa vẽ. void drawRect (int x, int y, int width, int height) vẽ hình chữ nhật với góc trái trên (x,y) và chiều dài hai cạnh width, height void drawRoundRect (int x, int y, int width, int height, int arcW, int arcH) vẽ hình chữ nhật với các góc tròn. arcW và arcH là kích thước của hình chữ nhật ngoại tiếp góc cong void fillRect (int x, int y, int width, int height) tô hình chữ nhật void fillRoundRect (int x, int y, int width, int height, int arcW, int arcH) tô hình chữ nhật góc tròn Bảng 5.10 Các phương thức vẽ 93 Java Mobile VD: g.drawArc(5, 5, 75, 75, 0, 225); g.drawArc(80, 70, 75, 100, 90, 225); g.fillArc(5, 5, 75, 100, 0, 360); g.fillArc(75, 100, 75, 50, 90, 300); Hình 5.1 Các phương thức vẽ đường cong Hình chữ nhật gồm 4 loại: • Hình chữ nhật thường, không tô • Hình chữ nhật góc cong, không tô • Hình chữ nhật thường, tô đặc • Hình chữ nhật góc tròn, tô đặc Hình chữ nhật góc tròn là hình chữ nhật trong đó các góc được vẽ theo dạng đường cong chứ không phải là góc vuông như hình chữ nhật thông thường. Trong đó các góc cong là ¼ đường cong nội tiếp hình chữ nhật kích thước rộng dài tương ứng là arcW và arcH. VD: 94 Java Mobile g.drawRect(1, 1, 60, 40); g.drawRoundRect(70, 50, 60, 40, 30, 40); g.fillRect(1, 1, 60, 40); g.fillRoundRect(70, 50, 60, 40, 30, 40); Hình 5.2 Các phương thức vẽ hình chữ nhật Các phương thức hỗ trợ vẽ text : Lớp Graphics: javax.microedition.lcdui.Graphics Phương thức Chức năng void drawChar (char character, int x, int y, int anchor) vẽ ký tự character lên màn hình void drawChars (char[] data, int offset, int length, int x, int y, int anchor) vẽ chuỗi ký tự data với chiều dài length từ vị trí offset lên màn hình void drawString (String str, int x, int y, int anchor) vẽ chuỗi str lên màn hình 95 Java Mobile void drawSubstring (String str, int offset, int len, int x, int y, int anchor) vẽ chuỗi con có chiều dài len , từ vị trí offset của chuỗi str lên màn hình Font getFont() lấy đối tượng Font hiện tại void setFont () gán Font cho đối tượng Graphics Bảng 5.11 Xử lý Text Khi vẽ text lên màn hình, bất kể đó là một ký tự hay một chuỗi ký tự, ta phải cung cấp đủ ba tham số: x, y và anchor. Trong đó, (x, y) là toạ độ điểm gốc, và anchor là vị trí tương đối của điểm gốc so với đoạn text sẽ được hiển thị. Các vị trí tương đối của anchor đã được định nghĩa sẵn trong lớp Graphics, gồm: Lớp Graphics: javax.microedition.lcdui.Graphics Tên anchor Mô tả Vị trí LEFT lề trái của ký tự / chuỗi chiều ngang HCENTER điểm giữa của ký tự / chuỗi chiều ngang RIGHT lề phải của ký tự / chuỗi chiều ngang TOP điểm cao nhất của ký tự / chuỗi chiều dọc BASELINE dòng chuẩn của ký tự / chuỗi chiều dọc BOTTOM điểm cao nhất của ký tự/ chuổi chiều dọc Bảng 5.12 Giá trị Anchor Khi sử dụng, biến anchor thường được kết hợp bởi hai kiểu định vị theo chiều ngang và chiều dọc để được vị trí tương đối của điểm gốc. VD: //vẽ chuỗi “Hello J2ME” với góc trái trên trùng góc trái trên của màn hình g.drawString (str, 0, 0, Graphics.TOP| Graphics.LEFT); //vẽ chuỗi “Hello J2ME” ngay giữa màn hình, nghĩa là điểm giữa trùng với điểm giữa của màn hình g.drawString (str, getWidth()/2, getHeight()/2, Graphics.BASELINE| Graphics.HCENTER ); 96 Java Mobile //vẽ chuỗi “Hello J2ME” với phải dưới trên trùng góc phải dưới của màn hình g.drawString (str, getWidth(), getHeight(), Graphics.BOTTOM | Graphics.RIGHT); Hình 5.3 Các phương thức hỗ trợ vẽ Text Hình 5.4 Các định dạng trong Text Graphic 97 Java Mobile 5.2.3. Font chữ: Lớp Font: Lớp Font: javax.microedition.lcdui.Font Phương thức Chức năng static Font getFont (int face, int style, int size) tạo đối tượng Font static Font getDefaultFont () tạo đối tượng Font mặc định int getFace () lấy face hiện tại int getStyle () lấy kiểu chữ (đậm, in nghiêng, gạch dưới) int getSize () lấy cỡ chữ boolean isPlain () kiểm tra có đang dùng kiểu chữ thường không boolean isBold () kiểm tra có đang dùng kiểu chữ đậm không boolean isItalic () kiểm tra có đang dùng kiểu chữ in nghiêng không boolean isUnderlined () kiểm tra có đang dùng kiểu chữ gạch dưới không int getHeight () lấy kích thước font (khoảng cách giữa 2 dòng chữ) int getBaselinePosition () lấy độ cao chữ int charWidth (char ch) lấy độ rộng của ký tự ch int charsWidth (char[] ch, int offset, int length) lấy độ rộng của chuỗi ký tự ch dạng mảng char int stringWidth (String str) lấy độ rộng chuỗi ký tự ch dạng String int substringWidth (String str, int offset, int length) lấy độ rộng chuỗi con của chuỗi ký tự ch dạng String bắt đầu từ vị trí offset với độ dài length Bảng 5.13 Xử lý Font chữ 98 Java Mobile Lớp Font không có phương thức khởi tạo nghĩa là không cần “new” để tạo đối tượng mới, thay vào đó, ta

Các file đính kèm theo tài liệu này:

  • pdfCNTT1019.pdf