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.
Trang 1Bài 6: Ứng dụng đồ họa – Liệt kê
các 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
Trang 2Nội dung
● 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
Trang 32012-2013 Object-Oriented Programming: Introduction to Swing 3
Liệt kê các số nguyên tố
● Sử dụng thư viện Swing để phát triển một ứng dụng với giao diện đồ họa cho phép liệt kê các
số nguyên tố.
● Sử dụng lại lớp PrimeNumbers (Bài giảng 1)
Trang 4Liệt kê các số nguyên tố
● Cửa sổ ứng dụng có tên “Prime Numbers”,
gồm hai panô
● Panô Input chứa 3 thành phần:
– Một nhãn (JTextLabel)
– Một trường văn bản (JTextField)
– Một nút bấm (JButton)
● Panô Result chứa 2 thành phần:
– Một vùng văn bản (JTextArea)
– Một khung cuộn (JScrollPane)
Trang 52012-2013 Object-Oriented Programming: Introduction to Swing 5
Liệt kê các số nguyên tố
● Khi nhập một số n vào trường văn bản và
bấm phím Ok hoặc gõ Enter thì vùng văn
bản hiển thị các số nguyên tố nhỏ hơn n.
– Mỗi số nguyên tố nằm trên một dòng
– Nếu có nhiều số nguyên tố, vượt quá
số dòng của màn hình thì thanh cuộn
tự động xuất hiện
Trang 6Các thành phần đồ họa
● Chương trình sử dụng các thành phần đồ họa sau
của thư viện Swing:
– JFrame (cửa sổ ứng dụng)
– JPanel (hai panô Input và Result)
– JLabel
– JButton
– JTextField
– JTextArea
– JScrollPane
– BorderLayout, TitledBorder
Trang 72012-2013 Object-Oriented Programming: Introduction to Swing 7
Chương trình
● Các lớp của chương trình:
– PrimeNumbers
– PrimeNumberFrame (là một JFrame)
– PrimeNumberApp (chứa hàm main)
● PrimeNumbers không chứa các thành phần đồ họa, chỉ cài đặt thuật toán kiểm tra và liệt kê số nguyên tố.
Trang 8Chương trình: PrimeNumberApp
public class PrimeNumberApp {
public static void main(String[] args) {
PrimeNumberFrame app = new PrimeNumberFrame();
app.setVisible( true );
} }
Trang 92012-2013 Object-Oriented Programming: Introduction to Swing 9
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
Trang 10Chương trình: PrimeNumberFrame
● Một lớp vật chứa (JFrame, JPanel ) dùng để chứa các thành phần đồ họa (nút bấm – JButton, trường văn bản – JTextField, nhãn văn bản – JLabel )
● Swing sử dụng lớp LayoutManager để quản lí việc bài trí các thành phần đồ họa
● Có nhiều kiểu bài trí khác nhau:
– BorderLayout
– BoxLayout, CardLayout, FlowLayout, GridBagLayout, GridLayout, GroupLayout, SpringLayout
Trang 112012-2013 Object-Oriented Programming: Introduction to Swing 11
Chương trình: PrimeNumberFrame
● BorderLayout cho phép đặt đối tượng vào một trong 5 vị trí:
– NORTH
– SOUTH
– EAST
– WEST
– CENTER
● Kích thước của các đối tượng thường được co dãn tự
động theo kích thước của thành phần vật chứa
NORTH
SOUTH
Trang 12Chươ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
}
Trang 132012-2013 Object-Oriented Programming: Introduction to Swing 13
Chương trình: PrimeNumberFrame
private void initialize() {
//
// 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
}
Gọi một hàm tạo khác của lớp JPanel
Trang 14Chươ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í sự kiện:
– Viết một bộ nghe sự kiện (bấm phím, kích chuột ), là một lớp cài đặt giao diện ActionListener
– Giao diện này có một phương thức duy nhất
public void actionPerformed(ActionEvent event)
Trang 152012-2013 Object-Oriented Programming: Introduction to Swing 15
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à lớp nội, nằm
trong lớp PrimeNumberFrame
● Vì sao sử dụng lớp nội?
– Tiện lợi trong việc truy nhập các dữ liệu của lớp chứa
nó (Ví dụ, sử dụng các trường pn, resultTextArea của
lớp PrimeNumberFrame)
Trang 16Chương trình: PrimeNumberFrame
● Gắn bộ nghe sự kiện bấm phím Enter (hoặc kích
chuột trái) cho trường văn bản và 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);
}
Trang 172012-2013 Object-Oriented Programming: Introduction to Swing 17
Tham khảo thêm
● Graphical User Interfaces
● Creating GUI with JFC/Swing
● API Documentation:
– Browse javax.swing.* packages