oop-9
DESCRIPTION
slide java o lopTRANSCRIPT
![Page 2: OOP-9](https://reader038.vdocuments.pub/reader038/viewer/2022100603/55910ddb1a28ab25148b45f2/html5/thumbnails/2.jpg)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 2
Tài liệu tham khảo BigJava – chương 12
![Page 3: OOP-9](https://reader038.vdocuments.pub/reader038/viewer/2022100603/55910ddb1a28ab25148b45f2/html5/thumbnails/3.jpg)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 3
Sự kiện, nguồn sự kiện, bộ nghe sự kiện (1)
Các sự kiện (events) trên giao diện người dùng bao gồm bấm phím, di chuyển chuột, bấm nút, v.v. 1 chương trình có thể chỉ ra các sự kiện mà nó quan tâm, còn các sự
kiện khác thì bỏ qua không xử lí Bộ nghe sự kiện (event listener):
Được báo khi sự kiện đó xảy ra Thuộc về 1 lớp do người lập trình định nghĩa Các phương thức của nó mô tả hành vi được thực hiện khi sự kiện xảy
ra 1 chương trình sẽ chỉ ra các sự kiện nó muốn xử lí bằng cách cài các
đối tượng nghe sự kiện Nguồn sự kiện (event source):
Khi 1 sự kiện xảy ra, nguồn sự kiện báo cho tất cả các bộ nghe sự kiện
![Page 4: OOP-9](https://reader038.vdocuments.pub/reader038/viewer/2022100603/55910ddb1a28ab25148b45f2/html5/thumbnails/4.jpg)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 4
Sự kiện, nguồn sự kiện, bộ nghe sự kiện (2)
Ví dụ: Dùng thành phần JButton cho các nút bấm trên giao diện; gắn 1 đối tượng nghe sự kiện cài đặt kiểu giao diện ActionListener cho mỗi nút bấm (button) public interface ActionListener {
void actionPerformed(ActionEvent event); }
Cần viết 1 lớp cài đặt phương thức actionPerformed chứa các lệnh được thực hiện khi kích chuột vào nút bấm trên giao diện
Tham biến event chứa các thông tin chi tiết về sự kiện, vd như là thời gian xảy ra sự kiện.
Tạo 1 đối tượng nghe và gắn vào thành phần nút bấmActionListener listener = new ClickListener(); button.addActionListener(listener);
Xem ch12/button1
![Page 5: OOP-9](https://reader038.vdocuments.pub/reader038/viewer/2022100603/55910ddb1a28ab25148b45f2/html5/thumbnails/5.jpg)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 5
Sự kiện, nguồn sự kiện, bộ nghe sự kiện (3)
VD chạy chương trình
![Page 6: OOP-9](https://reader038.vdocuments.pub/reader038/viewer/2022100603/55910ddb1a28ab25148b45f2/html5/thumbnails/6.jpg)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 6
Xây dựng ứng dụng với các nút bấm (1)
Ví dụ: chương trình hiển thị kết quả đầu tư; mỗi khi bấm vào nút , lãi được cộng thêm vào tài khoản và số tiền mới trong tài khoản được in ra Tạo đối tượng nút bấm thuộc lớp JButton
JButton button = new JButton("Add Interest"); Cần có 1 thành phần giao diện người dùng để hiển thị thông báo (số tiền
trong tài khoản) JLabel label = new JLabel("balance=" + account.getBalance());
Dùng 1 thành phần chứa JPanel để ghép các thành phần giao diện vào 1 nhóm
JPanel panel = new JPanel();panel.add(button);panel.add(label);frame.add(panel);
![Page 7: OOP-9](https://reader038.vdocuments.pub/reader038/viewer/2022100603/55910ddb1a28ab25148b45f2/html5/thumbnails/7.jpg)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 7
Xây dựng ứng dụng với các nút bấm (2)
Bộ nghe có nhiệm vụ cộng lãi và hiển thị số tiền mớiclass AddInterestListener implements ActionListener { public void actionPerformed(ActionEvent event) {
double interest = account.getBalance()*INTEREST_RATE/100; account.deposit(interest); label.setText("balance=" + account.getBalance());
} }
Thêm AddInterestListener như 1 lớp trong để nó có thể truy cập tới biến xung quanh có final (account và label)
Xem ch12/button2
![Page 8: OOP-9](https://reader038.vdocuments.pub/reader038/viewer/2022100603/55910ddb1a28ab25148b45f2/html5/thumbnails/8.jpg)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 8
Xử lí dữ liệu vào dạng văn bản Dùng thành phần JTextField để tạo khoảng trống cho người dùng
nhập dữ liệu final int FIELD_WIDTH = 10; // In characters
final JTextField rateField = new JTextField(FIELD_WIDTH); Đặt 1 thành phần nhãn JLabel cạnh mỗi trường văn bản
JLabel rateLabel = new JLabel("Interest Rate: "); Thêm 1 nút bấm để người dùng nhấn vào sau khi nhập xong dữ liệu
cần xử lí Phương thức actionPerformed của nút này sẽ đọc dữ liệu đã nhập vào
trường văn bản (dùng getText)class AddInterestListener implements ActionListener { public void actionPerformed(ActionEvent event) {
double rate = Double.parseDouble(rateField.getText()); . . .
} }
Xem chương trình ví dụ trong ch12/textfield
![Page 9: OOP-9](https://reader038.vdocuments.pub/reader038/viewer/2022100603/55910ddb1a28ab25148b45f2/html5/thumbnails/9.jpg)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 9
Sự kiện chuột (1) Dùng 1 bộ nghe chuột để bắt các sự kiện chuột
Cài đặt kiểu giao diện MouseListenerpublic interface MouseListener { void mousePressed(MouseEvent event); // Called when a mouse button has been pressed on a component void mouseReleased(MouseEvent event); // Called when a mouse button has been released on a component void mouseClicked(MouseEvent event); // Called when the mouse has been clicked on a component void mouseEntered(MouseEvent event); // Called when the mouse enters a component void mouseExited(MouseEvent event); // Called when the mouse exits a component }
![Page 10: OOP-9](https://reader038.vdocuments.pub/reader038/viewer/2022100603/55910ddb1a28ab25148b45f2/html5/thumbnails/10.jpg)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 10
Sự kiện chuột (2) Gắn 1 bộ nghe chuột vào 1 thành phần bằng cách gọi
phương thức addMouseListener public class MyMouseListener implements MouseListener {
// Implements five methods } MouseListener listener = new MyMouseListener(); component.addMouseListener(listener);
Chương trình ví dụ: cải tiến chương trình RectangleComponentViewer trong bài 4 (ch05); khi người dùng kích chuột thì di chuyển hình chữ nhật Xem ch12/mouse/RectangleComponent.java
![Page 11: OOP-9](https://reader038.vdocuments.pub/reader038/viewer/2022100603/55910ddb1a28ab25148b45f2/html5/thumbnails/11.jpg)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 11
Sự kiện chuột (3) Gọi phương thức repaint khi sửa các hình mà paintComponent vẽ
box.setLocation(x, y); repaint();
Bộ nghe chuột: nếu bấm chuột, bộ nghe chuyển hình chữ nhật tới vị trí của chuột
class MousePressListener implements MouseListener { public void mousePressed(MouseEvent event) {
int x = event.getX(); int y = event.getY(); component.moveTo(x, y);
} // Do-nothing methods public void mouseReleased(MouseEvent event) {} public void mouseClicked(MouseEvent event) {} public void mouseEntered(MouseEvent event) {} public void mouseExited(MouseEvent event) {}
} Cả 5 phương thức của giao diện phải được cài đặt, phương thức nào không
dùng thì để trống phần thân hàm
![Page 12: OOP-9](https://reader038.vdocuments.pub/reader038/viewer/2022100603/55910ddb1a28ab25148b45f2/html5/thumbnails/12.jpg)
2009-2010 OOP - http://mim.hus.edu.vn/elearning 12
Sự kiện chuột (4) Xem ch12/mouse/RectangleComponentViewer.java Kết quả chương trình:
Chương trình trong ch12/mouse có thể viết lại dùng các hàm thư viện gọn nhẹ hơn:oop-9/mouse