oop-9

12

Click here to load reader

Upload: thai-hoc-vu

Post on 29-Jun-2015

927 views

Category:

Education


3 download

DESCRIPTION

slide java o lop

TRANSCRIPT

Page 1: OOP-9

Bài 9: Xử lí sự kiện

Giảng viên: Nguyễn Thị Minh Huyề[email protected]

Đỗ Thanh Hà[email protected]

Page 2: OOP-9

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

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

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

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

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

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

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

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

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

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

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