Bài giảng Lập trình hướng đối tượng - Bài 8: Tiếp tục cải tiến chương trình đồ họa liệt kê các số nguyên tố - Lê Hồng Phương

Nội dung

● Tiếp tục cải tiến chương trình liệt kê các số nguyên

tố trong bài giảng trước:

– Sử dụng cấu trúc dữ liệu List

– Sử dụng thành phần đồ họa JList

– Ghi danh sách số nguyên tố vào tệp văn bản

– Sử dụng hộp thoại chọn tệp JFileChooser

pdf 14 trang phuongnguyen 7800
Bạn đang xem tài liệu "Bài giảng Lập trình hướng đối tượng - Bài 8: Tiếp tục cải tiến chương trình đồ họa liệt kê các số nguyên tố - Lê Hồng Phương", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Bài giảng Lập trình hướng đối tượng - Bài 8: Tiếp tục cải tiến chương trình đồ họa liệt kê các số nguyên tố - Lê Hồng Phương

Bài giảng Lập trình hướng đối tượng - Bài 8: Tiếp tục cải tiến chương trình đồ họa liệt kê các số nguyên tố - Lê Hồng Phương
Bài 8: Tiếp tục cải tiến chương trình 
đồ họa liệt kê các số nguyên tố
Lê Hồng Phương, 
Nguyễn Việt Hùng, Hà Mỹ Linh
phuonglh@gmail.com
Khoa Toán-Cơ-Tin học
Trường Đại học Khoa học Tự nhiên Hà Nội
2012-2013 Object-Oriented Programming: IO Streams 2
Nội dung
● Tiếp tục cải tiến chương trình liệt kê các số nguyên 
tố trong bài giảng trước:
– Sử dụng cấu trúc dữ liệu List
– Sử dụng thành phần đồ họa JList 
– Ghi danh sách số nguyên tố vào tệp văn bản
– Sử dụng hộp thoại chọn tệp JFileChooser 
2012-2013 Object-Oriented Programming: IO Streams 3
Nội dung
● Tiếp tục cải tiến chương trình liệt kê các số nguyên 
tố trong bài giảng trước:
– Sử dụng cấu trúc dữ liệu List
– Sử dụng thành phần đồ họa JList 
– Ghi danh sách số nguyên tố vào tệp văn bản
– Sử dụng hộp thoại chọn tệp JFileChooser 
2012-2013 Object-Oriented Programming: IO Streams 4
Thêm chức năng
● Thêm mục thực đơn Save trong menu File.
● Không còn sử dụng JTextArea để lưu kết quả, thay 
vào đó là JList – thích hợp cho việc chứa một danh 
sách đối tượng.
– Tiếp cận hướng đối tượng: JList chỉ là thành phần 
biểu diễn, mô hình dữ liệu của JList được mô tả 
bởi ListModel.
● Mục Save chỉ được bật (enabled) nếu danh sách có 
chứa dữ liệu. Ban đầu mục Save tắt (disabled).
2012-2013 Object-Oriented Programming: IO Streams 5
Thêm chức năng
2012-2013 Object-Oriented Programming: IO Streams 6
Thêm chức năng
● Chọn thư mục và tên tệp để lưu kết quả:
2012-2013 Object-Oriented Programming: IO Streams 7
Cấu trúc dữ liệu List
● List là giao diện biểu diễu kiểu cấu trúc dữ liệu danh sách 
– Sẽ có bài giảng riêng về Collection trong Java.
● Có nhiều cách cài đặt List. Lớp ArrayList cài đặt List dưới 
dạng mảng.
● List có thể chứa dữ liệu tổng quát – các phần tử của List 
là bất kì Object nào.
● Sử dụng List để chứa các số nguyên:
List numbers = new ArrayList();
2012-2013 Object-Oriented Programming: IO Streams 8
Cấu trúc dữ liệu List
● Thêm một phần tử (số nguyên) p vào danh sách:
– numbers.add(p); hoặc 
– numbers.add(new Integer(p));
● Duyệt mọi phần tử của danh sách và ghi chúng vào 
một luồng ra writer, mỗi số trên một dòng:
for (Integer n : numbers) {
writer.write(n.toString());
writer.write("\n");
}
2012-2013 Object-Oriented Programming: IO Streams 9
Thêm nút Save vào thực đơn
// Save
saveMenuItem = new JMenuItem("Save");
saveMenuItem.setMnemonic(KeyEvent.VK_S);
saveMenuItem.setEnabled(false);
saveMenuItem.addActionListener(new SaveActionListener());
menu.add(saveMenuItem);
Ban đầu chức năng
ghi kết quả bị tắt
Cài đặt chức năng 
ghi kết quả
2012-2013 Object-Oriented Programming: IO Streams 10
SaveActionListener
class SaveActionListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent arg0) {
// open a message dialog to accept a file name from user
JFileChooser fileChooser = new JFileChooser();
int value =
 fileChooser.showSaveDialog(PrimeNumberFrame.this);
if (value == JFileChooser.APPROVE_OPTION) {
String fileName = 
fileChooser.getSelectedFile().getAbsolutePath();
if (numbers != null) {
PrimeNumberIO.writeList(numbers, fileName);
}
}
}
}
Ghi danh sách numbers vào 
một tệp có tên fileName
2012-2013 Object-Oriented Programming: IO Streams 11
EnumeratePrimeNumbersListener
public void actionPerformed(ActionEvent event) {
// ...
// update the prime list
numbers = pn.computePrimeNumbers(n);
DefaultListModel listModel = new DefaultListModel();
for (Integer p : numbers) {
listModel.addElement(p);
}
primeList.setModel(listModel);
// enable the Save action
if (numbers.size() > 0) {
saveMenuItem.setEnabled(true);
} else {
saveMenuItem.setEnabled(false);
}
}
2012-2013 Object-Oriented Programming: IO Streams 12
PrimeNumberIO
public static void writeList(List numbers, String fileName) {
BufferedWriter writer = null;
try {
writer = new BufferedWriter(new FileWriter(fileName));
for (Integer n : numbers) {
writer.write(n.toString());
writer.write("\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Sử dụng tệp văn bản
để lưu dữ liệu
2012-2013 Object-Oriented Programming: IO Streams 13
Chương trình
● Xem các tệp mã nguồn trong gói lecture7.primes3
– ​LookAndFeelLister.java
– PrimeNumberApp.java
– PrimeNumberFrame.java
– PrimeNumbers.java
– PrimeNumberIO.java
2012-2013 Object-Oriented Programming: IO Streams 14
Tiếp tục cải tiến chương trình
● Chương trình mặc dù đơn giản nhưng vẫn chưa hoàn thiện.
● Nếu người dùng nhập vào một số n tương đối lớn, ví dụ 
100,000 thì giao diện dường như bị “treo”.
● Lí do: 
– Cần nhiều thời gian để liệt kê mọi số nguyên tố nhỏ hơn n.
● Hướng cải tiến:
– Sử dụng nhiều luồng (thread) làm việc khác nhau (dùng 
cho giao diện, dùng cho logic của chương trình).
– Sử dụng thành phần đồ họa JProgressBar để thông báo 
mức độ hoàn thiện công việc liệt kê số: 

File đính kèm:

  • pdfbai_giang_lap_trinh_huong_doi_tuong_bai_8_tiep_tuc_cai_tien.pdf