Bài giảng Bài 6: Ứng dụng đồ họa – Liệt kê các số nguyên tố tập trung làm rõ liệt kê các số nguyên tố, các thành phần đồ họa, quản lí sự kiện, sử dụng lớp nội. Mời các bạn tham khảo bài giảng để nắm bắt nội dung chi tiết.
Bài 6: Ứng dụng đồ họa – Liệt kê số nguyên tố Lê Hồng Phương phuonglh@gmail.com Khoa Toán-Cơ-Tin học Trường ĐH Khoa học Tự nhiên, ĐHQG Hà Nội Nội dung ● Liệt kê số nguyên tố ● Các thành phần đồ họa ● Quản lí kiện ● Sử dụng lớp nội 2012-2013 Object-Oriented Programming: Introduction to Swing Liệt kê số nguyên tố ● ● Sử dụng thư viện Swing để phát triển ứng dụng với giao diện đồ họa cho phép liệt kê số nguyên tố Sử dụng lại lớp PrimeNumbers (Bài giảng 1) 2012-2013 Object-Oriented Programming: Introduction to Swing Liệt kê số nguyên tố ● ● ● Cửa sổ ứng dụng có tên “Prime Numbers”, gồm hai panơ Panơ Input chứa thành phần: – Một nhãn (JTextLabel) – Một trường văn (JTextField) – Một nút bấm (JButton) Panô Result chứa thành phần: – Một vùng văn (JTextArea) – Một khung cuộn (JScrollPane) 2012-2013 Object-Oriented Programming: Introduction to Swing Liệt kê số nguyên tố ● Khi nhập số n vào trường văn bấm phím Ok gõ Enter vùng văn hiển thị số nguyên tố nhỏ n – Mỗi số nguyên tố nằm dòng – Nếu có nhiều số ngun tố, vượt q số dòng hình cuộn tự động xuất 2012-2013 Object-Oriented Programming: Introduction to Swing Các thành phần đồ họa ● Chương trình sử dụng thành phần đồ họa sau thư viện Swing: – JFrame (cửa sổ ứng dụng) – JPanel (hai panô Input Result) – JLabel – JButton – JTextField – JTextArea – JScrollPane – BorderLayout, TitledBorder 2012-2013 Object-Oriented Programming: Introduction to Swing Chương trình ● ● Các lớp chương trình: – PrimeNumbers – PrimeNumberFrame (là JFrame) – PrimeNumberApp (chứa hàm main) PrimeNumbers không chứa thành phần đồ họa, cài đặt thuật toán kiểm tra liệt kê số nguyên tố 2012-2013 Object-Oriented Programming: Introduction to Swing Chương trình: PrimeNumberApp public class PrimeNumberApp { public static void main(String[] args) { PrimeNumberFrame app = new PrimeNumberFrame(); app.setVisible(true); } } 2012-2013 Object-Oriented Programming: Introduction to Swing Chương trình: PrimeNumberFrame public class PrimeNumberFrame extends JFrame { private JTextField nTextField; private JButton okButton; private JTextArea resultTextArea; private PrimeNumbers pn; public PrimeNumberFrame() { setTitle("Prime Numbers"); setSize(200, 400); setDefaultCloseOperation(EXIT_ON_CLOSE); initialize(); } // more code goes here Các phương thức kế thừa từ JFrame } 2012-2013 Object-Oriented Programming: Introduction to Swing Chương trình: PrimeNumberFrame ● ● ● Một lớp vật chứa (JFrame, JPanel ) dùng để chứa thành phần đồ họa (nút bấm – JButton, trường văn – JTextField, nhãn văn – JLabel ) Swing sử dụng lớp LayoutManager để quản lí việc trí thành phần đồ họa Có nhiều kiểu trí khác nhau: – BorderLayout – BoxLayout, CardLayout, FlowLayout, GridBagLayout, GridLayout, GroupLayout, SpringLayout 2012-2013 Object-Oriented Programming: Introduction to Swing 10 Chương trình: PrimeNumberFrame ● ● BorderLayout cho phép đặt đối tượng vào vị trí: – NORTH – SOUTH – EAST – WEST – CENTER NORTH WEST CENTER EAST SOUTH Kích thước đối tượng thường co dãn tự động theo kích thước thành phần vật chứa 2012-2013 Object-Oriented Programming: Introduction to Swing 11 Chương trình: PrimeNumberFrame private void initialize() { pn = new PrimeNumbers(); // prepare the input panel JPanel inputPanel = new JPanel(); inputPanel.setBorder(new TitledBorder("Input")); inputPanel.setLayout(new BorderLayout()); inputPanel.add(new JLabel("Enter n = "), BorderLayout.WEST); nTextField = new JTextField(); inputPanel.add(nTextField); okButton = new JButton("Ok"); inputPanel.add(okButton, BorderLayout.EAST); // add the input panel to the frame getContentPane().add(inputPanel, BorderLayout.NORTH); // more code goes here } 2012-2013 Object-Oriented Programming: Introduction to Swing 12 Chương trình: PrimeNumberFrame private void initialize() { // Gọi hàm tạo khác lớp JPanel // prepare the result panel JPanel resultPanel = new JPanel(new BorderLayout()); resultPanel.setBorder(new TitledBorder("Result")); resultTextArea = new JTextArea(); resultPanel.add(new JScrollPane(resultTextArea), BorderLayout.CENTER); // add the output panel to the frame getContentPane().add(resultPanel, BorderLayout.CENTER); // more code goes here } 2012-2013 Object-Oriented Programming: Introduction to Swing 13 Chương trình: PrimeNumberFrame class EnumeratePrimeNumbersListener implements ActionListener { @Override public void actionPerformed(ActionEvent event) { int n = Integer.parseInt(nTextField.getText()); String primes = pn.listPrimeNumbers(n); resultTextArea.setText(primes); } } ● Quản lí kiện: – Viết nghe kiện (bấm phím, kích chuột ), lớp cài đặt giao diện ActionListener – Giao diện có phương thức public void actionPerformed(ActionEvent event) 2012-2013 Object-Oriented Programming: Introduction to Swing 14 Chương trình: PrimeNumberFrame class EnumeratePrimeNumbersListener implements ActionListener { @Override public void actionPerformed(ActionEvent event) { int n = Integer.parseInt(nTextField.getText()); String primes = pn.listPrimeNumbers(n); resultTextArea.setText(primes); } } ● ● Lớp EnumeratePrimeNumbersListener lớp nội, nằm lớp PrimeNumberFrame Vì sử dụng lớp nội? – 2012-2013 Tiện lợi việc truy nhập liệu lớp chứa (Ví dụ, sử dụng trường pn, resultTextArea lớp PrimeNumberFrame) Object-Oriented Programming: Introduction to Swing 15 Chương trình: PrimeNumberFrame ● Gắn nghe kiện bấm phím Enter (hoặc kích chuột trái) cho trường văn nút bấm: private void initialize() { // // add an action listener to the Ok button EnumeratePrimeNumbersListener listener = new EnumeratePrimeNumbersListener(); okButton.addActionListener(listener); // add the same action listener to the text field nTextField.addActionListener(listener); } 2012-2013 Object-Oriented Programming: Introduction to Swing 16 Tham khảo thêm ● Graphical User Interfaces – ● Creating GUI with JFC/Swing – ● http://docs.oracle.com/javase/tutorial/ui/TOC.html http://docs.oracle.com/javase/tutorial/uiswing/index.html API Documentation: – http://docs.oracle.com/javase/6/docs/api/ – Browse javax.swing.* packages 2012-2013 Object-Oriented Programming: Introduction to Swing 17 ... triển ứng dụng với giao diện đồ họa cho phép liệt kê số nguyên tố Sử dụng lại lớp PrimeNumbers (Bài giảng 1) 2012-2013 Object-Oriented Programming: Introduction to Swing Liệt kê số nguyên tố ●...Nội dung ● Liệt kê số nguyên tố ● Các thành phần đồ họa ● Quản lí kiện ● Sử dụng lớp nội 2012-2013 Object-Oriented Programming: Introduction to Swing Liệt kê số nguyên tố ● ● Sử dụng thư viện... Chương trình sử dụng thành phần đồ họa sau thư viện Swing: – JFrame (cửa sổ ứng dụng) – JPanel (hai panô Input Result) – JLabel – JButton – JTextField – JTextArea – JScrollPane – BorderLayout,