Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 11 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
11
Dung lượng
158 KB
Nội dung
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 . 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 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. Đ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à