Tải bản đầy đủ (.pdf) (12 trang)

Xử lý các sự kiện trong Java

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (650.77 KB, 12 trang )

Đ 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ắ ự ệ


2. M t ngu n s ki n là m t đ i t ng mà có th đăng ký các đ i t ng l ngộ ồ ự ệ ộ ố ượ ể ố ượ ắ
nghe và g i cho chúng các đ i t ng s ki n.ử ố ượ ự ệ
3. Ngu n s ki n g i đ i t ng s ki n t i t t c các đ i t ng l ng nghe đ cồ ự ệ ử ố ượ ự ệ ớ ấ ả ố ượ ắ ượ
đăng ký cho s ki n đó.ự ệ
97
4. Đ i t ng l ng nghe s s d ng thông tin trong các đ i t ng s ki n đ ph nố ượ ắ ẽ ử ụ ố ượ ự ệ ể ả
ng v i các s ki n đó.ứ ớ ự ệ
Cú pháp đ đăng ký các đ i t ng l ng nghe cho các ngu n s ki n theo cú pháp sau:ể ố ượ ắ ồ ự ệ
<ngu n s ki n>.add<s ki n>Listener(<ồ ự ệ ự ệ đ i t ng l ng nghe s ki nố ượ ắ ự ệ >)
Ví d :ụ
ActionListener listener = . . .; // đ i t ng l ng ngheố ượ ắ
JButton button = new JButton("Ok"); // Ngu n s ki nồ ự ệ
button.addActionListener(listener); // đăng ký đ i t ng l ng nghe s ki nố ượ ắ ự ệ
Trong đo n code trên, v n đ còn l i là đ i t ng l ng nghe s ki n ph i có m tạ ấ ề ạ ố ượ ắ ự ệ ả ộ
ph ng th c đ nh n v s ki n t ngu n s ki n đăng ký nó và x lý. ươ ứ ể ậ ề ự ệ ừ ồ ự ệ ử đây, Ở đ i t ngố ượ
listener ph i thu c m t l p có cài đ t giao di n ActionListener. Trong giao di n này có khaiả ộ ộ ớ ặ ệ ệ
báo m t ph ng th c actionPerformed đ nh n v m t s ki n ActionEvent:ộ ươ ứ ể ậ ề ộ ự ệ
class MyListener implements ActionListener
{
. . .
public void actionPerformed(ActionEvent event)
{
// Đo n mã x ký s ki n đ t đâyạ ử ự ệ ặ ở
. . .
}
}
B t c khi nào ng i dùng click chu t vào đ i t ng Jbutton trên màn hình, m t sấ ứ ườ ộ ố ượ ộ ự
ki n ActionEvent đ c phát sinh và g i cho đ i t ng l ng nghe listener. Đ i t ng này cóệ ượ ử ố ượ ắ ố ượ
cài đ t m t ph ng th c đ x lý s ki n là actionPerformed, l y đ i s là đ i t ngặ ộ ươ ứ ể ử ự ệ ấ ố ố ố ượ
ActionEvent nh n đ c.ậ ượ

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;

}
public void actionPerformed(ActionEvent e)
{
setBackground(backgroundColor); // Thay đ i màu n n c a panel khi Button đ cổ ề ủ ượ
click
}
private Color backgroundColor;
}
M i đ i tỗ ố ượng Button đ c đăng ký cho b l ng nghe này:ượ ộ ắ
Class ButtonPanel extends JPanel
{
public ButtonPanel()
{
JButton yellowButton = new JButton("Yellow");
JButton blueButton = new JButton("Blue");
JButton redButton = new JButton("Red");
add(yellowButton);
add(blueButton);
add(redButton);
ColorAction yellowAction = new ColorAction(Color.Yellow);
ColorAction blueAction = new ColorAction(Color.Blue);
ColorAction redAction = new ColorAction(Color.Red);
yellowButton.addActionListener(yellowAction);
blueButton.addActionListener(blueAction);
redButton.addActionListener(redAction);
}
}
M t v n đ đ t ra là ph ng th c setBackground() không đ c đ nh nghĩa trong l pộ ấ ề ặ ươ ứ ượ ị ớ
ColorAction mà ch đ c đ nh nghĩa cho l p Panel. Gi i pháp đây là đ a l p ColorActionỉ ượ ị ớ ả ở ư ớ
100

×