Hiển thị các bài đăng có nhãn Lập trình j2me. Hiển thị tất cả bài đăng

Một số kiểu đối tượng trong J2ME

-String-
là kiểu chuỗi trong j2me, có nhiều cách để tạo một string như sau:
String str=new String("chuỗi cần gán");
String str="chuỗi cần gán";
String str=new String(bytearray);
String str=new String(chararray);
String str=StringBuffer.toString();
trong đó StringBuffer phải được tạo trước
* một số thao tác:
str.charAt(vị trí cần lấy kí tự);
lấy kí tự ở vị trí nào đó của string
str.substring(vị trí bắt đầu, vị trí kết thúc);//lấy chuỗi từ vị trí đến vị trí
str.compareTo(chuỗi so sánh);//nếu giống thì trả về 0, nếu khác thì trả về số nhỏ hoặc lớn hơn 0 tùy vào chuỗi cần so sánh dài hay ngắn hơn
str.endsWith(chuỗi so sánh);//trả về đúng sai(boolean) xem chuỗi cần so sánh có kết thúc với chuỗi so sánh hay không
str.equals(chuỗi so sánh);//xem hai chuỗi có giống nhau không, trả về boolean
str.getBytes();//chuyển thành bytearray
str.getChars();//chuyển chuỗi thành chararray
str.indexOf(giá trị của char, vị trí bắt đầu);//vị trí của kí tự cần tìm xuát hiện đầu tiên trong chuỗi
str.lastindexOf(giá trị của char, vị trí bắt đầu);//vị trí của kí tự cần tìm xuất hiện ở cuối cùng
str.length();//độ dài của string
str.startsWith(chuỗi so sánh);//trả về giá trị đúng sai xem chuỗi có kết thúc với chuỗi cần biết không
str.tocharArray();//chuyển thành chararray
-boolean-
giá trị đúng sai true false trong j2me chỉ nhận 2 giá trị true hoặc false
-int-
trị số nguyên trong j2me
-byte-
cũng nguyên nhưng chỉ nhận tối đa đến 255 cho unsign byte (không mang dấu) và từ -127 đến 127 cho sign byte
-char-
kiểu kí tự trong j2me mang giá trị của một byte
-array-
là một mảng gồm nhiều giá trị thuộc cùng một kiểu ví dụ:
int[] t=new int[10]; //tạo một array gồm 10 giá trị nguyên khi đó t={0,0,0,0,0,0,0,0,0,0}; để đặt giá trị một vị trí nào đó của array, vị trí được đếm từ 0 ví dụ t[0]=2; thì t={2,0,0,0,0,0,0,0,0,0}; để lấy một giá trị nào đó ta dùng t[vị trí]
ví dụ:
int g=t[0];
kết quả g=2
-Image-
là hình ảnh trong j2me, có các cách tạo hình ảnh sau:
Image im; //tạo hình ảnh rỗng sau đó ta có thể gán giá trị cho hình ảnh theo 2 cách, nhưng phải đặt trong vòng loại trừ lỗi phát sinh
try{im=Image.createImage("/ anh.png"); //chỉ có kiểu png mới được chấp nhận
im=Image.createImage (bytearray); //hình ảnh được lưu trong một bytearray }catch(Exception e){}
- Stream-
Gồm có
. InputStream
.OutputStream
.DataInputStream
.DataOutputStream
trong đó còn phải kể đến hai đối tượng nửa này nửa kia là ByteArrayOutputStream và ByteArrayInputStream. Nói chung là có liên quan giữa Stream và bytearray. Và cũng nhờ vậy mà ta có thể truy xuất và chuyển đổi dữ liệu từ Stream sang kiểu có thể chỉnh sửa được. Về thuộc tính và thao tác thì các loại InputStream tương tự nhau ta có thể tạo một InputStream theo các cách sau: nếu là lấy từ một kết nối (Connection) thì từ kết nối ta dùng lệnh openInputStream() để tạo một InputStream vd:
FileConnection fc= (FileConnection)Connection.open("file:///e:/vd.txt");
InputStream is=fc.openInputStream();
tương tự, cho OutputStream cũng vậy, ta sử dụng openOutputStream. Nếu ta lấy Stream từ resource file(nén kèm trong file jar) thì ta có công thức sau:
InputStream is=getClass().getResouceAsStream("tên file");
hoặc tạo DataInputStream như sau:
DataInputStream dis=new DataInputStream(getClass().getResouceAsStream("tên file"));
* thao tác trên stream chuyển sang chuỗi, byte giả sử ta có một inputstream ta chuyển sang chuỗi, bytearray như sau:
InputStream is=getClass().getResouceAsStream("tên file");
StringBuffer sb=new StringBuffer();
int c;
while((c=is.read())!=-1){sb.append((char)c);}
String str=sb.toString();
byte[] b=str.getBytes();
đối với InputStream ta hỗ trợ một số lệnh sau:
-is.read();//đọc lần lượt từng byte trong stream cho đến hết
-is.read(byte[],điểm bắt đầu,độ dài đọc);//đọc stream vào một bytearray với độ dài và từ điểm nào đó
-is.available();//trả về số byte có thể đọc trong stream
-is.close();//đóng stream lại giải phóng bộ nhớ và không truy xuất stream được nữa
còn với OutputStream, ta có thể chuyển một bytearray vào trong một outputstream bằng lệnh write
OutputStream os=fc.openOutputStream();
và ta có một bytearray có dữ liệu mà ta muốn viết vào outputStream byte[] data= {1,2,3,4,5,6,7,8,9,0}; ta viết:
os.write(data,0,data.length);//viết các byte trong data vào outputStream

Alert - Cảnh báo

Alert: thường thấy khi điện thoại cảnh báo vế một vấn đề nào đó, kết nối mạng hay gửi tin nhắn, nhưng cũng có thể là do người lập trình chuẩn bị cho một sự kiện:
Tạo một Alert:
Alert Al=new Alert("nhãn tên", "nội dung cảnh báo","hình ảnh kèm theo","kiểu cảnh báo");
Trong đó kiểu cảnh báo có thể là:
AlertType.INFO
AlertType.WARNING
AlertType.ERROR
AlertType.ALARM
AlertType.CONFIRMATION
Alert cũng là một đối tượng đặc biệt, vì nó cũng tự mình hiển thị như Form và TextBox nên chẳng cần thêm lớp nào cũng có thể tự mình nhảy ra màn hình được qua lệnh setCurrent, vd:
Display.getDisplay(this).setCurrent(Al);
Al.setTimeout(thời gian hiển thị);
nếu là mãi mãi thì gọi FOREVER
Al.getString(); //lấy ra chuỗi thông báo
Al.setString(chuỗi thông báo mới); //đặt chuỗi thông báo mới
Al.getImage(); //lấy ra hình ảnh
Al.setImage(Image); //đặt hình ảnh mới
Al.getTimeout(); //lấy giá trị thời gian
Al.getType(); //lấy ra thể loại
Al.setType(); //đặt thể loại mới

Ticker - Dòng thông tin chạy ngang màn hình

Ticker: giống như dòng chữ ngang mà các bạn thường thấy chạy phía trên hay phía dưới màn hình để giới thiệu về một thông tin gì đó tạo một Ticker khá là đơn giản
Ticker tk=new Ticker("thông tin cần hiển thị");
nhưng rất tiếc ticker không thể tự hiển thị mà phải nhờ có một lớp hiển thị khác như Form hay là TextBox chẳng hạn và do là một đối tượng đặc biệt nên Ticker được gán vào như sau:
f.setTicker(tk);
tb.setTicker(tk);
và sau đó cho hiển thị cùng với các đối tượng chính mà nó được cài vào:
* một số thao tác:
tk.getString(); //trả về chuỗi thông tin của Ticker
tk.setString(thông tin mới); //cài thông tin mới cho ticker

TextBox - Trang nhập văn bản

TextBox: cũng như TextField do đó nó cũng được tạo tương tự như vậy và nhận các trường tham số cơ bản, nhớ là loại thì dù là TextField hay là TextBox cũng chỉ là TextField.[type]
TextBox tb=new TextBox("nhãn tên","nội dung","số kí tự tối đa cho phép","kiểu");
- Tuy nhiên TextBox không thuộc lớp item mà là một đối tượng độc lập như Form cho nên nó có thể tự hiển thị qua setCurrent của Display:
Display.getDisplay (this).setCurrent(tb);
khi đó màn hình sẽ hiển thị TextBox cho chúng ta nhập văn bản vào. Các thao tác trên TextBox cũng tương tự trên TextField vậy thôi:
tb.delete(điểm bắt đầu, độdài xóa); //xóa bao nhiêu kí tự trong textbox từ vị trí chỉ định
tb.getChars(); //chuyển văn bản trong textbox thành một array các kí tự
tb.getMaxsize(); //trả về số kí tự tối đa của textbox
tb.setMaxsize(số kí tự cho phép nhập); //đặt lại số kí tự tối đa cho textbox
tb.getString(); //lấy ra văn bản trong textbox
tb.insert(chuỗi cần chèn, vị trí chèn); //chèn chuỗi vào tại một vị trí chỉ định
tb.settitle(tên mới); //đặt nhãn tên mới cho textbox
tb.size(); //trả về số kí tự đã có trong textbox

Một số kiểu thực thi trong class

Như khi các bạn đọc bài Command, ta đã thấy bắt buộc phải sử dụng kiểu thực thi CommandListener trong class có sử dụng command và trong đó ta cũng cần thêm vào function
public void commandAction (Command c,Displayable d){}
bài này sẽ trình bài cách chỉ định thực thi và những kiểu thực thi thường gặp:
* để thực thi một kiểu nào đó ta thêm vào như sau:
public class vd extends MIDlet implements CommandListener{}
như vậy sau phần khai báo kiểu class( ở trên là MIDlet, các kiểu khác tương tự), là phần khai báo kiểu thực thi(ở trên là CommandListener) đối với các kiểu thực thi khác cũng tương tự:
public class vd extends GameCanvas implements Runnable{}
public class vd extends List implements ItemStateListener{}
- nếu cùng một class mà thực thi một lúc 2 kiểu thì ta dùng dấu phẩy để ngăn cách hai kiểu thực thi đó.
* mỗi kiểu thực thi như vậy gắn với một function nhất định và phải được khai báo trong một lệnh đặt trưng từ trước đó:
vd: đối với CommandListener phải đi kèm với
commandAction (Command c,Displayable d){}
và lệnh khai báo là setCommandListener
public class vd extends MIDlet implements CommandListener{
public void startApp(){
Form f=new Form("vd");
Command c=new Command("exit",Command.EXIT,2);
f.addCommand(c);
f.setCommandListener(this);
Display.getDisplay(this).setCurrent(f);}
public void commandAction (Command c,Displayable d){} }
* ngoài CommandListener ra ta còn có ItemStateListener và Runnable:
-ItemStateListener function:
public void ItemStateChanged(Item item){}
lệnh: [đối tượng mang item].setItemStateListener(đối tượng thực thi)
-Runnable function:
public void run(){}
lệnh: thường là sử dụng một Thread để bắt đầu run
Thread t=new Thread(this);
t.start();
khi đó tự động function run sẽ được thực thi.

Command và CommandListener

Command: là lệnh để người dùng đưa vào những hành động tiếp sau đó theo mục đích của mình
- command cũng là một item trên form và được tạo như sau:
Command cm=new Command("tên lệnh","loại lệnh","vị trí");
Trong đó: loại lệnh có thể là:
Command.SCREEN
Command.BACK
Command.CANCEL
Command.OK
Command.HELP
Command.STOP
Command.EXIT
Command.ITEM
...
còn vị trí tức là nếu củng một loại thì chúng sẽ được gom lại trong một menu, và vị trí chính là vị trí của lệnh trong menu đó. Dù là một item như đó là một item đặc biệt vì vậy để thêm Command vào Form ta không dùng append mà dùng addCommand
f.addCommand(cm);
và khi sử dụng Command ta phải cho class thực thi kiểu CommandListener đồng thời cho thực thi trên đối tượng có command, cũng phải thêm vào một function mặc định để phân tích và thực thi lệnh mỗi khi Command được sử dụng, class của ta có dạng như sau:
public class vd entends MIDlet implements CommandListener{
public vd(){}
public void startApp(){}
public void pauseApp(){}
public void destroyApp (boolean unconditional){}
public void commandAction (Command c,Displayable d){} }
* một số thao tác trên command:
addCommad(cm); //thêm command vào một đối tượng nào đó
cm.setLabel("tên mới"); //thay đổi tên cho Command
cm.getLabel(); //lấy tên của Command
cm.getCommandType(); //trả về kiểu lệnh
còn sau đây là một ví dụ:
public class vd entends MIDlet implements CommandListener{
Form f=new Form("command");
Command cm1=new Command("exit",Command.EXIT,2);
Command cm2=new Command("hien",Command.OK,2);
TextField tf=new TextField("my name","",16,TextField.ANY);
public vd(){
f.addCommand(cm1);
f.addCommand(cm2);
f.append(tf);
f.setCommandListener(this);
Display.getDisplay(this).setCurrent(f);}
public void startApp(){}
public void pauseApp(){}
public void destroyApp(boolean unconditional) {notifyDestroyed();}
public void commandAction(Command c,Displayable d){
if(c==cm1){destroyApp(true);}
if(c.getLabel().equals("hien")){tf.setString("Opakul");}} }

Về ChoiceGroup tương tự như List trên Form

ChoiceGroup: cũng tương tự như một list, nhưng thay vì là một lớp hiển thị riêng thì ChoiceGroup là một loại item được gán lên form cùng với TextField, ImageItem, String Item... cũng như list, ChoiceGroup cũng có những tính chất và cách thức tương tự.
ChoiceGroup cg=new ChoiceGroup("tên","kiểu");
trong đó kiểu gồm có:
Choice.MULTIPLE
Choice.EXCLUSIVE
Choice.IMPLICIT
Choice.POPUP
kiểu popup giống như việc tạo ra một combo box và để thêm vào những danh sách lựa chọn cũng tương tự như list:
cg.append("tên lựa chọn","ảnh đại diện");
tất nhiên vì là một item nên choicegroup cần có một cái giá để treo lên và đó là Form, ta tạo một Form và gán ChoiceGroup vào bằng lệnh append như những item khác:
f.append(cg);
sau đó thì cho hiển thị form là hiển thị ChoiceGroup:
Display.getDisplay(this).setCurrent(f);
MỘT SỐ THAO TÁC VỚI ChoiceGroup:
cg.set(vị trí lựa chọn, tên mới, ảnh mới);
cg.isSelected(vị trí lựa chọn) //trả về giá trị đúng sai
cg.setSelectedIndex(vị trí cần chọn); //lệnh để chọn một lựa chọn nào đó
cg,size(); //không có tham số, trả về số các lựa chọn trong ChoiceGroup

List - Một Menu

List: trong j2me, list giúp tạo ra một danh sách dạng menu để người dùng có thể lựa chọn, và ứng với mỗi lựa chọn sẽ xảy ra một sự kiện nhất định nào đó. Tạo một list:
List l=new List("tên","kiểu list");
trong đó kiểu list gồm có:
List.IMPLICIT
List.EXCLUSIVE
List.MULTIPLE
trong khi exclusive(chỉ một) và multiple (nhiều lựa chọn) không đòi hỏi phải có hành động xảy ra sau khi chọn, thì implicit cung cấp sẵn một hiệu ứng mà ngay sau khi chọn thì một hành động được tiến hành. Tất nhiên với multiple thì không thể nào lựa chọn là có hiệu lực ngay, vì vậy implicit chỉ cho phép một lựa chọn. Sau khi tạo ra một list thì list đó chưa có bất kì một danh sách nào cho chúng ta lựa chọn, việc cần làm bây giờ là thêm vào những trường như một danh sách thực thụ, ta dùng lệnh"append" giống như ở form:
l.append("tên lực chọn 1","hình ảnh kèm theo");
MỘT SỐ THAO TÁC VỚI LIST:
l.delete(vị trí cần bỏ); //loại bỏ một lựa chọn khỏi list
l.deleteAll(); //không có tham chiếu, bỏ hết các lựa chọn
l.getSelectedIndex(); //trả về vị trí của lựa chọn đang được chọn
l.getString(vị trí); //nhận giá trị nội dung của lựa chọn
l.insert(vị trí, tên lựa chọn,hình ảnh); //chèn vào một lựa chọn giữa những lựa chọn khác
l.isSelected(vị trí); // xét xem một vị trí nào đó trong lixt đã được lựa chọn hay chưa, trả về là giá trị đúng sai
l.setSelectedIndex(vị trí); //lệnh để lựa chọn thông qua vị trí của nó trong list

ImageItem - Hình ảnh trên Form

ImageItem: thay vì hiển thị hình ảnh trên canvas thì form cũng cho phép hiển thị hình ảnh, bằng cách sử dụng ImageItem ta có thể làm điều đó mà không phải mượn thêm lớp Canvas. Công thức của một ImageItem như sau:
new ImageItem("nhãn tên",hình ảnh,"layout","tên dưới ảnh");
trong đó Image được tạo bởi:
im=Image.createImage("/tên ảnh");
hoặc
im=Image.createImage(byte array,điểm bắt đầu,độ dài cần lấy);
còn layout thì có
LAYOUT_LEFT
LAYOUT_RIGHT
LAYOUT_CENTER
LAYOUT_NEWLINE_BEFORE
LAYOUT_NEWLINE_AFTER
cuối cùng vì cũng như các item khác chỉ việc dùng lệnh "append" vào form là xong và cho hiển thị form như cách thông thường. hoặc thay vì vậy ta có thể làm như StringItem
f.append(image);
tất nhiên image này cũng được tạo như một Image thông thường.

ImageItem - Hình ảnh trên Form

ImageItem: thay vì hiển thị hình ảnh trên canvas thì form cũng cho phép hiển thị hình ảnh, bằng cách sử dụng ImageItem ta có thể làm điều đó mà không phải mượn thêm lớp Canvas. Công thức của một ImageItem như sau:
new ImageItem("nhãn tên",hình ảnh,"layout","tên dưới ảnh");
trong đó Image được tạo bởi:
im=Image.createImage("/tên ảnh");
hoặc
im=Image.createImage(byte array,điểm bắt đầu,độ dài cần lấy);
còn layout thì có
LAYOUT_LEFT
LAYOUT_RIGHT
LAYOUT_CENTER
LAYOUT_NEWLINE_BEFORE
LAYOUT_NEWLINE_AFTER
cuối cùng vì cũng như các item khác chỉ việc dùng lệnh "append" vào form là xong và cho hiển thị form như cách thông thường. hoặc thay vì vậy ta có thể làm như StringItem
f.append(image);
tất nhiên image này cũng được tạo như một Image thông thường.

TextField - Trường nhập nhận văn bản

TextField: cũng giống như khung điền số trong phần gửi tin nhắn của điện thoại vậy đó, nó có thể có sẵn giá trị hoặc người dùng tự nhập vào, sau đó thì có thể sử dụng các dữ liệu đó, Tạo một TextField như sau:
TextField tf=new TextField("tên","nôi dung","số kí tự tối đa","kiểu");
trong đó phần kiểu bao gồm:
(có thể điền số hoặc dạng chuỗi mã)
0:TextField.ANY //bất cứ kí tự nào
1:TextField.EMAILADDR //dạng mail mới hợp lệ
2:TextField.NUMERIC //chỉ các số có hiệu lực nhập vào
3:TextField.PHONENUMBER //số điện thoại
4:TextField.URL //các kí tự cho phép của một url
5:TextField.DECIMAL //chỉ sử dụng số thập phân
6:TextField.PASSWORD //biến thành dấu sao
7:TextField.UNEDITABLE //không thể chỉnh sửa
8:TextField.SENSITIVE //viết chữ in thường
9:TextField.NON_PREDICTIVE //không sử dụng tra từ thông minh
10:..
còn nữa các bạn có thể tự tìm thêm các tham số cho TextField sau khi tạo TextField ta có thể gán nó vào Form và cho hiển thị ra ngoài tương tự như StringItem ở bài trước
TextField tf=new TextField("my number phone","",15,3);
f.append(tf);
d.getDisplay(this).setCurrent(f);
nếu các bạn vừa muốn chỉ nhập số và không cho chỉnh sửa thì sao nhỉ: chỉ nhập số là 2, không cho chỉnh sửa là 7 vậy tf của ta như sau:
TextField tf=new TextField("my money","",15,2|7);
bây giờ là một số thao tác trên textfield:
tf.getString() //không có tham chiếu, nhận chuỗi của textfield vào một biến mới
tf.setString("giá trị mới") //gán giá trị cho textfield
tf.delete("điểm bắt đầu","độ dài") //xóa từ kí tự nào trong textfield
tf.getChars(char[] char array) //chuyển mỗi kí tự của textfield vào một giá trị của array
tf.setChars(char[] char array,"điểm bắt đầu","độ dài chuỗi") //gán giá trị cho textfield từ một array các kí tự

StringItem

StringItem: là chuỗi mà ta gán lên form và cho hiển thị ra ngoài màn hình, khong thể chỉnh sửa được để tạo một StringItem ta có các cách sau:
StringItem si=new StringItem("tên","noi dung can hien thi");
f.append(t);
function append(Displayable d) dùng để dán những item lên form hoặc là
f.append("noi dung can hien thi");
cách này đơn giản hơn nhiều, nhưng StringItem này không có một nhãn tên.
Sau đó chúng ta chỉ cần cho Display form ra màn hình
d.getDisplay(goc).setCurrent (f);

Form và Display

Tuy nhiên Midlet mà ta tạo ra chưa là gì hết, đó chỉ là một cái Midlet thu gọn thôi, ta cần phải thêm vào đó những thứ khác nữa thì nó mới có thể gọi là custom được. bài này sẽ thêm vào Midlet một Form và cho hiển thị ra ngoài màn hình:
Form: giống như một bức tường hay là một cái giá mà ta dùng để treo đồ đạclên đó. cùng với form còn có Alert, TextBox, cũng có thể tự mình hiển thị mà không cần có gì đó lót nền. trong khi đó form lại làm lót nền và giá treo cho các item như: TextField, Ticker, ImageItem, StringItem,.... ta tạo một form như sau:
Form f=new Form("form's name");
class Form nhận một trường với kiểu chuỗi làm tên cho form mới tạo. Form cung cấp một function để dán những item lên nó, đề thêm một item vào form ta dùng
f.append(Item);
hoặc để thêm lệnh ta dùng
f.addCommand(Command);
còn để bỏ một item nào đó ta phải biết vị trí của nó và dùng lệnh
f.delete(vị trí item);
hoặc
f.deleteAll();
để bỏ hết, ta sẽ biết cụ thệ hơn ở bài sau lệnh tạo mới tương tự cho các biến, giả dụ ta cần tạo một biến số nguyên ta gọi
int t=new int();
số nguyên không nhận trường nào để tạo mới hết hoặc đã tạo được một class hoàn chỉnh của riêng mình, như class a.java chẳng hạn ta gọi:
a myclass=new a();
hoặc đơn giản hơn như sau:
Form f;
int t;
a myclass;
tuy nhiên cách rút gọn đó chỉ để tạo ra những biến không mang giá trị, và giá trị của biến chưa xác định, sau này ta vẫn phải gán cho nó một giá trị như sau:
f=new Form("my form");
t=6;
myclass=new a();
ta thấy đó, như vậy thì các biến không cần thêm khai báo kiểu nữa vì ta đã khai báo rồi.
DISPLAY
Display: là phần dùng để đưa những thứ có thể hiển thị được ra màn hình, ta có thể tưởng tượng Display giống như cửa sổ mà ta nhìn qua đó để nhìn thấy những gì có trong class gọi một Display giống như các biến khác:
Display d=new Display();
trong class Display có sẵn các function như:
getDisplay(MIDlet var);
và
setCurrent(Displayable d)
như ta thấy, các function này đòi hỏi một trường để thực thi, để hiển thị Form "f" trong MIDlet:
d.getDisplay(goc).setCurrent (f);
như vậy là ta đã biết cách để hiển thị ra màn hình rồi đó

Midlet cơ bản và cấu trúc của một ứng dụng

* mỗi class có cấu trúc đơn giản như sau:
import [gói các class có sẵn cho việc sử dụng];
public class [tên class] extends [kiểu mở rộng] implements [kiểu thực thi] { các công thức trong class}
- nếu như là class không cần phần gì đó ta có thể bỏ đi phần đó, ví dụ một class có thể chỉ đơn giản như sau:
public class a { các công thức trong class}
-một số class bắt buộc những công thức mặc định kèm theo không thể bỏ , ví dụ như Midlet, Canvas....
*liên kết class:
mỗi class cũng như là một kiểu biến, một khi ta đã hoàn chỉnh một class nào đó ta có thể sử dụng nó như một kiểu biến và sử dụng toàn bộ những công thức mà ta đã hoàn thành, ví dụ:
khi tạo một biến số nguyên trong class b.java ta dùng:
pubic class b{ int m=6; }
đó là biến có sẵn, giả sử ta đã viết được một class a.java đơn giản như sau:
public class a { int m=1;}
//tên class là a thì file.java cũng là a
ta có thể sử dụng class này để đưa vào một class b.java khác như sau:
pubic class b{ int m=6;
int n=a.m;
//a là class a, m là biến trong class a, m đã được xác định là int và giá trị là 1, vì vậy n=a.m thì n cũng mang giá trị là 1 }
bây giờ ta thêm vào class a.java như sau:
public class a { int m=1;
int cong(int x1,int x2){return(x1+x2);}
//function cộng 2 số nguyên
}
ta sử dụng trong class b như sau:
pubic class b{
int m=6;
int n=a.m;
//a là class a, m là biến trong class a, m đã được xác định là int và giá trị là 1, vì vậy n=a.m thì n cũng mang giá trị là 1
int ketqua=a.cong(m,n);
//cong là function trong class a.java, sử dụng 2 số nguyên để cộng lại với nhau, do đó ở đây trả về kết quả ketqua=m n=6+1=7
}
* sau đây là cấu trúc của một midlet ứng dụng và cấu trúc của một midlet game:
=ứng dụng=
chỉ cần một class mở rộng MIDlet, sau đó ta có thể thêm code cần thiết vào thôi:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class app extends MIDlet{
public app(){}
public startApp(){}
public pauseApp(){}
public destroyApp(boolean unconditional){notifyDestroyed();}
}
=game=
sử dụng một class Midlet làm gốc và gọi hiển thị class GameCanvas game.java
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
public class game extends GameCanvas implements Runnable {
public game(root main){super (flase);}
void start(){
//tạo một tiến trình và khởi chạy, function run sẽ được kích hoạt
Thread t=new Thread(this);
t.start();}
public void run(){} }
root.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class root extends MIDlet {
game g=new game(this);
//tạo một biến g từ class game.java, nhận root làm tham số
public root(){}
public startApp(){
g.start();
//gọi function start() trong game.java
Display.getDisplay(this).setCurrent(g);
//cho hiển thị canvas game
}
public pauseApp(){}
public destroyApp(boolean unconditional) {notifyDestroyed();} }

Midlet - class trong một ứng dụng

Trước khi sử dụng một class có sẵn của java ta phải import (đưa vào) nó vào trong class mới mà ta sắp xây dựng, giống như bằng cách sử dụng chức năng cộng trừ nhân chia của máy tính để giải phương trình vậy, sa này khi đã viết được class mới ta có thể sử dụng tiếp nó cho các công việc khác của mình. java cung cấp rất nhiều class có sẵn tùy thuộc vào mục đích sử dụng mà ta cần thiết đưa vào những class nào ví dụ:
import javax.microedition.midlet.*;
//đây là các class trong gói midlet dùng cho việc mở rộng từ một MIDlet
import javax.microedition.lcdui.*;
//gói hiển thị bao gồm Display và các thứ như form, alert, item...
mỗi chương trình java phải có một midet gọi là gốc từ đó mà hiển thị các lớp khác. nó giống như là một cái nền để xây nhà, hay là một cái khung để treo tranh ảnh lên đó. Midlet gốc thì có nội dung như sau:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class [tên class] extends MIDlet{
//các bạn gán biến ở đây
public void starApp(){}
public void pauseApp(){}
public void destroyApp (boolean unconditional){} }
lúc nào trong một midlet cũng phải có 3 function startApp, pauseApp, và destroyApp như vậy, đó là những function có sẵn của lớp, và là mặc định nó giúp ta thực hiện những việc riêng biệt. khi cần ta có thể thêm vào những function khác với cách thức tương tự. Các funtion thường bắt đầu bằng cách gán quyền:
public // có thể sữ dụng trong class khác
private //chỉ sử dụng trong class này protected // chỉ những class đặc biệt với class tương ứng với nó và kiểu trả về, ví dụ như trả về số nguyên là int, chuỗi là String, nếu thực hiện lệnh thì dùng void ví dụ:
public int a(){ int t=6;
return t;}
// nếu là một kiểu biến thì trả về giá trị nào đó public void b(){destroyApp (true);}
//nếu là void thì chỉ thực hiện lệnh mà không trả về giá trị

Mở đầu về j2me

Bài viết này giúp bạn làm quen với việc lập trình trênđiện thoại di động. Khi sử dụng chiếc điện thoại hàng ngày, có thể bạn vẫn nghĩ lập trình cho chiếc điện thoại của mình là một việc không dễ dàng và chỉ có những chuyên gia mới làm được. Loạt bài viết về lập trình trên điện thoại di động sắp tới sẽ hướng dẫnbạn từng bước cách “vọc” để tự viết những ứng dụng và trò chơi đơn giản cho mình. Khi đi vào thế giới của lập trình cho ĐTDĐ, bạn sẽ bắt gặp những thuật ngữ mới như J2ME, CLDC, Configuration, Profile,... . Những thuật ngữ này có thể lạ với bạn nhưng chúng ta sẽ từ từ làm quen với chúng. Còn bi giờ hãy sắn tay áo cài đặt phần mềm trước đã.
Những phần mềm cần chuẩn bị:
Bạn cần chuẩn bị 3 phần mềm sau để bắt đầu, bạn có thể tải về từ Internet hoặc ra các cửa hàng bán CD để mua về: Bộ công cụ phát triển của Java (Java 2 Standard Edition – J2SE) phiên bản 1.4.2 hoặc mới hơn. Bạn có thể tải về tại địa chỉ sau: http://java.sun.com/j2se/1.4.2/download.html J2ME Wireless Toolkit. Đây chính là công cụ để bạn vọc lập trình trên điện thoại. Bạn có thể download về tại đây: http://java.sun.com/products/sjwtool...nload-2_2.html Một chương trình soạn thảo mã nguồn Java. Bạn có thể dùng bất kỳ chương trình soạn thảo văn bản nào cho phép lưu các văn bản không có định dạng như Notepad, Notepad Plus tại http://notepad-plus.sourceforge.net , jEdit tại http://www.jedit.org . Bạn chú ý là các chương trình có định dạng văn bảnnhư Microsoft Word không thể dùng để soạn thảo mã nguồn được. Cài đặt bộ công cụ phát triển của Java: Đây là bộ công cụ dùng để phát triển các ứng dụng Java. Bạn cần chương trình này vì bộ J2ME Wireless Toolkit cần nó để có thể chạy được. Ngoài ra nó còn cung cấp các công cụ để bạn biên dịch các tập tin mã nguồn của bạn. Nếu bạn download phiên bản JDK 1.4.2_02 thì tên tập tin cài đặt là j2sdk-1_4_2_02-windows-i586-p.exe (Phiên bản 1.4.x mới nhất là 1.4.2_09) Bạn cài đặt và chấp nhận các giá trị mặc định. Sau khi cài đặt với cáctuỳ chọn mặc định thì trên máy bạn sẽ có thư mục C: \j2sdk1.4.2_02 Bạn có thể thử là bạn đã cài đặt thành công bằng cách mở cửa sổ DOS và gõ vào: C: \j2sdk1.4.2_02\bin\java -version Nếu bạn nhận được kết quả: java version "1.4.2_02" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_02-b03) Java HotSpot(TM) Client VM (build 1.4.2_02-b03, mixed mode) Nghĩa là bạn đã cài đặt thành công (xem hình dưới) Trên thanh công cụ của chương trình, bạn hãy chọn Open Project ... , bạn sẽ thấy một cửa sổ Open Project hiện lên: Bạn hãy chọn Games, và nhấn Open Project, sau đó bạn nhấn Run trên thanh công cụ để chạy ứng dụng mẫu này, và chương trình giả lập điện thoại sẽ chạy lên: Bạn sẽ thấy 3 trò chơi, trong đó có trò WormGame (Rắn săn mồi) rất quen thuộc. Bạn dùng chuột nhấn vào các nút trên điện thoại giả lập giống như bạn đang sử dụng chiếc điện thoại thật của bạn. Bạn chú ý đây chỉ là một điện thoại giả lập chung chứ. không phải một đời điện thoại của bất kỳ nhà sản xuất điện thoại nào như Samsung hay Nokia. Bạn nhấn chuột lên nút DOWN của điện thoại và nhấn nút SELECT, bạn sẽ chạy được chương trình game Rắn săn mồi quen thuộc như sau: Sau khi chơi thử xong, bạn đóng màn hình giả lập lại bằng cách nhấn nút X ở phía trên bên phải như khi bạn đóng bất kỳ ứng dụng Windows nào khác. Bây giờ bạn hãy thử đổi sang chạy giả lập trên một điện thoại khác bằng cách chọn trong combobox Device như hình sau. Ở đây tôi chọn QwertyDevice Sau đó bạn cũng nhấn nút Run để chạy lại, bạn sẽ thấy điện thoại giả lập khác chạy ra với cùng ứng dụng trò chơi như ở trên: Vậy là bạn đã biết cách dùng công cụ Wireless Toolkit để chạy các ứng dụng mẫu, trong bài sau bạn sẽ làm quen nhiều hơnvới bộ công cụ này cũng như viết ứng dụng đơn giản đầu tiên.