Nếu thấy JBuilder hiển thị Project nào ₫ó của lần cuối cùng trước ₫ó, chọn menu File.Close Projects ₫ể hiển thị cửa sổ Close Projects rồi chọn button All và OK ₫ể ₫óng các Project lại...
Trang 1Trang 1
Môn Lập trình hướng ₫ối tượng Bài thực hành số 5 : Làm quen với Jbuilder & Java
Xây dựng 1 class ₫ối tượng theo yêu cầu Mục tiêu :
Giúp SV làm quen với môi trường lập trình trực quan JBuilder
Giúp SV làm quen với việc viết code bằng Java
Nội dung :
Tạo ₫ặc tả class miêu tả 1 stack nhiều số nguyên (số lượng không hạn chế), người dùng chỉ thấy 2 tác vụ : push(newVal) và pop (retVal) Hiện thực class vừa ₫ặc tả Viết 1 ứng dụng nhỏ ₫ể kiểm tra hoạt ₫ộng của class stack vừa xây dựng
Dịch và chạy chương trình
Debug chương trình ₫ể tìm lỗi nếu có
Qui trình :
Xem chi tiết trong các trang kế
Trang 21 Chạy JBuilder (hoặc bằng icon shortcut trên desktop hoặc bằng menu
Start.Programs ), cửa sổ ₫ầu tiên có dạng :
2 Nếu thấy JBuilder hiển thị Project nào ₫ó (của lần cuối cùng trước ₫ó), chọn menu File.Close Projects ₫ể hiển thị cửa sổ Close Projects rồi chọn button All và OK ₫ể ₫óng các Project lại
Trang 3Trang 3
3 Tạo Project mới bằng cách vào menu File.New Project Khi cửa sổ Step 1 dưới ₫ây hiển thị, nhập tên Project, chọn vị trí thư mục rồi ấn button Next
Trang 44 Khi cửa sổ Step 2 dưới ₫ây hiển thị, hiệu chỉnh các thông số cần thiết (nên dùng giá trị mặc ₫ịnh) rồi ấn button Next
5 Khi cửa sổ Step 3 dưới ₫ây hiển thị, hiệu chỉnh các thông số cần thiết (nên hiệu chỉnh nội dung của mục Encoding thành UTF8 ₫ể hỗ trợ tốt các chuỗi tiếng Việt Unicode trong các phần tử giao diện) rồi ấn button Finish ₫ể hoàn tất việc thiết lập các tham số của Project
Trang 5Trang 5
6 Chọn menu File.New ₫ể mở lại của sổ Object Gallery, chọn icon Application ₫ể tạo ứng dụng mới
Trang 67 Khi cửa sổ Step 1 dưới ₫ây hiển thị, nhập tên ứng dụng rồi ấn button Next.
8 Khi cửa sổ Step 2 dưới ₫ây hiển thị, nhập tên class quản lý Form giao diện ứng dụng
và title bar cho Form, rồi ấn button Next
Trang 7Trang 7
9 Khi cửa sổ Step 3 dưới ₫ây hiển thị, ₫ánh dấu chọn checkbox "Create a runtime…", nhập tên file quản lý cấu hình run-time cho ứng dụng, rồi ấn button Finish
Trang 810 Cửa sổ ₫ầu tiên của ứng dụng như sau (nó ₫ang hiển thị mã nguồn miêu tả Form giao diện của ứng dụng)
11 Chọn menu File.New ₫ể mở lại cửa sổ Object Gallery, chọn icon Interface và OK ₫ể tạo 1 interface mới
Trang 9Trang 9
12 Khi cửa sổ Interface Wizard sau ₫ây hiển thị, nhập tên interface và OK ₫ể tạo interface
Trang 1012 Khi cửa sổ hiển thị mã nguồn của interface vừa tạo hiển thị, ₫ịnh nghĩa interface với
2 tác vụ push và pop như sau :
public interface T_IntStack {
boolean push(int newVal); // de gia tri vao dinh stack
int pop() throws Exception ; // lay gia tri tu dinh stack ra
}
13 Chọn menu File.New ₫ể mở lại cửa sổ Object Gallery, chọn icon Class và OK ₫ể tạo
1 interface mới Khi cửa sổ Interface Wizard sau ₫ây hiển thị, nhập tên class và OK ₫ể tạo class
14 Khi cửa sổ hiển thị mã nguồn của class vừa tạo hiển thị, ₫ịnh nghĩa class với 2 tác
vụ push và pop như sau :
public class C_IntStack implements T_IntStack {
// khai báo các hằng cần dùng cho class
private final int GROWBY = 4;
private int data[]; //danh sách chứa các phần tử trong stack
private int top; // chỉ số phần tử ở ₫ỉnh stack
private int max; // ố lượng max hiện hành của stack
Trang 11Trang 11
// hiện thực hàm constructor cho class
public C_IntStack() {
try {
jbInit();
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void jbInit() throws Exception {
top = max = 0;
}
//hiện thực hàm push vào stack
public boolean push(int newVal) {
if (top==max) try { //hết stack hiện hành
//phân phối lại stack mới lớn hơn GROWBY phần tử int newdata[] = new int[GROWBY+max];
//di chuyển nội dung từ stack cũ sang stack mới for (int i = 0; i<max; i++)
newdata[i] =data[i];
//không delete stack cũ (₫ể JVM làm)
//ghi nhớ stack mới
data = newdata;
max += GROWBY;
}
catch (Exception e){
return false;
}
//chứa giá trị mới vào ₫ỉnh stack
data[top++] =newVal;
return true;
}
//hiện thực hàm pop 1 phần tử từ ₫ỉnh stack
public int pop() throws Exception {
if (top == 0) //cạn stack
throw new Exception ("Cạn stack");
else //return giá trị từ ₫ỉnh stack
return data[ top];
Trang 12}
}
15 Dời chuột về cửa sổ Project, ấn kép chuột vào mục IntStackDlg.java ₫ể làm việc với class miêu tả form giao diện của ứng dụng Chọn tab Design phía dưới vùng làm việc ₫ể hiển thị Form theo góc nhìn thiết kế trực quan, cửa sổ sau sẽ hiển thị :
16 Dời chuột về cửa sổ Structure (thường nằm phía dưới cửa sổ Project), tìm và chọn phần tử contentPane của this ₫ể hiển thị cửa sổ thuộc tính của nó Thiết lập lại thuộc tính layout về giá trị XYLayout ₫ể có thể thiết kế tự do các phần tử trong Form Tìm phần tử JScrollPane (trong nhóm Swing Container) và vẽ nó vào Form với diện tích chiếm gằn hết Form Tìm phần tử Jlist và vẽ nó vào JscrollPane, ₫ây là listbox hiển thị nội dung kiểm thử stack
Trang 13Trang 13
17 Chọn tab Source dưới vùng làm việc ₫ể hiển thị góc nhìn mã nguồn của Form Viết thêm ₫oạn code sau vào hàm jbinit() ₫ể tạo stack và thử 1 số hoạt ₫ộng push, pop trên
nó
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(xYLayout1);
setSize(new Dimension(300, 300));
setTitle("Trinh test stack chua cac so nguyen");
contentPane.setFont(new java.awt.Font("Arial",
Font.PLAIN, 12));
contentPane.setToolTipText("");
jList1.setFont(new java.awt.Font("Arial Unicode MS", Font.PLAIN, 12));
//thiết lập lại kích thước form cho đúng
this.setSize(new Dimension(280, 320));
//thiết lập đối tượng ListModel chứa nội dung của
ListBox
DefaultListModel model = new DefaultListModel();
jList1.setModel((ListModel)model);
int i,j ;
//tạo 1 đối tượng IntStack
T_IntStack s = new C_IntStack();
//push lần lượt các số từ -5 đến 10
for (i=-5; i<=10; i++)
if (!s.push(i)) {
Trang 14model.addElement("Không push được nữa!!!");
return;
}
//pop ra và hiển thị cho đến khi hết stack
try {
for (i = -5; i <= 11; i++)
model.addElement("Trị vừa pop ra là : " + s.pop()); }
catch (Exception e) {
model.addElement(e.toString());
}
contentPane.add(jScrollPane1, new XYConstraints(10,
9, 255, 269));
jScrollPane1.getViewport().add(jList1);
}
18 Chọn menu Run.Run Project ₫ể dịch và chạy thử ứng dụng Nếu bạn nhập ₫úng các
₫oạn code trên mà vẫn bị báo lỗi thì nguyên nhân thông thường nhất là class tương ứng thiết lệnh import phần tử cần dùng trong class ₫ó Hãy kiểm tra và thêm vào hay hiệu chỉnh lệnh import phần tử cần thiết Nếu chạy ₫úng thì kết quả Form có dạng sau :
Nội dung quá nhiều so với chiều ngang/dọc của ListBox, bạn có thể dời marquer trên scrollbar tương ứng ₫ể xem phần thông tin mong muốn trong listbox Lưu ý rằng ₫oạn code thử stack ở trên cố ý thử pop ra nhiều hơn 1 phân tử so với push vào Kết quả là chương trình báo lỗi "Cạn stack" trong lần pop cuối cùng ₫ó