1. Trang chủ
  2. » Công Nghệ Thông Tin

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

11 837 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 11
Dung lượng 158 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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.. public void actionPerformedActionEve

Trang 1

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:

Trang 2

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:

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)

java.util.EventObject

ActionEvent

java.awt.AWTEvent

AdjustmentEvent ComponentEvent

WindowEvent ContainerEvent InputEvent FocusEvent

KeyEvent MouseEvent java.awt.event

Trang 3

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

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

Trang 4

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);

}

Trang 5

// 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

Trang 6

Để 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

ActionListener

Trang 7

void actionPerformed(ActionEvent e) Được gọi tới khi xảy ra sự kiện action.

ActionEvent

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

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

Trang 8

void windowGainedFocus(WindowEvent

void windowLostFocus(WindowEvent e) Xảy ra khi cửa sổ bị mất focus

WindowStateListener / WindowAdapter void windowStateChanged(WindowEvent

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ổ

kiện (trong các sự kiện active và focus)

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

Trang 9

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

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)

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

Trang 10

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

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ư:

kích thước,

Trang 11

xóa khỏi Container.

Checkbox hoặc Choice.

TextField, TextArea, )

Bảng 6: Các loại sự kiện khác

Ngày đăng: 24/10/2014, 00:34

HÌNH ẢNH LIÊN QUAN

Hình 1: Sơ đồ event trong AWT - giáo trình java tóm tắt - awt events
Hình 1 Sơ đồ event trong AWT (Trang 2)
Bảng 1: Danh sách các event trong AWT - giáo trình java tóm tắt - awt events
Bảng 1 Danh sách các event trong AWT (Trang 3)
Bảng 2: ActionListener và ActionEvent - giáo trình java tóm tắt - awt events
Bảng 2 ActionListener và ActionEvent (Trang 7)
Bảng 3: WindowListener, WindowFocusListener, WindowStateListener và - giáo trình java tóm tắt - awt events
Bảng 3 WindowListener, WindowFocusListener, WindowStateListener và (Trang 8)
Bảng 4: MouseListener, MouseMotionListenr, MouseWeelListener, MouseEvent và - giáo trình java tóm tắt - awt events
Bảng 4 MouseListener, MouseMotionListenr, MouseWeelListener, MouseEvent và (Trang 10)
Bảng 6: Các loại sự kiện khác - giáo trình java tóm tắt - awt events
Bảng 6 Các loại sự kiện khác (Trang 11)

TỪ KHÓA LIÊN QUAN

w