Bài trước đã hướng dẫn cách viết một class textfield hiển thị và nhập trên Canvas, bài này sẽ sử dụng đến textfield đó để làm vài thứ:
Đầu tiên chúng ta sẽ tạo một class nhận giá trị là một chuổi và sau đó là phân tích chuỗi đó để thực hiện những lệnh mà ta muốn, lệnh ở đây bao gồm (chuỗi,tọa độ x, tọa độ y) và sau khi nhận chuỗi này nó sẽ tự cập nhật thông tin vào trong các biến của nó, ta viết như sau:
NewClass.java
C:\Users\WIN7\Documents\NetBeansProjects\textfield\src\NewClass.java |
import javax.microedition.lcdui.*;
import java.util.*;
class canvas extends Canvas{
textfield tf;
robot rb;
Font f=Font.getFont(0,0,8);
int w,h,k=0,fh;
String command="";
public canvas(){
setFullScreenMode(true);
w=getWidth();
h=getHeight();
fh=f.getHeight();
tf=new textfield("command",0,0,w);
rb=new robot(w/2,h/2);
}
public void paint(Graphics g){
g.setFont(f);
g.setColor(0);
g.fillRect(0,0,w,h);
tf.paint(g,k,true);
g.setColor(0xf0f0);
g.setClip(0,0,w,h);
g.drawString(command,0,fh*2,Graphics.TOP|Graphics.LEFT);
rb.paint(g);
k=0;
repaint();
}
public void keyPressed(int k){
this.k=k;
if(k==-5){
command=tf.getString();
rb.getcommand(tach(command,","));}}
public void keyReleased(int k){this.k=0;}
public String[] tach(String s,String c){
Vector v=new Vector();
if(!s.endsWith(c)){s+=c;}
int st=0,np=s.indexOf(c,st);
while(np!=-1){
v.addElement((String)s.substring(st,np));
st=np+c.length();
np=s.indexOf(c,st);}
String[] rt=new String[v.size()];
v.copyInto((String[])rt);
for(int i=0;i<rt.length;i++){System.out.println(rt[i]+rt[i].length());}
return rt;}
}
Lớp robot là một dạng như sau, nó sẽ nhận các giá trị lệnh và xử lí để hoạt động theo lệnh đó:
NewClass.java
C:\Users\WIN7\Documents\NetBeansProjects\textfield\src\NewClass.java |
class robot{
int x,y,nx,ny;
String say;
long lm=0;
public robot(int x,int y){
this.x=x;
this.y=y;
this.nx=x;
this.ny=y;
}
public void getcommand(String[] s){
say=s[0];
nx=Integer.parseInt(s[1]);
ny=Integer.parseInt(s[2]);
}
public void paint(Graphics g){
if(System.currentTimeMillis()-lm>200)
move();
g.setColor(0xf000f0);
g.fillRect(x,y,16,16);
}
void move(){
x+=x>nx?-1:(x==nx?0:1);
y+=y>ny?-1:(y==ny?0:1);}
}
Xong như vậy là chúng ta đã hoàn thành rồi, chỉ cần ghép nó vào MIDlet nữa là thấy:
http://holyeyed.99k.org/function/up/mog-25113.zip
http://holyeyed.99k.org/function/up/mog-97485.jar
Không có nhận xét nào:
Đăng nhận xét