XtGem Forum catalog
Cộng đồng Java Việt
Cộng đồng java Việt
Thông báo
Chú ý: Sắp tới ADM sẽ cải tiến lại wap, xây dựng thêm mục C, C ++ cho các bạn, các bạn có ý kiến gì thì góp ý cho AD nhá :D
Codej2me xin gửi lời cảm ơn đến: Holyeyed, Java_Editor!, chuonghugo,TVC97, thaian2009, gió(opakul), ironman..., và đặc biệt là forum j2mevn đã giúp Codej2me xây dựng wapsite này!!!
Có nhiều bạn chưa hiểu kĩ về Canvas nha, muốn chạy 1 app nào đó có Canvas thì phải Có Midlet nhá, tìm hiểu tại đây
Chatbox




* Tìm hiểu cấu trúc và các biến trong Canvas

» Nội dung :
• Cấu trúc mở rộng một class Canvas như sau:
class tênclass extends Canvas{
public tênclass(){}
public void paint(Graphics g){}
public void keyPressed(int k){}
}

Trong class trên, chỉ có hàmpaintlà bắt buộc phải có còn các hàm khác như hàm tạo lập, hàm keyPressed… có hay không cũng không có sao.
Do đó, ta có thể viết gọn một class Canvas như sau, đơn giản thôi nhưng ta sẽ phát triển nhiều hơn từ nó.
Đầu tiên là viết lớp canvas trước:
import javax.microedition.lcdui.*;
class cv extends Canvas{
public void paint(Graphics g){}
}

Tiếp theo là viết MIDlet như mọi khi:

import javax.microeditiom.midlet.*;
import javax.microedition.lcdui.*;
public class Midlet extends MIDlet{
cv a= new cv();
public void startApp(){
Display.getDisplay(this).setCurrent(a);
}
public void pauseApp(){}
public void destroyApp(boolean u){}
}

Hoặc viết như sau:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class Midlet extends MIDlet {
public void startApp(){
Display.getDisplay(this).setCurrent(new MyCanvas());
}
public void pauseApp(){}
public void destroyApp(boolean bl){}
}

Đó có đơn giản hay không.Tuy nhiên ta có thể làm nhiều chuyện trong class cv này và ta cũng không cần để ý tới class Midlet nữa.
Tất cả đều liên quan đến hàm paint trong Canvas, trong đó tham số Graphics cũng là bắt buộc. ta sẽ làm quen với một số thao tác vẽ trên Graphics này.bây giờ Ta học vài thao tác đơn giản sau:
getWidth() : lấy giá trị chiều rộng màn hình
getHeight() : lấy giá trị chiều cao màn hình
g.setColor(int x) : đặt màu cho các lệnh vẽ, x trong này có thể là số nguyên hoặc là dạng màu mã hex, vd: 0xff00ff. chắc các bạn cũng quen rồi.
g.drawString("chuỗi cần vẽ",x,y,layout);
//vẽ chuỗi lên Graphics, với điểm mốc(x,y) và layout được chỉ định như sau:
w-layout : Graphics.LEFT, Graphics.RIGHT, Graphics.HCENTER
h-layout : Graphics.TOP, Graphics.BOTTOM, Graphics.BASELINE
tham số layout được viết kết hợp giữa h-layout và w-layout như sau:
w-layout|h-layout

vd:
g.drawString("ho oh",10,30,Graphics.LEFT|Graphics.BOTTOM);
g.drawRect(x,y,w,h) : vẽ hình chữ nhật từ điểm (x,y) với chiều rộng w, chiều cao h
g.fillRect(x,y,w,h) : cũng tương tự như trên nhưng vẽ hình chữ nhật đặc
g.drawImage(Image im,x,y,layout) : vẽ hình ảnh lên Graphics từ điểm (x,y) với layout chỉ định như trên. Có điều Graphics.BASELINE thay bằng Graphics.VCENTER
g.setClip(x,y,w,h) : chỉ địnhkhoảng mà các lệnh vẽ có hiệu lực, đây là một khoảng chữ nhật từ điểm (x,y) với chiều rộng w, chiều cao h. các lệnh vẽ trong khoảng này thì hiện ra, ngoài khoảng này thì không có hiệu lực.

* trong Graphics còn có biến Font, các bạn có thể tìm hiểu them cách cài đặt kiểu font để vẽ chuỗi cho đẹp.
repaint() : lệnh dùng để gọi lại hàm paint(Graphics g) mỗi khi có sự thay đổi tọa độ vẽ, thay hình ảnh, chuỗi mới…
Vd: bây giờ thì ta biến đổi class cv ở trên một chút:
import javax.microedition.lcdui.*;
class cv extends Canvas{
public void paint(Graphics g){
int w=getWidth();
int h=getHeight();
g.setColor(0);
g.fillRect(0,0,w,h);
g.setColor(0xffee77);
g.drawRect((w-60)/2,(h-40)/2,60,40);
g.drawString("ho oh",w/2,h/2,Graphics.HCENTER|Graphics.BASELINE);
}
}

Tiếp đến là phần nhận biết phím bấm, ta nói tới hàm
keyPressed(int k);hàm này được thực hiện mỗi khi bấm phím điện thoại, tức nhiên là khi lớp canvas được hiển thị. Mỗi khi nhấn phím thì k nhận một giá trị tương ứng với giá trị phím như sau:

-1: phím mũi tên lên
-2: phím mũi tên xuống
-3: phím qua trái
-4: phímqua phải
-5: phím ok
-6: phím tùy chọn trái
-7: phím tùy chọn phải
-8: phím gọi
-9: phím thoát(chẵng kiểm nghiệm nổi)
KEY_NUM0: phím 0
KEY_NUM1: phím 1

KEY_NUM9: phím 9
KEY_STAR: phím sao0
KEY_POUND: phím thằng(#)

Đối với hàm
keyReleased(int k);
keyRepeated(int k);cũng tương tự nhưng thay vì là nhận biết nhấn phím thì nhận biết nhả phím và giữ phím.
Ta tiếp tục với ví dụ nhé:
import javax.microedition.lcdui.*;
class cv extends Canvas{
int m=0;
public void paint(Graphics g){
int w=getWidth();
int h=getHeight();
g.setColor(0);
g.fillRect(0,0,w,h);
g.setColor(0xffee77);
g.drawRect((w-60)/2,(h-40)/2,60,40);;
g.drawString("ho oh",w/2,h/2,Graphics.HCENTER|Graphics.BASELINE);
}
public void keyPressed(int k){
if(k==-3||k==KEY_NUM4){m=m-10;}
if(k==-4||k==KEY_NUM6){m=m 10;}
repaint();
}
}

Đối với Graphics còn có nhiều lệnh vẽ lắm nhưng mà chỉ biết vẽ hình chữ nhật với vẽ chuỗi và image là đủ rồi. lớp GameCanvas cũng tương tự nhưng có nhiều phức tạp hơn một chút.
Thông tin
Hiện có 1 đang Online, 1 visit trong ngày,3 visit trong tháng. Tổng lượt truy cập là 1662 lượt.
Liên Hệ - Hổ Trợ
Info Author Admin: Q.Phiên
Phone Author Phone: 01635514395
Hosting By XTGEM.COM
CodeJ2ME© 2014-2015