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

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

12 1K 16
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Xử lý các sự kiện trong Java
Trường học Trường Đại Học
Chuyên ngành Công Nghệ Thông Tin
Thể loại Đề tài
Định dạng
Số trang 12
Dung lượng 650,77 KB

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

Nội dung

public void windowDeactivatedWindowEvent e {}} IV... addMouseListener new MouseAdapter { public void mouseClickedMouseEvent e // Mac dinh la chuot trai { // Kiem tra neu la chuot phai du

Trang 1

Đ 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:ấ ỉ ự ế ừ ữ ớ ự ệ

Trang 2

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 đó.ự ệ

Trang 3

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:ơ ồ ạ ư

Trang 4

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

Trang 5

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ị ớ ả ở ư ớ

Trang 6

thành l p n i c a l p ButtonPanel, khi đó trong l p ColorAction, ta có th truy c p cácớ ộ ủ ớ ớ ể ậ

phương th c c a l p Panel (đứ ủ ớ ược ButtonPanel k th a) nh setBackground ch ng h n.ế ừ ư ẳ ạ

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); // Đăng ký b l ng nghe s ki nộ ắ ự ệ

blueButton.addActionListener(blueAction);

redButton.addActionListener(redAction);

}

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

}

}

Chương trình sau đây ki m tra s th c hi n đáp ng các s ki n v a thi t k trên:ể ự ự ệ ứ ự ệ ừ ế ế ở

import javax.swing.JFrame;

public class testPanel extends JFrame

{

public testPanel() {

ButtonPanel pn = new ButtonPanel();

this.add(pn);

}

Trang 7

public static void main(String[] argvs) {

testPanel p = new testPanel();

p.setSize(300,400);

p.setVisible(true);

} }

Thông thường, các l p l ng nghe s ki n có th đớ ắ ự ệ ể ược cài đ t ngay trong phặ ương th cứ addActionListener nh sau:ư

yellowButton.addActionListener(

new ActionListener()

{

public void actionPerformed(ActionEvent event)

{

setBackground(Color.YELLOW);

}

});

Làm nh v y ta không c n thi t k riêng m t l p ColorAction.ư ậ ầ ế ế ộ ớ

II Truy c p thông tin s ki n ậ ự ệ

M t phộ ương pháp khác đ l p trình s ki n đó là gán cho t t c các đ i tể ậ ự ệ ấ ả ố ượng ngu nồ

s ki n chung m t đ i tự ệ ộ ố ượng l ng nghe Tùy theo thông tin v s ki n nh n đắ ề ự ệ ậ ược, phươ ng

th c actionPerformed s có s hành x khác nhau Mu n v y, l p ch a các ngu n s ki nứ ẽ ự ử ố ậ ớ ứ ồ ự ệ

ph i cài đ t giao di n ActionListener.ả ặ ệ

import javax.swing.*;

import java.awt.event.*;

public class ButtonPanel extends JPanel implements ActionListener

{ JButton yellowButton;

JButton blueButton;

JButton redButton;

public ButtonPanel()

{

yellowButton = new JButton("Yellow");

blueButton = new JButton("Blue");

redButton = new JButton("Red");

add(yellowButton);

add(blueButton);

add(redButton);

yellowButton.addActionListener(this);

blueButton.addActionListener(this);

redButton.addActionListener(this);

}

public void actionPerformed(ActionEvent event)

{

if (event.getSource()==yellowButton) setBackground(Color.YELLOW);

Trang 8

if (event.getSource()==redButton) setBackground(Color.RED);

if (event.getSource()==blueButton) setBackground(Color.BLUE);

}

}

Trong ví d trên, b n thân l p component ButtonPanel đóng vai trò là l p l ng nghe sụ ả ớ ớ ắ ự

ki n vì nó có cài đ t giao di n ActionListener Do đó, khi đăng ký đ i tệ ặ ệ ố ượng l ng nghe cho cácắ Button, ta ch vi c s d ng bi n this, đ i di n cho đ i tỉ ệ ử ụ ế ạ ệ ố ượng ng m đ nh c a chính l pầ ị ủ ớ ButtonPanel Các đ i tố ượng Button bây gi cũng ph i khai báo là bi n thành ph n c a l p vìờ ả ế ầ ủ ớ chúng được truy c p trong 2 phậ ương th c khác nhau.ứ Tuy nhiên phương pháp này s tr nênẽ ở khó dùng khi trên panel có nhi u đ i tề ố ượng ngu n s ki n.ồ ự ệ

III X lý các s ki n trên window ử ự ệ

Ph n trên đã cho th y cách th c chúng ta làm vi c v i các ngu n s ki n là các đ iầ ấ ứ ệ ớ ồ ự ệ ố

tượng n m trong m t window Ph n này ta s xem xét các s ki n x y ra đ i v i b n thânằ ộ ầ ẽ ự ệ ả ố ớ ả

m t window.ộ

Mu n b t các s ki n c a window, ta cũng qua các bố ắ ự ệ ủ ước căn b n sau:ả

WindowListener listener = new

frame.addWindowListener(listener);

Trong đó frame là m t đ i tộ ố ượng c a l p JFrame, là đ i tủ ớ ố ượng ngu n s ki n phát sinhồ ự ệ các s ki n WindowEvent Đ i tự ệ ố ượng listener b t bu c ph i thu c m t l p có cài đ t giaoắ ộ ả ộ ộ ớ ặ

di n WindowListener C u trúc c a giao di n này nh sau:ệ ấ ủ ệ ư

public interface WindowListener

{

void windowOpened(WindowEvent e);

void windowClosing(WindowEvent e);

void windowClosed(WindowEvent e);

void windowIconified(WindowEvent e); // thu nh c a sỏ ủ ổ

void windowDeiconified(WindowEvent e);

void windowActivated(WindowEvent e);

void windowDeactivated(WindowEvent e);

}

Do đó các l p cài đ t giao di n này ph i khai báo đ nh nghĩa t t c các phớ ặ ệ ả ị ấ ả ương th cứ trên Tuy nhiên, ta ch vi t code cho phỉ ế ương th c nào ta x lý mà thôi, ví d :ứ ử ụ

class Terminator implements WindowListener

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

public void windowOpened(WindowEvent e) {}

public void windowClosed(WindowEvent e) {}

public void windowIconified(WindowEvent e) {}

public void windowDeiconified(WindowEvent e) {}

public void windowActivated(WindowEvent e) {}

Trang 9

public void windowDeactivated(WindowEvent e) {}

}

IV Các l p thích nghi ớ

Ta th y r ng vi c khai báo đ y đ 7 phấ ằ ệ ầ ủ ương th c, có nh ng phứ ữ ương th c không x lýứ ử

gì c làm cho chả ương trình không đượ ố ưc t i u Gi i pháp đây s là đ nh nghĩa m t l p trungả ở ẽ ị ộ ớ gian, khai báo cài đ t giao di n WindowListener v i đ y đ 7 phặ ệ ớ ầ ủ ương th c nh ng các phứ ư ươ ng

th c này cũng không làm gì c Các l p mu n cài đ t n i dung cho m t s ki n ch vi c khaiứ ả ớ ố ặ ộ ộ ự ệ ỉ ệ báo k th a l p này và đ nh nghĩa ch ng phế ừ ớ ị ồ ương th c c n thi t Các l p có vai trò trung gianứ ầ ế ớ

nh v y g i là các l p thích nghi V i m i giao di n l ng nghe, ta có m t l p thích nghi tư ậ ọ ớ ớ ỗ ệ ắ ộ ớ ươ ng

ng Ví d : WindowListener có l p thích nghi WindowAdapter, MouseListener có

MouseAdapter Các l p thích nghi thớ ường dùng là:

FocusAdapter MouseMotionAdapter

KeyAdapter WindowAdapter

MouseAdapter

class Terminator extends WindowAdapter

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

}

V n đ là các l p ấ ề ớ window thường ph i khai báo k th a t JFrame r i nên không thả ế ừ ừ ồ ể khai báo k th a thêm l p WindowAdapter Lúc này, k thu t đ nh nghĩa l p n i n c danhế ừ ớ ỹ ậ ị ớ ộ ặ

được phát huy:

frame.addWindowListener(new WindowAdapter()

{ public void windowClosing(WindowEvent event) {

System.exit(0);

} public void windowIconified(WindowEvent e) {System.exit(0);} } );

Đo n code này th c hi n các công vi c sau:ạ ự ệ ệ

1 Đ nh nghĩa m t class n c danh k th a l p WindowAdapterị ộ ặ ế ừ ớ

2 Thêm 2 phương th c windowClosing và windowIconified cho l p n c danh đóứ ớ ặ

3 K th a 5 phế ừ ương th c còn l i t WindowAdapterứ ạ ừ

4 T o ra m t đ i tạ ộ ố ượng c a l p đó, đ i tủ ớ ố ượng cũng không có tên

5 G i đ i tử ố ượng này cho phương th c addWindowListenerứ

Ta có th đ nh nghĩa ch ng nhi u h n m t phể ị ồ ề ơ ộ ương th c c a WindowAdapter ứ ủ

T t nhiên là không ph i khi nào ta cũng ph i s d ng l p n i n c danh M t cách làmấ ả ả ử ụ ớ ộ ặ ộ khác là khai báo m t l p (thộ ớ ường là l p n i) d ng nh class Terminator trên, sau đó đăng kýớ ộ ạ ư ở

l ng nghe s ki n cho frame mà không c n m t đ i tắ ự ệ ầ ộ ố ượng có tên rõ ràng c a Terminator:ủ

Trang 10

frame.addWindowListener(new Terminator());

Đ k t thúc đ tài này ta li t kê các phể ế ề ệ ương th c x lý s ki n nh b ng sau:ứ ử ự ệ ư ả

Interface Methods Parameter/Accessors Ngu n s ồ ự

ki n ệ

ActionListener actionPerformed ActionEvent

• getActionCommand

• getModifiers

AbstractButton JComboBox JTextField Timer AdjustmentListener adjustmentvalueChanged AdjustmentEvent

• getAdjustable

• getAdjustmentType

• getValue

JScrollbar

ItemListener ItemstateChanged ItemEvent

• getItem

• getItemSelectable

• getStateChange

AbstractButton JComboBox

FocusListener FocusGained

• isTemporary

Component

KeyListener keyPressed

keyReleased keyTyped

KeyEvent

• getKeyChar

• getKeyCode

• getKeyModifiersText

• getKeyText

• isActionKey

Component

MouseListener mousePressed

mouseReleased mouseEntered mouseExited mouseClicked

MouseEvent

• getClickCount

• getX

• getY

• getPoint

• TRanslatePoint

Component

MouseMotionListener mouseDragged MouseEvent Component

Trang 11

Interface Methods Parameter/Accessors Ngu n s ồ ự

ki n ệ

mouseMoved MouseWheelListener mousewheelMoved MouseWheelEvent

• getWheelRotation

• getScrollAmount

Component

WindowListener windowClosing

windowOpened windowIconified windowDeiconified windowClosed windowActivated windowDeactivated

WindowEvent

• getWindow

Window

WindowFocusListener windowGainedfocus

windowlostFocus

WindowEvent

• getOppositeWindow

Window

WindowStateListener WindowStateChanged WindowEvent

• getOldState

• getNewState

Window

V X lý các s ki n chu t ử ự ệ ộ

Các s ki n v i chu t đự ệ ớ ộ ược x lý b i giao di n MouseListener Khi m t ngu n sử ở ệ ộ ồ ự

ki n đệ ược kích ho t b i vi c click chu t, các phạ ở ệ ộ ương th c x lý cho các s ki n tứ ử ự ệ ương ngứ

được li t kê trong b ng trên, đ c bi t hay dùng là mouseClicked() Thông thệ ả ặ ệ ương ta cũng không cài đ t x lý cho t t c các s ki n này nên ta không cài đ t giao di n MouseListenerặ ử ấ ả ự ệ ặ ệ

mà khai báo m t l p n i n c danh k th a t l p thích nghi MouseAdapter.ộ ớ ộ ặ ế ừ ừ ớ

Gi s có m t đ i tả ử ộ ố ượng JFrame tên là frame, sau đây là m t ví d qu n lý s ki nộ ụ ả ự ệ click chu t trên nó:ộ

frame addMouseListener( new MouseAdapter()

{

public void mouseClicked(MouseEvent e) // Mac dinh la chuot trai

{ // Kiem tra neu la chuot phai duoc click

if( (e.getModifiers() & InputEvent.BUTTON3_MASK)== InputEvent.BUTTON3_MASK)

// hien thi mot popup menu tai vi tri click

jp.show(getContentPane(),e.getX(),e.getY());

}

} );

Ngày đăng: 30/09/2013, 09:20

TỪ KHÓA LIÊN QUAN

w