Bài giả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ố tiến hành cải tiến chương trình liệt kê các số nguyên tố 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.
Trang 1Bà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
Trang 2Nộ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
Trang 32012-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
Trang 4Thêm chức năng
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
chứa dữ liệu Ban đầu mục Save tắt (disabled)
Trang 52012-2013 Object-Oriented Programming: IO Streams 5
Thêm chức năng
Trang 6Thêm chức năng
● Chọn thư mục và tên tệp để lưu kết quả:
Trang 72012-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<Integer> numbers = new ArrayList<Integer>();
Trang 8Cấu trúc dữ liệu List
một luồng ra writer, mỗi số trên một dòng:
for (Integer n : numbers) {
writer.write(n.toString());
}
Trang 92012-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ả
Trang 10class 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);
} }
Trang 112012-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 );
}
}
Trang 12public static void writeList(List<Integer> 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
Trang 132012-2013 Object-Oriented Programming: IO Streams 13
Chương trình
– LookAndFeelLister.java
Trang 14Tiếp tục cải tiến chương trình
100,000 thì giao diện dường như bị “treo”.
cho giao diện, dùng cho logic của chương trình).