Tải bản đầy đủ (.doc) (11 trang)

giáo trình java tóm tắt - awt events

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 (226.41 KB, 11 trang )

Giáo trình Java tóm tắt AWT Events
AWT Events
AWT Events 1
1. Giới thiệu 1
2. Các bước để bắt và xử lý một Event 3
3. Adapter 5
4. Các loại sự kiện của AWT 6
1. Giới thiệu
1.1. Event
Khi dùng GUI, người dùng luôn phải nhấn chuột hoặc gõ phím lên các control. Mỗi thao
tác như vậy của người dùng sẽ tạo một sự kiện – event. Trong phần này, chúng ta sẽ tìm
hiểu về cách nắm bắt và xử lý cho các event trong Java.
Event là các đối tượng mô tả những sự kiện đang xảy ra trong AWT. Sự kiện xảy ra khi
người dùng thực hiện một động tác nào đó, như nhấn chuột, gõ phím,
Event Source là nơi xảy ra Event. Ví dụ như người dùng nhấn chuột vào một Button thì
Button đó là nơi xảy ra Event.
Event Handle là những phương thức được dùng để xử lý khi các sự kiện tương ứng với
chúng xảy ra, có tác dụng phản hồi những thao tác của người dùng.
1.2. Cách tổ chức event trong AWT
Trong AWT, các interface và class xử lý sự kiện được đặt trong một package con có tên
là event. Do đó, để có thể xử lý sự kiện, ta cần import package này vào:
import java.awt.event.*;
Các loại Event trong AWT được tổ chức theo sơ đồ như sau:
1/11
Giáo trình Java tóm tắt AWT Events
Hình 1: Sơ đồ event trong AWT
Ứng với mỗi loại event sẽ có một interface gọi là listener (và thường có một abstract
class gọi là adapter đi kèm). Để dễ nhớ, trong Java chúng được đặt tên theo quy tắc sau:
interface sẽ có dạng LoaiEvent Listener , còn abstract class tương ứng sẽ có dạng
LoaiEvent Adapter .
Dưới đây là danh sách các loại Event:


Loại Tên interface Các phương thức
Action ActionListener actionPerformed(ActionEvent)
Item ItemListener itemStateChanged(ItemEvent)
Mouse MouseListener
mousePressed(MouseEvent)
mouseReleased(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
mouseClicked(MouseEvent)
Mouse Motion MouseMotionListener
mouseDragged(MouseEvent)
mouseMoved(MouseEvent)
Key KeyListener
keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
Focus FocusListener focusGained(FocusEvent)
2/11
java.util.EventObject
ActionEvent
java.awt.AWTEvent
AdjustmentEvent
ComponentEvent
ItemEvent TextEvent
WindowEvent
ContainerEvent InputEvent
FocusEvent
KeyEvent MouseEvent
java.awt.event
Giáo trình Java tóm tắt AWT Events

Loại Tên interface Các phương thức
focusLost(FocusEvent)
Adjustment AdjustmentListener adjustmentValueChanged(AdjustmentEvent)
Component ComponentListener
componentMoved(ComponentEvent)
componentHidden(ComponentEvent)
componentResized(ComponentEvent)
componentShown(ComponentEvent)
Window
WindowListener
windowClosing(WindowEvent)
windowOpened(WindowEvent)
windowIconified(WindowEvent)
windowDeiconified(WindowEvent)
windowClosed(WindowEvent)
windowActivated(WindowEvent)
windowDeactivated(WindowEvent)
Container
ContainerListener
componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
Text
TextListener textValueChanged(TextEvent)
Bảng 1: Danh sách các event trong AWT
2. Các bước để bắt và xử lý một Event
2.1. Tổng quát
Để xử lý cho các Event, ta có thể làm theo các bước tổng quát như sau:
 Tạo class xử lý cho loại sự kiện cần bắt. Class này sẽ implement từ các interface
listener hoặc extends từ các abstract class adapter có sẵn ứng với từng loại event.
Trong class này ta sẽ hiện thực (các) phương thức xử lý cho từng sự kiện. Lớp

này có thể là lớp thông thường hoặc lớp nội (có tên hoặc không tên).
 Tạo một đối tượng thuộc class này và đăng ký nó vào (các) control cần xử lý cho
sự kiện đó bằng phương thức void
addLoaiEventListener(LoaiEventListener e).
Nếu muốn nhiều control cùng xử lý như nhau với một sự kiện, ta có thể tạo một đối
tượng xử lý sự kiện dùng chung cho chúng.
Thông thường, ta thường tạo các class sự kiện dưới dạng lớp nội (inner class) của
Container chứa các control cần bắt sự kiện.
2.2. Ví dụ
Để xử lý cho sự kiện "Action" (là sự kiện xảy ra khi user click lên Button, MenuItem
hoặc nhấn phím ENTER khi đang ở trong TextField), ta làm như sau:
 Tạo class MyAction để xử lý cho sự kiện Action. Class này sẽ implement từ
interface ActionListener và hiện thực phương thức duy nhất
actionPerformed(ActionEvent e) của interface này.
class MyAction implements ActionListener
3/11
Giáo trình Java tóm tắt AWT Events
{
public void actionPerformed(ActionEvent e)
{
// Xử lý cho sự kiện này
}
}
 Tạo đối tượng thuộc class này và thêm vào một Button có tên là bt:
bt.addActionListener(new MyAction()); // Cho bt xử lý sự kiện Action
 Nếu muốn các control khác cùng xử lý như Button bt khi xảy ra sự kiện Action:
MyAction ma = new MyAction(); // Tạo đối tượng MyAction
bt.addActionListener(ma); // Cho Button bt xử lý sự kiện Action
tf.addActionListener(ma); // Cho TextField tf xử lý sự kiện Action
Khi đó, nếu người dùng click lên Button bt hoặc nhấn ENTER khi đang ở trên TextField

tf, phương thức actionPerformed sẽ được Java gọi thực thi  sự kiện Action đã được
bắt và xử lý.
Đoạn code hoàn chỉnh như sau:
import java.awt.*;
import java.awt.event.*;
public class Dialog03 extends Dialog
{
private Button bt=new Button("Click here");
private Label lb=new Label("Hello AWT Events");
public Dialog03(Frame frm)
{
super(frm,"Events Dialog");
// Khởi tạo Dialog
this.setLayout(null);
this.setSize(300,150);
this.setLocation(150,250);
// Khởi tạo Label lb
lb.setSize(200,20);
lb.setLocation(50,60);
lb.setAlignment(Label.CENTER);
// Khởi tạo Button bt
bt.setSize(70,25);
bt.setLocation(115,100);
// Thêm sự kiện "action" cho Button bt
bt.addActionListener(new Dlg03OKEvent());
// Thêm bt và lb vào Dialog
this.add(lb);
this.add(bt);
}
4/11

Giáo trình Java tóm tắt AWT Events
// Class xử lý cho sự kiện Action
class Dlg03OKEvent implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
lb.setText("Button Clicked");
}
}
public static void main(String[]args)
{
Dialog03 dlg=new Dialog03(new Frame());
dlg.show();
}
}
2.3. Xử lý sự kiện với lớp nội không tên
Như ở trên, khi muốn xử lý một sự kiện ta phải tạo ra một class hoặc inner class dành cho
nó. Việc này đôi khi trở nên phiền toái vì ít khi ta dùng lại các class đó. Để công việc
được thoải mái hơn, ta có thể dùng lớp nội không tên (anonymous inner class).
Cách dùng lớp nội không tên sẽ gọn gàng hơn so với các cáhc khác, nhưng nếu muốn cho
nhiều control cùng xử lý như nhau với một sự kiện thì dùng lớp nội không tên sẽ không
tốt như lớp nội có tên.
Ví dụ: giả sử cần xử lý sự kiện action cho button tên là btOK.
btOK.addActionListener
(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
// Xử lý ở đây

}
}
);
Trong ví dụ trên, khi gọi phương thức addActionListener(), ta cũng đồng thời tạo ra
một lớp mới implement từ interface ActionListener, trong lớp này cài đặt phương thức
actionPerformed() để xử lý sự kiện action. Lớp nội được tạo ra như vậy không có tên.
3. Adapter
Như đã thấy, mỗi loại sự kiện đều có interface listener tương ứng. Để bắt sự kiện thì ta
phải tạo ra class implement từ các interface listener này. Trong mỗi interface có nhiều
phương thức cho từng sự kiện cụ thể. Ví dụ, interface WindownListener có 7 phương
thức để xử lý cho 7 sự kiện windowActivated, windowClosing, windowClosed,
windowOpened,
Nếu ta chỉ cần quan tâm xử lý một hoặc vài sự kiện, thì ta vẫn phải hiện thực tất cả các
phương thức ứng với các sự kiện khác của interface. Ví dụ, ta chỉ muốn bắt sự kiện
windowClosing nhưng vẫn phải định nghĩa cả windowActivated, windowClosed,
(dưới dạng các phương thức rỗng). Điều này tốn công sức và dễ gây nhầm lẫn.
5/11
Giáo trình Java tóm tắt AWT Events
Để không phải hiện thực tất cả các phương thức của interface, Java cung cấp sẵn các
adapter. Các Adapter là những abstract class được implement từ những interface tương
ứng. Khi dùng adapter, ta sẽ tạo class extend từ chúng và chỉ cần định nghĩa lại những
phương thức cần thiết cho (các) sự kiện đang được quan tâm. Ví dụ, với
WindowListener ta có WindowAdapter, với KeyListener ta có KeyAdapter,
Lưu ý: khi override phương thức bằng adaper, nếu gõ code sai (tên phương thức, tham số
đầu vào, ) thì khi dịch sẽ không bị báo lỗi nhưng sự kiện sẽ không được xử lý.
Ví dụ: thêm sự kiện đè chuột (mousePressed) lên nút btOK bằng cách kế thừa
MouseAdapter (nếu implement từ MouseListener, ta phải cài đặt cả 5 phương thức do nó
quy định)
 Dùng inner class: tạo ra một lớp nội private
private class myMouseEven extends MouseAdapter

{
public void mousePressed(MouseEvent e)
{
// Xử lý ở đây
}
}
sau đó thêm vào btOK:
btOK.addMouseListener(new myMouseEven());
 Dùng anonymous inner class:
btOK.addMouseListener
(
new MouseAdapter()
{
public void mousePressed(MouseEvent e)
{
// Xử lý ở đây
}
}
);
4. Các loại sự kiện của AWT
4.1. Sự kiện action
Như đã nói trên, loại sự kiện này được xảy ra khi người dùng nhấn vào Button, nhấn vào
MenuItem hoặc gõ phím ENTER khi đang ở trong TextField.
Loại sự kiện này bao gồm:
 Interface ActionListener: Chỉ có một phương thức actionPerformed.
 Class ActionEvent: Chứa thông tin cho sự kiện Action.
Phương thức Ý nghĩa
ActionListener
6/11
Giáo trình Java tóm tắt AWT Events

void actionPerformed(ActionEvent e)
Được gọi tới khi xảy ra sự kiện action.
ActionEvent
String getActionCommand()
Trả về chuỗi mô tả sự kiện.
long getWhen()
Trả về thời điểm xảy ra sự kiện.
Bảng 2: ActionListener và ActionEvent
Để đăng ký sự kiện Action cho control, ta dùng phương thức addActionListener().
4.2. Sự kiện window
Loại sự kiện này xảy ra khi có các tác động lên của sổ, như thu nhỏ, đóng, mở,
Loại sự kiện này bao gồm:
 Interface WindowListener: Quy định các phương thức xử lý khi các sự kiện
Window xảy ra.
 Interface WindowFocusListener: Quy định các phương thức xử lý khi Window
nhận hoặc mất focus. Cửa sổ có focus là cửa sổ đang được người dùng sử dụng.
 Interface WindowStateListener: Quy định phương thức xử lý khi trạng thái
Window bị thay đổi.
 Abstract class WindowAdapter: Implement các interface WindowListener,
WindowStateListener và WindowFocusListener với các phương thức xử lý sự
kiện được định nghĩa rỗng.
 Class WindowEvent: Chứa thông tin cho các sự kiện Window.
Phương thức Ý nghĩa
WindowListener / WindowAdapter
void windowActivated(WindowEvent e)
Xảy ra khi cửa sổ được kích hoạt (thường
có thanh tiêu đề màu đậm).
void windowDeactivated(WindowEvent
e)
Xảy ra khi cửa sổ không còn ở trạng thái

được kích hoạt.
void windowClosing(WindowEvent e)
Xảy ra khi người dùng muốn đóng cửa
sổ.
void windowClosed(WindowEvent e)
Xảy ra khi cửa sổ đã được đóng. Thường
dùng để "dọn dẹp" bộ nhớ.
void windowDeiconified(WindowEvent
e)
Xảy ra khi cửa sổ chuyển từ trạng thái
thu nhỏ trở về trạng thái bình thường.
void windowIconified(WindowEvent e)
Xảy ra khi cửa sổ bị thu nhỏ.
WindowFocusListener / WindowAdapter
7/11
Giáo trình Java tóm tắt AWT Events
void windowGainedFocus(WindowEvent
e)
Xảy ra khi cửa sổ nhận được focus.
void windowLostFocus(WindowEvent e)
Xảy ra khi cửa sổ bị mất focus.
WindowStateListener / WindowAdapter
void windowStateChanged(WindowEvent
e)
Xảy ra khi cửa sổ bị thay đổi trạng thái.
WindowEvent
int getNewState()
Trả về trạng thái mới của cửa sổ. Gồm:
 NORMAL
 ICONIFIED

 MAXIMIZED_HORIZ
 MAXIMIZED_VERT
 MAXIMIZED_BOTH
Trạng thái được lưu theo từng bit.
int getOldState()
Trả về trạng thái cũ của cửa sổ.
Window getOppositeWindow()
Trả về cửa sổ còn lại tham gia vào sự
kiện (trong các sự kiện active và focus).
Window getWindow()
Trả về cửa sổ nơi sự kiện xảy ra.
Bảng 3: WindowListener, WindowFocusListener, WindowStateListener và
WindowEvent
Để đăng ký các sự kiện Window cho cửa sổ, ta dùng các phương thức
addWindowListener(), addWindowFocusListener(), addWindowStateListaner().
4.3. Sự kiện mouse
Loại sự kiện này xảy ra khi người dùng nhấn chuột, đè / thả chuột, di chuyển chuột,
Loại sự kiện này bao gồm:
 Interface MouseListener: Quy định các phương thức xử lý khi các sự kiện nhấn
chuột, đè / thả chuột, xảy ra
 Interface MouseMotionListener: Quy định các phương thức xử lý khi các sự
kiện di chuyển chuột, rê chuột xảy ra.
 Interface MouseWheelListener: Quy định các phương thức xử lý khi sự kiện lăn
bánh xe chuột xảy ra.
 Abstract class MouseAdapter: Implement interface MouseListener với các
phương thức xử lý sự kiện được định nghĩa rỗng.
 Abstract class MouseMotionAdapter: Implement interface
MouseMotionListener với các phương thức xử lý sự kiện được định nghĩa rỗng.
 Class MouseEvent: chứa thông tin của sự kiện Mouse và Mouse Motion.
 Class MouseWheelEvent: chứa thông tin của sự kiện lăn bánh xe chuột.

8/11
Giáo trình Java tóm tắt AWT Events
Phương thức Ý nghĩa
MouseListener / MouseAdapter
void mouseClicked(MouseEvent e)
Xảy ra khi nhấn chuột (đè và nhả).
void mouseEntered(MouseEvent e)
Xảy ra khi chuột đi vào control.
void mouseExited(MouseEvent e)
Xảy ra khi chuột đi khỏi control.
void mousePressed(MouseEvent e)
Xảy ra khi đè nút chuột.
void mouseReleased(MouseEvent e)
Xảy ra khi thả nút chuột
MouseMotionListener / MouseMotionAdapter
void mouseDragged(MouseEvent e)
Xảy ra khi chuột được "rê" (giữ nút và
di chuyển).
void mouseMoved(MouseEvent e)
Xảy ra khi chuột được di chuyển trên
control.
MouseWeelListener
void mouseWheelMoved(MouseWheelEvent
e)
Xảy ra khi người dùng lăn chuột.
MouseEvent
int getButton()
Trả về những nút bị thay đổi trạng thái
(từ nhấn chuyển sang thả hoặc ngược
lại - nếu có). Bao gồm:

 NOBUTTON
 BUTTON1
 BUTTON2
 BUTTON3
int getClickCount()
Trả về số lần nhấn chuột.
Point getPoint()
Trả về vị trí của chuột trên control (tính
theo gốc là điểm trên-trái của control).
int getX()
Trả về hoành độ của chuột.
int getY()
Trả về tung độ của chuột.
Window getWindow()
Trả về cửa sổ nơi sự kiện xảy ra.
MouseWeelEvent
int getScrollType()
Trả về loại lăn chuột, gồm:
 WHEEL_UNIT_SCROLL
 WHEEL_BLOCK_SCROLL
int getScrollAmount()
Trả về số bước lăn chuột.
9/11
Giáo trình Java tóm tắt AWT Events
int getWheelRotation()
Trả về số vòng lăn (âm nghĩa là lăn về
phía trước – phía xa người dùng).
Bảng 4: MouseListener, MouseMotionListenr, MouseWeelListener, MouseEvent và
MouseWeelEvent
Để đăng ký các sự kiện Mouse với control, ta dùng các phương thức

addMouseListener(), addMouseMotionListener() và addMouseWheelListener().
4.4. Sự kiện bàn phím
Loại sự kiện này xảy ra khi người dùng nhấn phím, giữ phím và đè phím.
Loại sự kiện này bao gồm:
 Interface KeyListener: Quy định các phương thức xử lý khi các sự kiện nhấn
phím xảy ra.
 Abstract class KeyAdapter: Implement interface KeyListener với các phương
thức xử lý sự kiện được định nghĩa rỗng.
 Class KeyEvent: Chứa thông tin về sự kiện bàn phím.
Phương thức Ý nghĩa
KeyListener / KeyAdapter
void keyPressed(KeyEvent e)
Xảy ra khi người dùng giữ phím.
void keyReleased(KeyEvent e)
Xảy ra khi người dùng thả phím.
void keyTyped(KeyEvent e)
Xảy ra khi người dùng nhấn (giữ và thả phím).
KeyEvent
int getKeyCode()
Trả về mã phím. VD: người dùng nhấn '@' sẽ
trả về 64.
char getKeyChar()
Trả về ký tự ứng với phím. VD: người dùng
nhấn tổ hợp shift + 'a' sẽ trả về 'A'.
Bảng 5: KeyListener và KeyEvent
Để đăng ký các sự kiện bàn phím với control, ta dùng phương thức addKeyListener().
4.5. Các loại sự kiện khác
Ngoài các loại sự kiện kể trên, trong AWT còn nhiều loại sự kiện khác, ví dụ như:
Loại sự kiện Ý nghĩa
ComponentListener / ComponentEvent

Xảy ra khi control bị di chuyển, thay đổi
kích thước,
ContainerListener / ContainerEvent
Xảy ra khi có control được thêm vào hoặc
10/11
Giáo trình Java tóm tắt AWT Events
xóa khỏi Container.
FocusListener / FocusEvent
Các sự kiện về focus
ItemListner / ItemEvent
Các sự kiện trên mục con, như MenuItem,
Checkbox hoặc Choice.
PaintEvent
Xảy ra khi control vẽ nó lên màn hình.
TextListener / TextEvent
Xảy ra khi người dùng gõ nội dung (trên
TextField, TextArea, )
Bảng 6: Các loại sự kiện khác
11/11

×