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.
Bài 8: Tiếp tục cải tiến chương trình đồ họa liệt kê 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 Nội dung ● Tiếp tục cải tiến chương trình liệt kê số nguyên tố giảng trước: – Sử dụng cấu trúc 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 – Sử dụng hộp thoại chọn tệp JFileChooser 2012-2013 Object-Oriented Programming: IO Streams Nội dung ● Tiếp tục cải tiến chương trình liệt kê số nguyên tố giảng trước: – Sử dụng cấu trúc 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 – Sử dụng hộp thoại chọn tệp JFileChooser 2012-2013 Object-Oriented Programming: IO Streams Thêm chức ● ● Thêm mục thực đơn Save menu File Khơng cịn sử dụng JTextArea để lưu kết quả, thay vào JList – thích hợp cho việc chứa danh sách đối tượng – ● Tiếp cận hướng đối tượng: JList thành phần biểu diễn, mơ hình liệu JList mơ tả ListModel Mục Save bật (enabled) danh sách có chứa liệu Ban đầu mục Save tắt (disabled) 2012-2013 Object-Oriented Programming: IO Streams Thêm chức 2012-2013 Object-Oriented Programming: IO Streams Thêm chức ● Chọn thư mục tên tệp để lưu kết quả: 2012-2013 Object-Oriented Programming: IO Streams Cấu trúc liệu List ● List giao diện biểu diễu kiểu cấu trúc liệu danh sách – ● ● ● Sẽ có giảng riêng Collection Java Có nhiều cách cài đặt List Lớp ArrayList cài đặt List dạng mảng List chứa liệu tổng quát – phần tử List Object Sử dụng List để chứa số nguyên: List numbers = new ArrayList(); 2012-2013 Object-Oriented Programming: IO Streams Cấu trúc liệu List ● ● Thêm phần tử (số nguyên) p vào danh sách: – numbers.add(p); – numbers.add(new Integer(p)); Duyệt phần tử danh sách ghi chúng vào luồng writer, số dòng: for (Integer n : numbers) { writer.write(n.toString()); writer.write("\n"); } 2012-2013 Object-Oriented Programming: IO Streams Thêm nút Save vào thực đơn // Save saveMenuItem = new JMenuItem("Save"); Ban đầu chức saveMenuItem.setMnemonic(KeyEvent.VK_S); ghi kết bị tắt saveMenuItem.setEnabled(false); saveMenuItem.addActionListener(new SaveActionListener()); menu.add(saveMenuItem); Cài đặt chức ghi kết 2012-2013 Object-Oriented Programming: IO Streams 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 } tệp có tên fileName 2012-2013 Object-Oriented Programming: IO Streams 10 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 11 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()); Sử dụng tệp văn writer.write("\n"); để lưu liệu } } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } 2012-2013 Object-Oriented Programming: IO Streams 12 Chương trình ● Xem tệp mã nguồn gói lecture7.primes3 – LookAndFeelLister.java – PrimeNumberApp.java – PrimeNumberFrame.java – PrimeNumbers.java – PrimeNumberIO.java 2012-2013 Object-Oriented Programming: IO Streams 13 Tiếp tục cải tiến chương trình ● ● ● Chương trình đơn giản chưa hoàn thiện Nếu người dùng nhập vào số n tương đối lớn, ví dụ 100,000 giao diện dường bị “treo” Lí do: – ● Cần nhiều thời gian để liệt kê số nguyên tố nhỏ n Hướng cải tiến: – Sử dụng nhiều luồng (thread) làm việc khác (dùng cho giao diện, dùng cho logic chương trình) – Sử dụng thành phần đồ họa JProgressBar để thông báo mức độ hồn thiện cơng việc liệt kê số: 2012-2013 Object-Oriented Programming: IO Streams 14 ...Nội dung ● Tiếp tục cải tiến chương trình liệt kê số nguyên tố giảng trước: – Sử dụng cấu trúc 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 – Sử... Streams Nội dung ● Tiếp tục cải tiến chương trình liệt kê số nguyên tố giảng trước: – Sử dụng cấu trúc 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 – Sử... nhiều thời gian để liệt kê số nguyên tố nhỏ n Hướng cải tiến: – Sử dụng nhiều luồng (thread) làm việc khác (dùng cho giao diện, dùng cho logic chương trình) – Sử dụng thành phần đồ họa JProgressBar