Pham_loi
Chức vụ: 11:59:19, 17-08-2015 |
(Bài 18) Làm quen với GameCanvas
Chào các bạn!
Sau đây tôi sẽ đưa ra vài tài liệu của anh Huỳnh Thanh Liêm và sưu tầm thêm giúp các bạn làm quen với lập trình game java.Chúng ta sẽ tạo ra những class mới từ các class sẵn có trong máy ảo java (thiết bị di động)
- Có hai class mà các bạn cần biết rõ đó là midlet và gamecanvas (vì ở đây ta lập trình game).Midlet là nền tảng của mọi tập tin java, ta ví nó như một bức tường và treo lên đó những thứ để ngắm ngía và vẽ vời. Gamecanvas thì như một tờ giấy hoặc một xấp giấy mà ta thực hiện công việc vẽ vời trên đó rồi sau đó thì treo lên tường để ngắm nhìn.
• Một class mới được tạo thành như sau:
import [các class có sẵn để sử dụng trong class mới
public class [tên class mới extends [kiểu class implements [kiểu thực thi {
//gán biến ở đây
public [tên class mới(){
//lệnh ở đây
}
//các chức năng hoặc lệnh ở đây
}
Copy code
public class [tên class mới extends [kiểu class implements [kiểu thực thi {
//gán biến ở đây
public [tên class mới(){
//lệnh ở đây
}
//các chức năng hoặc lệnh ở đây
}
Copy code
• Một midlet thì có cấu trúc cơ bản thế này:
public class [tên class extends MIDlet {
public [ten class(){}
public void startApp(){}
public void pauseApp(){}
public void destroyApp(boolean unconditional){
notifyDestroyed();
//luôn như vậy
}
}
Copy code
public [ten class(){}
public void startApp(){}
public void pauseApp(){}
public void destroyApp(boolean unconditional){
notifyDestroyed();
//luôn như vậy
}
}
Copy code
• Một gameCanvas có cấu trúc như sau:
public class [tên class extends GameCanvas implement Runnalbe {
public [tên class(){
super(false);
//luôn như vậy
}
void start()
Thread t=new Thread(this);
t.start();
//tạo và khởi chạy một tiến trình, sẽ bắt đầu từ function run
}
public void run(){}
}
Copy code
public [tên class(){
super(false);
//luôn như vậy
}
void start()
Thread t=new Thread(this);
t.start();
//tạo và khởi chạy một tiến trình, sẽ bắt đầu từ function run
}
public void run(){}
}
Copy code
Tại sao ta gọi nó là đồ họa cấp thấp?
là bởi vì canvas không cung cấp các item có sẵn như form mà hầu hết ta phải tự làm mọi việc bằng tay. Tuy nhiên form lại không hỗ trợ việc xử lý đồ họa như canvas. vì vậy hầu hết các game đều được xây dựng bằng giao diện đồ họa cấp thấp.
thế đấy, bài sau sẽ hướng dẫn cách vẽ lên một canvas và cách để gọi một class gamecanvas từ một midlet hay nói nôm na là treo bức tranh lên tường
: 0 ♥
Pham_loi
Chức vụ: 11:58:50, 17-08-2015 |
(Bài 17) toán tử trong j2me lớp Math
1. Toán tử số học, giống như các phép tính mà chúng ta đã học, J2ME cũng như tất cả các ngôn ngữ lập trình khác đều cung cấp các phép toán này:
(cộng, 1 1 = 2)
- (trừ, 1-1 = 0)
* (nhân, 2*1 = 2)
/ (chia, 2/2 = 1)
% (chia lấy phần dư, 3%2 = 1)
2. Toán tử so sánh, sử dụng để thực hiện các phép toán so sánh giữa hai số hạng, kết quả trả về là kiêu boolean (đúng, sai):
== (bằng)
!= (không bằng)
> (lớn hơn)
>= (lớn hơn hoặc bằng)
< (nhỏ hơn)
<= (nhỏ hơn hoặc bằng)
3. Toán tử logic, cái này hơi bị nhức đầu, sử dụng để tổ hợp các boolean hoặc thựchiện phép tính số học dạng binary (bitwise):
|| (hoặc, một trong hai đúng thì đúng, ngược lại thì sai.
true||false=true, true||true=true false||false=false)
&& (và, hai cái đúng thì đúng, ngược lại thì sai.
true&&true=true, false&&true=false, false&&false=false)
| (OR, một toán tử bitwise, một trong haibit bằng 1 thì bằng một, ngược lại thì bằng 0)
& (AND, bitwise, cả hai cái bằng 1 thì bằng 1, ngược lại thì bằng 0)
^ (XOR, bitwise, 1 và 0 thì bằng 1 ngược lại thì bằng 0)
~ (NOT, bitwise, 0 thì thành 1, 1 thì 0)
Ví du bitwise:
số 4 chuyển sang binary: 00000100
số 2 chuyển sang binary: 00000010
4|2 =00000100 |00000010 =00000110
4&2 =00000100 &00000010 =00000000
4^2 =00000100 ^00000010 =00000110
~4 =~ 00000100= 11111011
4. Toán tử kết hợp, chúng ta thường nhận thấy cần phải tăng hoặc giảm lượng biến một số nguyên nào đó. Bạn sẽ thường thực hiện điều này khi chúng ta đếm 1 giá trị nào đó trong vòng lặp.Mình sẽ lấy một biến làm ví dụ: a=10;
(a tương tự a=a 1, a => a=11)
= (a =4 tương tự a=a 4, a =4 => a=14)
-- (a-- tương tụ a=a-1, a-- => a=9)
-= (a-=4 tương tự a=a-4, a-=4 =>a=6)
tương tự với các phép tính:/=, *=, %=, |=, &=, ^=5.
Lớp Math. thuộc package java.lang nên không cần import, lớp này cung cấp một số hàm tính toàn mà không thực được bằng các toán tử và một số hằng số.Các hằng số cung cấp:
Math.PI : (số Pi, dạng double)
Math.E Các hàm cung câp:
Math.abs : Giá trị trung bình cộng
(Math.abs(-1) = 1)
Math.ceil : Làm tròn số
(Math.abs(1.25)= 2)
Math.floor : Làm tròn số
(math.abs(1.25)= 1)
Math.sqrt : Tính trung bính công
(Math.sqrt(4) = 2)
Math.min : Lấy số nhỏ hơn trong 2 số
(Math.min(1,2) = 1)
Math.max : Lấy số lớn hơn trong 2 số
(Math.max(1,2) = 2)
Các hàm tính lượng giác:Math.cos, Math.sin, Math.tan
Lưu ý:
Bài này khá khó nên ae cần đọc kĩ mới hiểu được. hết bài này ta sẽ sang một giao diện mới đó là giao diện đồ họa cấp thấp. nó khó hơn cấp cao nhiều nên ae cần đọc kĩ bài giảng và thực hành nhiều lần.
: 0 ♥
Pham_loi
Chức vụ: 11:57:55, 17-08-2015 |
(Bài 16) DateField-ngày giờ hiện tại
Thành phần DateField cung cấp một phương tiện trực quan để thao tác đối tượng Date được định nghĩa trongjava.util.Date. Khi tạo một đối tượng DateField, bạn cần chỉ rõ là người dùng chỉ có thể chỉnh sửa ngày, chỉnh sửa giờ hay đồng thời cả hai.
Các phương thức dựng của lớp DateField gồm:
Trong đó:
label: tiêu đề
DateFieldmode: gồm:
DateField.DATE_TIME: cho phép thay đổi ngày giờ
DateField.TIME: chỉ cho phép thay đổi giờ
DateField.DATE: chỉ cho phép thay đổi ngày
Ở đây mình chỉ đề cập đến hàm khởi tạo đầu tiên.
Các hàm với DateField
Lấy giá trị Date hiện tại
Đặt giá trị Date hiện tại.
Ứng dụng sau minh họa sử dụng DateField:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class Midlet extends MIDlet{
// Khai bao bien
Form f;
Display d;
DateField date, time, date_time;
public Midlet(){
// Khoi tao cac bien
d = Display.getDisplay(this);
f =new Form("DateField");
date =new DateField("Date", DateField.DATE);
time =new DateField("Time", DateField.TIME);
date_time =new DateField("Date Time",DateField.DATE_TIME); f.append(date);
f.append(time);
f.append(date_time);
}
}
public void startApp(){
// hien thi form
d.setCurrent(f);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){}
}
Copy code
import javax.microedition.lcdui.*;
public class Midlet extends MIDlet{
// Khai bao bien
Form f;
Display d;
DateField date, time, date_time;
public Midlet(){
// Khoi tao cac bien
d = Display.getDisplay(this);
f =new Form("DateField");
date =new DateField("Date", DateField.DATE);
time =new DateField("Time", DateField.TIME);
date_time =new DateField("Date Time",DateField.DATE_TIME); f.append(date);
f.append(time);
f.append(date_time);
}
}
public void startApp(){
// hien thi form
d.setCurrent(f);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){}
}
Copy code
: 0 ♥
Pham_loi
Chức vụ: 11:57:08, 17-08-2015 |
(Bài 15) ChoiceGroup. tương tự list trên form
Thấy bang ta vắng quá nên đăng bài mới cho đỡ buồn
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ự.
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:
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:
sau đó thì cho hiển thị form là hiển thị choicegroup:
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
: 0 ♥
Pham_loi
Chức vụ: 04:22:34, 11-08-2015 |
(bài 14) Phép chuyển kiểu trong J2ME
Như tôi đã nói ở phần trước, mỗi biến trong java đều có một kiểu dữ liệu nhất định nhưng khi ta có một biến đang ở một kiểu dữ liệu này mà ta lại muốn sử dụng nó với một kiểu dữ liệu khác như trong phép tính giữa các toán hạng không cùng kiểu. Ta phải làm sao? để trả lời cho câu hỏi này java đã hỗ trợ việc chuyển kiểu như sau:
Đây là một số phương pháp chuyển các giá trị số qua nhau, ta sẽ thêm"(kiểu chuyển)"vào trước giá trị cần chuyển.
Ví dụ: chuyển từ double sang int ta làm như sau.
double d = 3.14;
int i = (int)d;
thế là chuyển từ double sang integer, với các kiểu khác ta làm tương tự.
Còn chuyển từ dạng string sang số và ngược lại ta làm như sau.
Ví dụ: chuyển string sang int ta làm như sau.
String s = "8";
int a = Integer.parseInt(s);
Tương tự với Long, Double ta làm như sau.
LONG:
String s = "8";
long a = Long.parseLong(s);
DOUBLE:
String s = "3.14";
double a = Double.parseDouble(s);
.....
Còn muốn chuyển từ các dạng số về dạng string ta làm như sau.
INT:
int a = 8;
String s = String.valueOf(a);
DOUBLE:
double a = 3.14;
String s = String.valueOf(a);
Phép chuyển kiểu giúp ta lấy các số mà ta nhập vào từ TextField để tính toán như này:
int a = Integer.paserInt(tf.getString());
hàm tf.getString() để lấy giá trị của TextField tf chuyển vào biến số nguyên a..
: 0 ♥
Pham_loi
Chức vụ: 04:21:47, 11-08-2015 |
(bài 13) String chuỗi trong J2ME
String là kiểu chuỗi trong j2me, có nhiều cách để tạo một String như sau:
trong đó StringBuffer phải được tạo trước
* một số thao tác:
Nối số với chuỗi, kết quả: "2 là số hai"
Nối chuỗi với chuỗi, kết quả: "hai là số hai", cách làm khác:
Ta được kết quả như nhau.
lấy kí tự ở vị trí nào đó của string
lấy chuỗi từ vị trí đến vị trí
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.
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
xem hai chuỗi có giống nhau không, trả về boolean
chuyển thành ByteArray
Copy mảng char của String vào mảng char, với vị trí bắt đầu, vị trí cuối của String và vị trí bắt đầu copy của mảng char
vị trí của kí tự cần tìm xuất hiện đầu tiên trong chuỗi
vị trí của kí tự cần tìm xuất hiện ở cuối cùng
độ dài của string
trả về giá trị đúng sai xem chuỗi có kết thúc với chuỗi cần biết không
chuyển thành chararray
String là văn bản nên khi ta dùng sẽ gắn nó lên chỗ dùng văn bản
Ví dụ:
Nguồn: Holyeyed (có bổ sung bởi TVC97)
: 0 ♥
Pham_loi
Chức vụ: 04:21:05, 11-08-2015 |
(bài 12) Vòng lặp (Bài quan trọng)
Phần này mình không rõ lắm, nhưng vòng lặp rất quan trọng nên phải viết một tý để bạn dùng tạm.
• Vòng lặp FOR:
Vòng lặp for có cấu trúc:
Thứ tự thực hiện là 1-2-4-3, tạo biến, kiểm tra điều kiện, thực hiện các lệnh rồi xử lý biến
* Ví dụ 1:
vòng lặp chạy 10 lần
Ví dụ 2:
lặp 5 lần
Ví dụ 3:
không lặp
lặp vô hạn.
Đây là code mẫu lặp lại 5 lần và viết ra 5 chữ "NDT đập troai" :gy:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloWorld extends MIDlet{
Form f = new Form("tên form");
public void startApp(){
for(int i=0; i<5; i++)
{
f.append("NDT đập troai");
}
Display.getDisplay(this).setCurrent(f);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){ }
}
Copy code
import javax.microedition.lcdui.*;
public class HelloWorld extends MIDlet{
Form f = new Form("tên form");
public void startApp(){
for(int i=0; i<5; i++)
{
f.append("NDT đập troai");
}
Display.getDisplay(this).setCurrent(f);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){ }
}
Copy code
• Vòng lặp WHILE:
Cấu trúc:
Đây là vòng lặp không biết trước số lần lặp.
Ví dụ 5:
Ví dụ 6:
Đây là code ví dụ nó sẽ lặp lại 5 lần và viết ra 5 chữ "NDT rất đập troai" :haha:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloWorld extends MIDlet{
Form f = new Form("tên form");
public void startApp(){
int i=0;
while(i<5)
{
f.append("NDT rất đập troai");
i++;
}
Display.getDisplay(this).setCurrent(f);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){ }
}
Copy code
import javax.microedition.lcdui.*;
public class HelloWorld extends MIDlet{
Form f = new Form("tên form");
public void startApp(){
int i=0;
while(i<5)
{
f.append("NDT rất đập troai");
i++;
}
Display.getDisplay(this).setCurrent(f);
}
public void pauseApp(){}
public void destroyApp(boolean unconditional){ }
}
Copy code
• Vòng lặp DO - WHILE:
Vòng lặp không biết trước số lần lặp, số lần lặp ≥1. Giống repeat...until thì phải.
Cấu trúc:
Cái này thực hiện lệnh rồi mới kiểm tra điều kiện.
Ví dụ 7:
Ví dụ 8:
phát hát tiếp theo khi đã phát xong bài hiện tại, nếu đã là bài cuối thì ngưng.
Do-While ít dùng nên mình k cho code mẫu
• break; và continue;
Lệnh continue;để thoát khỏi LẦN lặp hiện tại.
Thực hiện lần lặp tiếp theo.
Ví dụ 9:
cho x tăng để cho nhân vật đi từ trái qua phải, nếu gặp vật cản thì tránh lên trên.
Khi gặp vật cản thì x không tăng nữa, chỉ có y tăng.
Lệnh break;để thoát khỏi CÂU LỆNH lặp hiện tại.
Thực hiện câu lệnh sau câu lệnh lặp.
Ví dụ 10:
lặp đến khi nào s chia hết cho a thì không lặp nữa (có thể dùng while).
* Chú ý:Dùng vòng lặp nên chú ý đến điều kiện lặp khi in ra hay gì đó mà điều kiện lặp là vô hạn thì sẽ tràn ram và OutOfMemory, bài vòng lặp hơi khó nhưng rất quan trọng các bạn cần phải làm đi làm lại dù khi đã quen rồi..
: 0 ♥
Pham_loi
Chức vụ: 04:20:24, 11-08-2015 |
(Bài 11) Câu lệnh điều kiện if - else
Câu lệnh if dùng rất rất nhiều hầu như game nào cũng phải có trên vài trăm câu lệnh điều kiện. Bài này và một số bài nữa mình chỉ đăng code tổng quát và ví dụ các bạn phải tự gắn nó vào HelloWorld hay Command gì đó.
• Cấu trúc là:
Điều kiện phải là phép so sánh hoặc là biến true/false (boolean).
Ví dụ:
nếu a>1 thì a=0
Có các dấu so sánh là: >, <, >=, <=, == (so sánh bằng), != (so sánh khác).
Ví dụ 2:
nếu tháng bằng 1 tức là qua năm mới rồi.
Ko được viết if(thang=1)... Vì đó là phép gán chứ ko phải phép so sánh.
Ví dụ 3:
đây là ví dụ ko dùng phép so sánh mà dùng biết boolean.
Ví dụ 4:
nếu bị đánh thì mất 10 máu.
..
Có thể dùng kết hợp nhiều điều kiện.
Ví dụ 5:
nếu ngày là 2, tháng là 9 thì viết lên Form dòng chữ đó.
• Có các cách kết hợp sau:
và &&, hoặc ||, thôi dùng từng đấy thôi.
Ví dụ 6:
nếu hết máu hoặc số tiền đạt mốc 1000 thì kết thúc game.
..
• Cấu trúc đủ:
nếu điều kiện đúng thì làm các lệnh đầu tiên,nếu sai thì làm các lệnh sau else.
Ví dụ 7:
• Cấu trúc rút gọn:
Ví dụ 8:
có thể rút gọn là:
Ví dụ 9:
có thể viết gọn là:
Câu lệnh điều kiện rút gọn có thể hơi khó đối vs ng mới nhưng sau này làm nhiều câu lệnh này sẽ thấy nó rất tiện.
Khi có nhiều trường hợp, ta dùng khối lệnh switch..case cho gọn.
Cấu trúc:
switch(biến){
case giá trị 1: dãy lệnh 1; break;
case giá trị 2: dãy lệnh 2; break;
...
case giá trị n: dãy lệnh n; break;
default: dãy lệnh n+1;
}
Copy code
case giá trị 1: dãy lệnh 1; break;
case giá trị 2: dãy lệnh 2; break;
...
case giá trị n: dãy lệnh n; break;
default: dãy lệnh n+1;
}
Copy code
Đầu tiên sẽ xét biến xem nó bằng giá trị bao nhiêu trong các giá trị sau case. Sau đó thực hiện đống lệnh tương ứng. Làm xong thoát khỏi khối switch luôn.
Nếu biến không bằng giá trị nào cả thì sẽ thực hiện dãy lệnh sau default (không có cũng được).
..
Ví dụ:
switch(chon){
case 1: f.append("chọn 1");
break;
case 2: f.append("chọn 2");
break;
default: f.append("chưa chọn");
}
Copy code
case 1: f.append("chọn 1");
break;
case 2: f.append("chọn 2");
break;
default: f.append("chưa chọn");
}
Copy code
Ví dụ:
switch(tf.getString()){
case '+': kq=a+b; break;
case '-': kq=a-b; break;
case '*': kq=a*b; break;
case '/': if(b!=0) kq=a/b; break;
defailt: f.append("nhập cái vẹo gì thế");
}
Copy code
case '+': kq=a+b; break;
case '-': kq=a-b; break;
case '*': kq=a*b; break;
case '/': if(b!=0) kq=a/b; break;
defailt: f.append("nhập cái vẹo gì thế");
}
Copy code
Tôi thì k hay dùng switch nên k đăng source nhưng nó cũng rất cần thiết để rút gọn câu lệnh điều kiện if - else.
: 0 ♥
Pham_loi
Chức vụ: 04:19:41, 11-08-2015 |
(Bài 10) Các kiểu dữ liệu cơ sở và các vấn đề liên quan.
Sau đây tôi sẽ giới thiệu với các bạn các kiểu dữ liệu cơ sở trong java và các vấn đề liên quan đến chúng.
Để khai báo một biến ta khai báo như sau:
[kiểu dữ liệu [tên biến;
Ví dụ:
int n;
thì
int:là viết tắt của Integer kiểu số nguyên.
n:là tên biến.
• Kiểu số nguyên:
- Java có các loại số nguyên sau:
1: byte ở dạng 8bits, giá trị từ -256 đến 255
2: short ở dạng 16bits, giá trị từ -32768 đến 32767
3: int ở dạng 32bits giá trị từ -2147483648 đến 2147483647
4: long ở dạng 64bits, giá trị k đếm xuể :shok:
- Các phép tính trên số nguyên:
= bằng
!= không bằng(khác)
> lớn hơn
< nhỏ hơn
>= lớn hơn hoặc bằng
<= nhỏ hơn hoặc bằng
, -, *, / cộng, trừ, nhân, chia
% chia lấy dư
tăng 1 đơn vị
- Các điều chú ý khi tính toán:
* Nếu cả hai toán hạng đều là kiểu long thì kết quả sẽ là kiểu long
* Nếu toán hạng nào không phải là long thì nó sẽ đc chuyển thành long trước khi thực hiện phép tính.
* Nếu 2 toán hạng đều không là long thì kết quả sẽ là int kể cả byte ,short
* Bất kì một toán hạng byte hay short nào cũng được chuyển thành int sau đó mới thực hiện phép tính.
• Kiểu số thực (kiểu dấu chấm động):
- Java hỗ trợ các kiểu số thực sau:
1: float ở dạng 32bits
2: double ở dạng 64bits
- Các điều chú ý khi tính toán:
* Nếu mỗi toán hạng đều thuộc kiểu dấu chấm động thì phép tính chuyển thành phép tính dấu chấm động
* Nếu một toán hạng là double thì tất cả các toán hạng khác đều chuyển thành kiểu double trước khi thực hiện phép toán.
* Nếu không có toán hạng nào là kiểu double thì các toán hạng đều được chuyển về kiểu float
• Kiểu dữ liệu char(kiểu kí tự):
- Đây là kiểu dữ liệu về kí tự. Mỗi biến char sẽ có giá trị là một kí tự Unicode.
- Ví dụ: a,b,$,
- Giá trị khởi tạo mặc định của kiểu char là null
• Kiểu dữ liệu Boolean:
- Đây là kiểu dữ liệu chỉ nhận một trong 2 giá trị true hoặc false(đúng hoặc sai)
- Giá trị khởi tạo mặc định của kiểu boolean là false
: 0 ♥
Pham_loi
Chức vụ: 04:18:59, 11-08-2015 |
[Bài 9 List gugồ gọi là danh sách
Bắt đầu:
>>List là 1dạng danh sách trong đồ hoạ cấp cao
hiểu vậy thôi
>>cách khai báo 1List(chỉ cần 1 List là dc rồi)
tui thường dùng kiểu List.IMPLICIT
ngoài ra vẫn còn 1vài kiểu khác nhưng ko cần thiết
>tạo 1list rồi thì nó sẽ chưa có j cả, cta phải append vào thôi:
Cách thêm:
l.append("abc",hình ảnh);
như vậy là màn hình đã có thêm 1dòng "abc" kèm hình ảnh nếu có
>>thêm Command vào list:
l.addCommand(ok);
thêm vào như bt thôi
d.setCurrent(l);
//hiển thị list lên màn hình
XONG phần khởi tạo;
>>Cách dùng:
>cta sẽ dùng Command để sủ dụng nó
public class minh extends MIDlet implements CommandListener{
dùng List trong hàm
commandAction(Command cm,Displayable dp){
>>khai báo vị trí trong List:
int index=l.getSelectedIndex();
//index = vị trí trọn trong list
index=0 tương ứng với vị trí thứ nhất trong List
>if(index==0){
d.setCurrent(f1);
}
nếu chọn vị trí thứ 1 (index =0) thì ta cho hiển thị form 1 ứng với dòng "abc" trong List(dòng đầu tiên)
if(dp==f1&&cm==back){
d.setCurrent(l);
//đang ở form 1 bấm back để trở về List
còn các Command khác thì tùy các bạn
Ngoài ra còn 1số thao tác khác nhưng theo tui thỳ ko cần thiết và chưa bao giờ cần sử dụng
code//
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
public class minh extends MIDlet implements CommandListener{
Command ok,back,exit;
Display d;
Form f1,f2;
List l;
public minh(){
l=new List("test list",List.IMPLICIT);
f1=new Form("form1");
f2=new Form("form2");
d=Display.getDisplay(this);
ok=new Command("OK",4,1);
back=new Command("BACK",Command.BACK,1);
exit=new Command("EXIT",7,1);
f1.append("dòng 1 tương ứng form 1");
f1.addCommand(back);
f1.setCommandListener(this);
f2.append("dòng 2 tương ứng form 2 do ta qđịnh");
f2.addCommand(back);
f2.setCommandListener(this);
l.append("vào form1");
l.append("vào form2");
l.addCommand(ok);
l.addCommand(exit);
d.setCurrent(l);
}
public void startApp(){}// code ở hết minh() rồi nên startApp() tui để trống cũng ko sao
public void pauseApp(){}
public void destroyApp(boolean b){
notifyDestroyed();
}
public void commandAction(Command cm,Displayable dp){
int index=l.getSelectedIndex();
if(index==0)d.setCurrent(f1);
if(index==1)d.setCurrent(f2);
if(dp==l&&cm==exit){
destroyApp(true);
}
if(dp==f1&&cm==back||dp==f2&&cm==back){
d.setCurrent(l);
}
}
}
Copy code
import javax.microedition.midlet.*;
public class minh extends MIDlet implements CommandListener{
Command ok,back,exit;
Display d;
Form f1,f2;
List l;
public minh(){
l=new List("test list",List.IMPLICIT);
f1=new Form("form1");
f2=new Form("form2");
d=Display.getDisplay(this);
ok=new Command("OK",4,1);
back=new Command("BACK",Command.BACK,1);
exit=new Command("EXIT",7,1);
f1.append("dòng 1 tương ứng form 1");
f1.addCommand(back);
f1.setCommandListener(this);
f2.append("dòng 2 tương ứng form 2 do ta qđịnh");
f2.addCommand(back);
f2.setCommandListener(this);
l.append("vào form1");
l.append("vào form2");
l.addCommand(ok);
l.addCommand(exit);
d.setCurrent(l);
}
public void startApp(){}// code ở hết minh() rồi nên startApp() tui để trống cũng ko sao
public void pauseApp(){}
public void destroyApp(boolean b){
notifyDestroyed();
}
public void commandAction(Command cm,Displayable dp){
int index=l.getSelectedIndex();
if(index==0)d.setCurrent(f1);
if(index==1)d.setCurrent(f2);
if(dp==l&&cm==exit){
destroyApp(true);
}
if(dp==f1&&cm==back||dp==f2&&cm==back){
d.setCurrent(l);
}
}
}
Copy code
>>>Source:
Tải Về Listzip_tLxkt.zip (4.54 KB)
>>>Ảnh minh họa:
hãy tải source về xem rõ hơn
: 0 ♥