Đ tài 8. X lý các s ki n trong Javaề ử ự ệ
I. Khái ni m và c s x lý s ki nệ ơ ở ử ự ệ
B t kỳ ch ng trình có giao di n đ h a nào th ng h tr vi c kích ho t các s ki nấ ươ ệ ồ ọ ườ ỗ ợ ệ ạ ự ệ
t con chu t ho c bàn phím. Môi tr ng đi u hành s g i các s ki n này t i ch ng trìnhừ ộ ặ ườ ề ẽ ử ự ệ ớ ươ
đang ch y. L p trình viên đ c hoàn toàn quy t đ nh đi u gì s x y ra khi các s ki n nàyạ ậ ượ ế ị ề ẽ ả ự ệ
đ c kích ho t.ượ ạ
Trong Java s d ng m t cách ti p c n d a trên các khái ni m:ử ụ ộ ế ậ ự ệ
- Các ngu n c a s ki n (event source)ồ ủ ự ệ
- Các b l ng nghe s ki n (event listener)ộ ắ ự ệ
Các ngu n s ki n chính là các đ i t ng đi u khi n, chúng có các ph ng th c đồ ự ệ ố ượ ề ể ươ ứ ể
l p trình viên đăng ký các b l ng nghe cho chúng. Khi m t s ki n x y ra đ i v i m t ngu nậ ộ ắ ộ ự ệ ả ố ớ ộ ồ
s ki n, nó s g i thông báo này t i t t c các b l ng nghe s ki n đ c đăng ký cho sự ệ ẽ ử ớ ấ ả ộ ắ ự ệ ượ ự
ki n đó.ệ
Đ i v i m t ngôn ng OOP nh Java thì toàn b thông tin v s ki n đ c đóng góiố ớ ộ ữ ư ộ ề ự ệ ượ
trong m t l p event. T t c các l p event đ u d n xu t t l p java.util.EventObject. M i lo iộ ớ ấ ả ớ ề ẫ ấ ừ ớ ỗ ạ
s ki n t ng ng v i m t l p d n xu t, ch ng h n nh ActionEvent và WindowEvent. Sauự ệ ươ ứ ớ ộ ớ ẫ ấ ẳ ạ ư
đây là cây phân c p ch s k th a gi a các l p s ki n trong Java:ấ ỉ ự ế ừ ữ ớ ự ệ
96
Các s ki n trên đ c g i cho các đ i t ng l ng nghe t ng ng nh : ActionListenerự ệ ượ ử ố ượ ắ ươ ứ ư
MouseMotionListener
AdjustmentListener MouseWheelListener
FocusListener WindowListener
ItemListener WindowFocusListener
KeyListener WindowStateListener
MouseListener
Các ngu n s ki n khác nhau có th phát sinh các s ki n khác nhau. Ví d m t buttonồ ự ệ ể ự ệ ụ ộ
(nút b m) thì phát sinh s ki n ActionEvent trong khi m t c a s l i phát sinh s ki nấ ự ệ ộ ử ổ ạ ự ệ
WindowEvent.
Tóm l i, m t s ki n đ c qu n lý d a trên các khái ni m:ạ ộ ự ệ ượ ả ự ệ
1. M t đ i t ng l ng nghe là m t bi u hi n c a m t l p có cài đ t giao di nộ ố ượ ắ ộ ể ệ ủ ộ ớ ặ ệ
l ng nghe s ki nắ ự ệ
Có th có nhi u b l ng nghe đ c đăng ký cho m t ngu n s ki n, khi đó s ki nể ề ộ ắ ượ ộ ồ ự ệ ự ệ
cũng đ c g i t i t t c các b l ng nghe và t i ph ng th c actionPerformed c a chúng.ượ ử ớ ấ ả ộ ắ ớ ươ ứ ủ
S đ sequence cho đo n code trên nh sau:ơ ồ ạ ư
98
Sau đây là m t ví d v x lý s ki n click cho 3 đ i t ng Jbutton:ộ ụ ề ử ự ệ ố ượ
M t Button đ c t o ra nh sau b ng cách g i constructor c a JButton v i m t chu iộ ượ ạ ư ằ ọ ủ ớ ộ ỗ
nhãn ho c m t nh hay c hai:ặ ộ ả ả
JButton yellowButton = new JButton("Yellow");
JButton blueButton = new JButton(new ImageIcon("blue-ball.gif"));
Thêm 3 Button vào 1 panel nh sau:ư
Class ButtonPanel extends JPanel
{
public ButtonPanel()
{
JButton yellowButton = new JButton("Yellow");
JButton blueButton = new JButton("Blue");
99
JButton redButton = new JButton("Red");
add(yellowButton);
add(blueButton);
add(redButton);
}
}
Bây gi chúng ta đ nh nghĩacác b l ng nghe cho các Button này g i là ColorAction nhờ ị ộ ắ ọ ư
sau:
public class ColorAction implements ActionListener
{
public ColorAction(Color c)
{
backgroundColor =c;