CHNG 6 LP TRNH S KIN NI DUNG

  • Slides: 70
Download presentation
CHƯƠNG 6 LẬP TRÌNH SỰ KIỆN

CHƯƠNG 6 LẬP TRÌNH SỰ KIỆN

NỘI DUNG TRÌNH BÀY • • • Các ví dụ mở đầu Mô hình

NỘI DUNG TRÌNH BÀY • • • Các ví dụ mở đầu Mô hình xử lý sự kiện Các component nâng cao Xử lý sự kiện chuột Xử lý sự kiện bàn phím 2

VÍ DỤ 1 Xây dựng một chương trình như sau: • Khi nhấn vào

VÍ DỤ 1 Xây dựng một chương trình như sau: • Khi nhấn vào button Red hoặc button Green hoặc button Blue thì nền của cửa sổ chương trình thay đổi màu tương ứng, đồng thời label bên dưới các button cũng có câu thông báo màu tương ứng. 4

VÍ DỤ 1 (file My. First. Awt. java) import java. awt. *; import java.

VÍ DỤ 1 (file My. First. Awt. java) import java. awt. *; import java. awt. event. *; public class My. First. Awt extends Frame { Label status; Button button 1 = new Button("Red"); Button button 2 = new Button("Green"); Button button 3 = new Button("Blue"); My. First. Awt() { this. set. Title("My First Awt"); //super("My First Awt"); this. set. Layout(new Flow. Layout()); this. add(button 1); this. add(button 2); this. add(button 3); status = new Label(); status. set. Text("Press any button, please!"); this. add(status); //xem tiếp ở slide tiếp theo 5

VÍ DỤ 1 (file My. First. Awt. java) - tt button 1. add. Action.

VÍ DỤ 1 (file My. First. Awt. java) - tt button 1. add. Action. Listener(new My. Listener(status, this)); button 2. add. Action. Listener(new My. Listener(status, this)); button 3. add. Action. Listener(new My. Listener(status, this)); this. add. Window. Listener(new Window. Adapter() { public void window. Closing(Window. Event evt){System. exit(0); } }); } public static void main(String[] args) { My. First. Awt mfa = new My. First. Awt(); mfa. resize(300, 200); mfa. show(); } } 6

VÍ DỤ 1 (file My. Listener. java) import java. awt. *; import java. awt.

VÍ DỤ 1 (file My. Listener. java) import java. awt. *; import java. awt. event. *; public class My. Listener implements Action. Listener { Label status; Component compo; My. Listener(Label status 1, Component compo 1) { this. status = status 1; this. compo = compo 1; } //xem tiếp ở slide tiếp theo 7

VÍ DỤ 1 (file My. Listener. java) - tt public void action. Performed(Action. Event

VÍ DỤ 1 (file My. Listener. java) - tt public void action. Performed(Action. Event evt) { if(evt. get. Source() instanceof Button) { Button temp = (Button)evt. get. Source(); status. set. Text("You have selected: " + temp. get. Label()); if(temp. get. Label(). equals. Ignore. Case("Red")) { compo. set. Background(new Color(255, 0, 0)); } if(temp. get. Label(). equals. Ignore. Case("Green")) { compo. set. Background(new Color(0, 255, 0)); } if(temp. get. Label(). equals. Ignore. Case("Blue")) { compo. set. Background(new Color(0, 0, 255)); } } 8

VÍ DỤ 2 Xây dựng một chương trình như sau: • Khi nhấn vào

VÍ DỤ 2 Xây dựng một chương trình như sau: • Khi nhấn vào button Yes hoặc button No hoặc button Maybe thì xuất hiện câu thông báo tương ứng. 9

VÍ DỤ 2 (file Button. Demo. java) import java. awt. *; import java. awt.

VÍ DỤ 2 (file Button. Demo. java) import java. awt. *; import java. awt. event. *; public class Button. Demo extends Frame implements Action. Listener { String messege = ""; Button yes, no, maybe; Label label = new Label(); Button. Demo(String msg) { set. Title(msg); //super("My First Awt"); set. Layout(new Flow. Layout()); yes = new Button("Yes"); no = new Button("No"); maybe = new Button("Maybe"); add(yes); add(no); add(maybe); add(label); yes. add. Action. Listener(this); no. add. Action. Listener(this); maybe. add. Action. Listener(this); } //xem tiếp ở slide tiếp theo 10

VÍ DỤ 2 (file Button. Demo. java)-tt public void action. Performed(Action. Event evt) {

VÍ DỤ 2 (file Button. Demo. java)-tt public void action. Performed(Action. Event evt) { String str = evt. get. Action. Command(); if(str. equals("Yes")) { label. set. Text("You pressed Yes button"); } if(str. equals("No")) { label. set. Text("You pressed No button"); } if(str. equals("Maybe")) { label. set. Text("You pressed Maybe button"); } } public static void main(String[] args) { Button. Demo btdm = new Button. Demo("My Button Demo"); btdm. set. Size(300, 200); btdm. show(); } } 11

VÍ DỤ 3 Xây dựng một chương trình như sau: • Nhập vào hai

VÍ DỤ 3 Xây dựng một chương trình như sau: • Nhập vào hai số rồi nhấp button Sum để tính tổng 12

VÍ DỤ 3 (Add. Operator. java) import java. awt. *; import java. awt. event.

VÍ DỤ 3 (Add. Operator. java) import java. awt. *; import java. awt. event. *; public class Add. Operator extends Frame implements Action. Listener { Label first. Label = new Label("Enter first number: "); Label second. Label = new Label("Enter second number: "); Label result. Label = new Label("The sum is: "); Text. Field first. Text. Field = new Text. Field(5); Text. Field second. Text. Field = new Text. Field(5); Text. Field result. Text. Field = new Text. Field(5); Button sum. Button = new Button("Sum"); Button exit. Button = new Button("Exit"); Add. Operator() { this. set. Title("My Addition Operator"); this. set. Layout(null); sum. Button. set. Bounds(100, 150, 30); this. add(sum. Button); sum. Button. add. Action. Listener(this); //xem tiếp ở slide tiếp theo 13

VÍ DỤ 3 (Add. Operator. java) - tt exit. Button. set. Bounds(200, 150, 30);

VÍ DỤ 3 (Add. Operator. java) - tt exit. Button. set. Bounds(200, 150, 30); this. add(exit. Button); exit. Button. add. Action. Listener(this); first. Label. set. Bounds(50, 130, 30); this. add(first. Label); second. Label. set. Bounds(50, 80, 130, 30); this. add(second. Label); result. Label. set. Bounds(50, 110, 130, 30); this. add(result. Label); first. Text. Field. set. Bounds(190, 50, 80, 25); this. add(first. Text. Field); second. Text. Field. set. Bounds(190, 80, 25); this. add(second. Text. Field); result. Text. Field. set. Bounds(190, 110, 80, 25); this. add(result. Text. Field); this. add. Window. Listener(new Window. Adapter() { public void window. Closing(Window. Event evt){System. exit(0); } }); } //xem tiếp ở slide tiếp theo 14

VÍ DỤ 3 (Add. Operator. java) - tt public void action. Performed(Action. Event evt)

VÍ DỤ 3 (Add. Operator. java) - tt public void action. Performed(Action. Event evt) { if(evt. get. Source()==sum. Button) { int first. Num = Integer. parse. Int(first. Text. Field. get. Text()); int second. Num = Integer. parse. Int(second. Text. Field. get. Text()); int result. Num = first. Num + second. Num; result. Text. Field. set. Text(String. value. Of(result. Num)); } if(evt. get. Source()==exit. Button) { System. exit(0); } } public static void main(String[] args) { Add. Operator ao = new Add. Operator(); ao. set. Bounds(10, 400, 200); ao. set. Visible(true); } } 15

VÍ DỤ 4 Xây dựng một chương trình như sau: • Khi nhấp để

VÍ DỤ 4 Xây dựng một chương trình như sau: • Khi nhấp để chọn hoặc nhấp để bỏ chọn các checkbox thì xuất hiện câu thông báo tương ứng trong vùng Text. Area. 16

VÍ DỤ 4 (file Check. Box. Demo. java) import java. awt. *; import java.

VÍ DỤ 4 (file Check. Box. Demo. java) import java. awt. *; import java. awt. event. *; public class Check. Box. Demo extends Frame implements Item. Listener { Text. Area txt. Area = new Text. Area(8, 50); //5 rows and 40 columns //Checkbox. Group g = new Checkbox. Group(); Checkbox check. Box 1 = new Checkbox("The First"); Checkbox check. Box 2 = new Checkbox("The Second"); Checkbox check. Box 3 = new Checkbox("Reset Checkbox"); Check. Box. Demo() { this. set. Title("My Checkbox Demo"); this. set. Layout(new Border. Layout()); this. add(txt. Area, Border. Layout. NORTH); Panel panel = new Panel(); panel. set. Layout(new Flow. Layout()); panel. add(check. Box 1); panel. add(check. Box 2); panel. add(check. Box 3); this. add(panel, Border. Layout. SOUTH); check. Box 1. add. Item. Listener(this); check. Box 2. add. Item. Listener(this); check. Box 3. add. Item. Listener(this); } //xem tiếp ở slide tiếp theo 17

VÍ DỤ 4 (file Check. Box. Demo. java)-tt public void item. State. Changed(Item. Event

VÍ DỤ 4 (file Check. Box. Demo. java)-tt public void item. State. Changed(Item. Event evt) { if(evt. get. State. Change()==Item. Event. SELECTED) { String item. Label = (String)evt. get. Item(); if(item. Label=="The First") { txt. Area. append. Text("You checked " + item. Label + "n"); System. out. println(item. Label); } if(item. Label=="The Second") { txt. Area. append. Text("You checked " + item. Label + "n"); System. out. println(item. Label); } if(item. Label=="Reset Checkbox") { txt. Area. set. Text(""); System. out. println(item. Label); } } if(evt. get. State. Change()==Item. Event. DESELECTED) { txt. Area. append. Text("You have just uncheckedn"); System. out. println("You have just uncheckedn"); } } 18 //xem tiếp ở slide tiếp theo

VÍ DỤ 4 (file Check. Box. Demo. java)-tt public static void main(String[] arg) {

VÍ DỤ 4 (file Check. Box. Demo. java)-tt public static void main(String[] arg) { Check. Box. Demo chkdemo = new Check. Box. Demo(); chkdemo. set. Size(400, 200); chkdemo. set. Visible(true); } } //hết 19

PHẦN 2 MÔ HÌNH XỬ LÝ SỰ KIỆN

PHẦN 2 MÔ HÌNH XỬ LÝ SỰ KIỆN

MÔ HÌNH XỬ LÝ SỰ KIỆN Ba thành phần chính của mô hình •

MÔ HÌNH XỬ LÝ SỰ KIỆN Ba thành phần chính của mô hình • Event source: nguồn gây ra sự kiện, thường là các thành phần GUI trong chương trình • Event object: đối tượng lưu thông tin về sự kiện đã xảy ra • Event listener: đối tượng sẽ nhận được thông tin khi có sự kiện xảy ra 21

MÔ HÌNH XỬ LÝ SỰ KIỆN • Sự kiện (event) được phát sinh khi

MÔ HÌNH XỬ LÝ SỰ KIỆN • Sự kiện (event) được phát sinh khi người dùng tương tác với GUI, ví dụ: di chuyển chuột, ấn nút, nhập dữ liệu văn bản, chọn menu. . . • Thông tin về sự kiện được lưu trong một đối tượng sự kiện thuộc lớp con của lớp AWTEvent (gói java. awt. event). • Chương trình có thể xử lý các sự kiện bằng cách đặt “lắng nghe sự kiện” trên các thành phần GUI. 22

MÔ HÌNH XỬ LÝ SỰ KIỆN • Việc thông báo sự kiện xảy ra

MÔ HÌNH XỬ LÝ SỰ KIỆN • Việc thông báo sự kiện xảy ra thực chất là việc gọi một phương thức của Event. Listener với đối số truyền vào là Event. Object. • Các lớp con của Event. Listener có thể cài đặt các phương thức để xử lý sự kiện 23

MÔ HÌNH XỬ LÝ SỰ KIỆN • Nguồn sự kiện – Các lớp thành

MÔ HÌNH XỬ LÝ SỰ KIỆN • Nguồn sự kiện – Các lớp thành phần GUI mà người sử dụng tương tác. – Bạn có thể đăng ký “Listener” đáp ứng với những sự kiện nhất định • Bộ lắng nghe (Listener) – Nhận đối tượng sự kiện khi được thông báo và thực hiện đáp ứng thích hợp. – Nhiều kiểu của bộ lắng nghe tồn tại cho các sự kiện cụ thể như Mouse. Listener, Action. Listener, Key. Listener, … – Các giao tiếp được hiện thực và cài đặt các hành động • Đối tượng sự kiện (Event) – Đóng gói thông tin về sự kiện xuất hiện – Các đối tượng sự kiện được gửi tới bộ lắng nghe khi sự kiện xuất hiện trên thành phần GUI 24

GÓI java. awt. event. * Object Event. Object Action. Event Adjustment. Event Item. Event

GÓI java. awt. event. * Object Event. Object Action. Event Adjustment. Event Item. Event AWTEvent Text. Event Component. Event Container. Event Focus. Event Paint. Event Window. Event Input. Event Key. Event Mouse. Event 25

MỘT SỐ LỚP SỰ KIỆN Sự kiện cấp thấp: dùng cho hầu hết các

MỘT SỐ LỚP SỰ KIỆN Sự kiện cấp thấp: dùng cho hầu hết các thành phần • Focus. Event: đặt/chuyển focus • Input. Event: sự kiện phím (Key. Event) hoặc chuột (Mouse. Event) • Container. Event: thêm hoặc xoá các component • Window. Event: đóng, mở, di chuyển cửa sổ • . . . 26

MỘT SỐ LỚP SỰ KIỆN Sự kiện cấp cao: dùng cho một số thành

MỘT SỐ LỚP SỰ KIỆN Sự kiện cấp cao: dùng cho một số thành phần đặc thù • Action. Event: sự kiện sinh ra từ các thành phần giao tiếp với người dùng như nhấn một nút, chọn menu… • Item. Event: lựa chọn một item trong danh sách • Text. Event: thay đổi giá trị của hộp text • . . . 27

MỘT SỐ BỘ LẮNG NGHE SỰ KIỆN Là các interface Action. Listener Adjustment. Listener

MỘT SỐ BỘ LẮNG NGHE SỰ KIỆN Là các interface Action. Listener Adjustment. Listener Item. Listener Text. Listener Event. Listener Window. Listener Focus. Listener Container. Listener Key. Listener Mouse. Listener 28

CÀI ĐẶT VÀ QUẢN LÝ SỰ KIỆN • Xác định đối tượng sẽ gây

CÀI ĐẶT VÀ QUẢN LÝ SỰ KIỆN • Xác định đối tượng sẽ gây ra sự kiện (event source). Ví dụ: nút bấm. • Xác định sự kiện cần xử lý trên đối tượng gây sự kiện. Ví dụ: ấn nút. • Xác định đối tượng nghe sự kiện (event listener) và cài đặt các phương thức tương ứng. Ví dụ: chính applet sẽ nghe sự kiện. • Đăng ký đối tượng nghe trên đối tượng gây ra sự kiện. Ví dụ: button. add. Action. Listener(. . . ); 29

CÁC EVENT SOURCE & EVENT OBJECT 30

CÁC EVENT SOURCE & EVENT OBJECT 30

CÁC EVENT SOURCE & EVENT OBJECT 31

CÁC EVENT SOURCE & EVENT OBJECT 31

Các Listener Method 32

Các Listener Method 32

Các Listener Method 33

Các Listener Method 33

ĐĂNG KÝ ĐỐI TƯỢNG LẮNG NGHE • Để đăng ký đối tượng nghe ta

ĐĂNG KÝ ĐỐI TƯỢNG LẮNG NGHE • Để đăng ký đối tượng nghe ta sử dụng tên phương thức có cấu trúc như sau: add + loại sự kiện + Listener(lớp nghe sự kiện) • Ví dụ với nút Button add. Action. Listener(Action. Listener) • Ví dụ với danh sách List add. Action. Listener(Action. Listener) add. Item. Listener(Item. Listener) 34

PHẦN 3 CÁC COMPONENT N NG CAO

PHẦN 3 CÁC COMPONENT N NG CAO

VÙNG VĂN BẢN (Text. Area) • Cho phép người dùng nhập vào nhiều dòng

VÙNG VĂN BẢN (Text. Area) • Cho phép người dùng nhập vào nhiều dòng văn bản. Constructors Text. Area() Text. Area(int cols, int rows) Text. Area(String S, int rows, int cols) Text. Area(String, int cols, int rows, int Scrollbars) Common methods void set. Text(String) String get. Text() void set. Editable(boolean) boolean is. Editable() vois insert(String S, int Index) void replace. Range(String S, int begin, int end) 36

VÙNG VĂN BẢN (Text. Area) Ví dụ: // Cac import can thiet. . .

VÙNG VĂN BẢN (Text. Area) Ví dụ: // Cac import can thiet. . . public class Demo. Text. Area extends Applet implements Action. Listener { private Text. Area text. Area 1, text. Area 2; private Button copy; public void init() { text. Area 1 = new Text. Area("Sample Text", 5, 20); text. Area 2 = new Text. Area(5, 20); copy = new Button("Copy >>>"); set. Layout(new Flow. Layout(Flow. Layout. CENTER, 10)); copy. add. Action. Listener(this); add(text. Area 1); add(copy); add(text. Area 2); } //xem tiếp ở slide tiếp theo 37

VÙNG VĂN BẢN (Text. Area) public void action. Performed(Action. Event event) { text. Area

VÙNG VĂN BẢN (Text. Area) public void action. Performed(Action. Event event) { text. Area 2. set. Text(text. Area 1. get. Text()); } } 38

KHUNG VẼ (Canvas) • Khung vẽ là một vùng chuyên để vẽ đồ hoạ,

KHUNG VẼ (Canvas) • Khung vẽ là một vùng chuyên để vẽ đồ hoạ, nó không bị che bởi các thành phần giao diện khác. • Khung vẽ có thể xử lý các sự kiện giống như Applet. • Để sử dụng khung vẽ, cần tạo một lớp khác dẫn xuất từ Canvas và cài đặt nạp chồng phương thức paint(). • Nên gọi set. Size cho khung vẽ. Toạ độ vẽ là (0, 0) tính trong khung vẽ. 39

KHUNG VẼ (Canvas) // Cac import can thiet. . . public class Demo. Canvas

KHUNG VẼ (Canvas) // Cac import can thiet. . . public class Demo. Canvas extends Applet implements Action. Listener { private Buttonrect Button; private Buttoncircle Button; private My. Canvas canvas; public void init() { set. Layout(new Border. Layout()); rect. Button = new Button("Draw Rectangle"); circle. Button = new Button("Draw Circle"); rect. Button. add. Action. Listener(this); circle. Button. add. Action. Listener(this); Panel panel = new Panel(); panel. add(rect. Button); panel. add(circle. Button); //xem tiếp ở slide tiếp theo 40

KHUNG VẼ (Canvas) canvas = new My. Canvas(); canvas. set. Background(Color. light. Gray); add(panel,

KHUNG VẼ (Canvas) canvas = new My. Canvas(); canvas. set. Background(Color. light. Gray); add(panel, Border. Layout. NORTH); add(canvas, Border. Layout. CENTER); } public void action. Performed(Action. Event event) { if(event. get. Source() == rect. Button) canvas. draw(1); else if(event. get. Source() == circle. Button) canvas. draw(2); } } 41

KHUNG VẼ (Canvas) class My. Canvas extends Canvas { private int shape; public void

KHUNG VẼ (Canvas) class My. Canvas extends Canvas { private int shape; public void paint(Graphics g) { Dimension size = get. Size(); g. set. Color(Color. BLUE); if(shape == 1) g. fill. Rect(40, size. width-80, size. height-80); else if(shape == 2) g. fill. Oval(40, size. width-80, size. height-80); } public void draw(int shape) { this. shape = shape; repaint(); } } 42

THANH TRƯỢT (Scrollbar) • Công cụ nhập 1 trị trong 1 khoảng số (

THANH TRƯỢT (Scrollbar) • Công cụ nhập 1 trị trong 1 khoảng số ( biểu diễn bằng Maximum, Minimum) bằng cách kéo con trượt. • Tại 1 thời điểm, con trượt ở tại vi trí mô tả cho trị hiện hành (Value) • Có thể có hướng ngang hoặc dọc (Orientation) Kích đây sẽ thay đổi tăng giảm theo từng BLOCK đã ấn định trước Kích đây sẽ thay đổi tăng giảm theo từng UNIT đã ấn định trước 43

THANH TRƯỢT (Scrollbar) Constructors Scrollbar() - tạo thanh cuộn dọc Scrollbar(int orientation) // VERTICAL|HORIZONTAL

THANH TRƯỢT (Scrollbar) Constructors Scrollbar() - tạo thanh cuộn dọc Scrollbar(int orientation) // VERTICAL|HORIZONTAL Scrollbar(int orientation, int value, int visible, int minimum, int maximum) Common methods void set. Maximum(int v) int get. Maximum() ; void set. Minimum(int v) int get. Minimum() int get. Orientation() void set. Unit. Increment(int v) int get. Unit. Increment() void set. Block. Increment(int v) int get. Block. Increment() void set. Value(int v) int get. Value() void set. Visible. Amount(int new. Amount) int get. Visible. Amount() 44

MENU (thực đơn) Cấu trúc một hệ menu: Menu. Bar Các Menu. Item 45

MENU (thực đơn) Cấu trúc một hệ menu: Menu. Bar Các Menu. Item 45

MENU (thực đơn) • • Label-Chuỗi mô tả. Shortcut key- Phím nóng được kết

MENU (thực đơn) • • Label-Chuỗi mô tả. Shortcut key- Phím nóng được kết hợp. Enable/ Disable- Cho user tác động? Action Command- Chuỗi tên lệnh được kết hợp. • Ủy thác xử lý sự kiện : Action. Listener 46

MENU (thực đơn) Bài toán có nhiều tác vụ Phân nhóm các tác vụ

MENU (thực đơn) Bài toán có nhiều tác vụ Phân nhóm các tác vụ Nhóm 1 Tác vụ 12 Tác vụ 13 Tác vụ 14 Nhóm 2 Tác vụ 21 Tác vụ 22 Tác vụ 23 Một Menu chứa các Menu. Item Nhóm 3 Tác vụ 31 Tác vụ 32 Tác vụ 33 Tác vụ 34 Tác vụ 35 Tác vụ 36 (Menu. Bar chứa các Menu) Có thể thêm các thanh phân cách (Separator) để phân nhóm nhỏ hơn 47

VÍ DỤ 1: MENU ĐƠN GIẢN import java. awt. *; import java. applet. *;

VÍ DỤ 1: MENU ĐƠN GIẢN import java. awt. *; import java. applet. *; import java. awt. event. *; public class Menu. Demo { public static void main(String args[]){ Frame my. Window = new Frame("Menu Application"); Label status=new Label("Pleased select an item on menu"); my. Window. add(status); Menu. Bar App. Menu =new Menu. Bar(); my. Window. set. Menu. Bar(App. Menu); Menu File. Menu=new Menu("File"); App. Menu. add(File. Menu); Menu. Item new. Item=new Menu. Item("New"); Menu. Item open. Item=new Menu. Item("Open"); Menu. Item save. Item=new Menu. Item("Save"); Checkbox. Menu. Item Autosave. Item=new Checkbox. Menu. Item("Auto save"); Autosave. Item. set. State(true); Menu print. Item = new Menu("Print"); Menu. Item 1=new Menu. Item("Print preview"); Menu. Item 2=new Menu. Item("to Printer"); print. Item. add(Item 1); print. Item. add(Item 2); 48

VÍ DỤ 1: MENU ĐƠN GIẢN File. Menu. add(new. Item); File. Menu. add(open. Item);

VÍ DỤ 1: MENU ĐƠN GIẢN File. Menu. add(new. Item); File. Menu. add(open. Item); File. Menu. add(save. Item); File. Menu. add(Autosave. Item); File. Menu. add. Separator(); File. Menu. add(print. Item); new. Item. add. Action. Listener(new process. Item(status)); open. Item. add. Action. Listener(new process. Item(status)); save. Item. add. Action. Listener(new process. Item(status)); Autosave. Item. add. Action. Listener(new process. Item(status)); //For print sub menu Item 1. add. Action. Listener(new process. Item(status)); Item 2. add. Action. Listener(new process. Item(status)); my. Window. add. Window. Listener(new Window. Adapter(){ public void window. Closing(Window. Event event){ System. exit(0); } }); my. Window. set. Size(new Dimension(300, 100)); my. Window. show(); } } 49

VÍ DỤ 1: MENU ĐƠN GIẢN class process. Item implements Action. Listener{ Label status;

VÍ DỤ 1: MENU ĐƠN GIẢN class process. Item implements Action. Listener{ Label status; process. Item(Label status){ this. status=status; } public void action. Performed(Action. Event evt){ if (evt. get. Source() instanceof Menu. Component){ Menu. Item= (Menu. Item)evt. get. Source(); status. set. Text("You have selected : " +Item. get. Label()); } } } 50

VÍ DỤ 2: (Checkbox Menu) import java. awt. *; import java. awt. event. *;

VÍ DỤ 2: (Checkbox Menu) import java. awt. *; import java. awt. event. *; public class Menu. Demo extends Frame implements Action. Listener, Item. Listener { Menu. Bar mb; //File, Options, Help Menu fm, om, hm; //Options Sub-Menu op. Subm; //The Menu. Item for exiting Menu. Item exit. Item; //An option that can be on or off Checkbox. Menu. Item cb; Label label; Menu. Demo(String s) { super("Menu. Demo: " + s); Container cp = this; cp. set. Layout(new Flow. Layout()); mb = new Menu. Bar(); set. Menu. Bar(mb); // Frame implements Menu. Container //xem tiếp ở slide tiếp theo 51

VÍ DỤ 2: (Checkbox Menu) Menu. Item mi; // The File Menu. . .

VÍ DỤ 2: (Checkbox Menu) Menu. Item mi; // The File Menu. . . fm = new Menu("File"); fm. add(mi = new Menu. Item("Open", new Menu. Shortcut('O'))); mi. add. Action. Listener(this); fm. add(mi = new Menu. Item("Close", new Menu. Shortcut('W'))); mi. add. Action. Listener(this); fm. add. Separator(); fm. add(mi = new Menu. Item("Print", new Menu. Shortcut('P'))); mi. add. Action. Listener(this); fm. add. Separator(); fm. add(mi = new Menu. Item("Exit", new Menu. Shortcut('Q'))); exit. Item = mi; // save for action handler mi. add. Action. Listener(this); mb. add(fm); //xem tiếp ở slide tiếp theo 52

VÍ DỤ 2: (Checkbox Menu) // The Options Menu. . . om = new

VÍ DỤ 2: (Checkbox Menu) // The Options Menu. . . om = new Menu("Options"); cb = new Checkbox. Menu. Item("Auto. Save"); cb. set. State(true); cb. add. Item. Listener(this); om. add(cb); op. Subm = new Menu("Sub. Options"); op. Subm. add(new Menu. Item("Alpha")); op. Subm. add(new Menu. Item("Gamma")); op. Subm. add(new Menu. Item("Delta")); om. add(op. Subm); mb. add(om); // The Help Menu. . . hm = new Menu("Help"); hm. add(mi = new Menu. Item("About")); mi. add. Action. Listener(this); hm. add(mi = new Menu. Item("Topics")); mi. add. Action. Listener(this); mb. add(hm); mb. set. Help. Menu(hm); // needed for portability (Motif, etc. ). // the main window label = new Label("Menu Demo Window"); label. set. Size(200, 150); cp. add(label); pack(); } //xem tiếp ở slide tiếp theo 53

VÍ DỤ 2: (Checkbox Menu) /** Handle action events. */ public void action. Performed(Action.

VÍ DỤ 2: (Checkbox Menu) /** Handle action events. */ public void action. Performed(Action. Event evt) { // System. out. println("Event " + evt); String cmd; if ((cmd = evt. get. Action. Command()) == null) System. out. println("You chose a menu shortcut"); else System. out. println("You chose " + cmd); Object cmp = evt. get. Source(); // System. out. println("Source " + cmp); if (cmp == exit. Item) System. exit(0); } /** The Check. Box. Menu. Items send a different message */ public void item. State. Changed(Item. Event e) { System. out. println("Auto. Save is set " + cb. get. State()); } public static void main(String[] arg) { new Menu. Demo("Testing 1 2 3. . . "). set. Visible(true); } } 54

VÍ DỤ 3: (Popup Menu) class Popup. Menu. Demo extends Frame { Popup. Menu

VÍ DỤ 3: (Popup Menu) class Popup. Menu. Demo extends Frame { Popup. Menu = new Popup. Menu(); Menu. Item mnu. Copy = new Menu. Item("Copy"); Menu. Item mnu. Cut = new Menu. Item("Cut"); Menu. Item mnu. Paste = new Menu. Item("Paste"); Popup. Menu. Demo() // Constructor of a frame {. . . p. Menu. add(mnu. Copy); // setup popup menu p. Menu. add. Separator(); p. Menu. add(mnu. Cut); p. Menu. add. Separator(); p. Menu. add(mnu. Paste); // Add popup menu to the frame this. add(p. Menu); //xem tiếp ở slide tiếp theo 55

VÍ DỤ 3: (Popup Menu) // In constructor of a frame // Add mouse

VÍ DỤ 3: (Popup Menu) // In constructor of a frame // Add mouse Listener for showing popup menu add. Mouse. Listener ( new Mouse. Adapter() { public void mouse. Released(Mouse. Event e) { if (e. is. Popup. Trigger()) // check right clicked p. Menu. show(e. get. Component(), The e. get. X(), e. get. Y()); right-clicked } position } ); 56

PHẦN 4 XỬ LÝ SỰ KIỆN CHUỘT

PHẦN 4 XỬ LÝ SỰ KIỆN CHUỘT

XỬ LÝ SỰ KIỆN CHUỘT • Java cung cấp hai intefaces lắng nghe (bộ

XỬ LÝ SỰ KIỆN CHUỘT • Java cung cấp hai intefaces lắng nghe (bộ lắng nghe sự kiện chuột) là Mouse. Listener và Mouse. Motion. Listener để quản lý và xử lý các sự kiện liên quan đến thiết bị chuột. • Những sự kiện chuột có thể “bẫy” cho bất kỳ component nào trên GUI mà dẫn xuất từ java. awt. component. 58

XỬ LÝ SỰ KIỆN CHUỘT Các phương thức của interface Mouse. Listener: • public

XỬ LÝ SỰ KIỆN CHUỘT Các phương thức của interface Mouse. Listener: • public void mouse. Pressed(Mouse. Event event): được gọi khi một nút chuột được nhấnvà con trỏ chuột ở trên component. • public void mouse. Clicked(Mouse. Event event): được gọi khi một nút chuột được nhấn và nhả trên component mà không di chuyển chuột. • public void mouse. Released(Mouse. Event event): được gọi khi một nút chuột nhả sa khi kéo rê. • public void mouse. Entered(Mouse. Event event): được gọi khi con trỏ chuột vào trong đường biên của một component. • public void mouse. Exited(Mouse. Event event): được gọi khi con trỏ chuột ra khỏi đường biên của một component. 59

XỬ LÝ SỰ KIỆN CHUỘT Các phương thức của interface Mouse. Motion. Listener: •

XỬ LÝ SỰ KIỆN CHUỘT Các phương thức của interface Mouse. Motion. Listener: • public void mouse. Dragged(Mouse. Event even ): phương thức này được gọi khi người dùng nhấn một nút chuột và kéo trên một component. • public void mouse. Moved(Mouse. Event event): phương thức này được gọi khi di chuyển chuột trên component. Mỗi phương thức xử lý sự kiện chuột có một tham số. Mouse. Event chứa thông tin về sự kiện chuột phát sinh chẳng hạn như: tọa độ x, y nơi sự kiện chuột xảy ra. Những phương thức tương ứng trong các interfaces sẽ tự động được gọi khi chuột tương tác với một component. 60

XỬ LÝ SỰ KIỆN CHUỘT Ví dụ: Chương trình tên Mouse. Tracker bên dưới

XỬ LÝ SỰ KIỆN CHUỘT Ví dụ: Chương trình tên Mouse. Tracker bên dưới minh họa việc dùng những phương thức của các interfaces Mouse. Listener và Mouse. Motion. Listener để “bẫy” và xử lý các sự kiện chuột tương ứng. import java. awt. *; import java. awt. event. *; public class Mouse. Tracker extends Frame implements Mouse. Listener, Mouse. Motion. Listener { private Label status. Bar; public Mouse. Tracker() { super( "Demonstrating Mouse Events" ); status. Bar = new Label(); this. add( status. Bar, Border. Layout. SOUTH ); add. Mouse. Listener( this ); add. Mouse. Motion. Listener( this ); set. Size( 275, 100 ); set. Visible( true ); } public void mouse. Clicked( Mouse. Event event ) { String str_bt = new String(); int count = event. get. Click. Count(); int mousebutton = event. get. Button(); if(mousebutton == Mouse. Event. BUTTON 1) str_bt = "left mouse button"; if(mousebutton == Mouse. Event. BUTTON 3) str_bt = "right mouse button"; if(mousebutton == Mouse. Event. BUTTON 2) str_bt = "middle mouse button"; status. Bar. set. Text(str_bt + " clicked at (" + event. get. X() + ", " + event. get. Y() + ")" + count + " lan"); } //xem ở slide kế tiếp 61

XỬ LÝ SỰ KIỆN CHUỘT public void mouse. Pressed( Mouse. Event event ) {

XỬ LÝ SỰ KIỆN CHUỘT public void mouse. Pressed( Mouse. Event event ) { status. Bar. set. Text("Pressed at [" + event. get. X() + ", " + event. get. Y() + "]" ); } public void mouse. Released( Mouse. Event event ) { status. Bar. set. Text("Released at [" + event. get. X() + ", " + event. get. Y() + "]" ); } public void mouse. Entered( Mouse. Event event ) { status. Bar. set. Text( "Mouse in window" ); } public void mouse. Exited( Mouse. Event event ) { status. Bar. set. Text( "Mouse outside window" ); } public void mouse. Dragged( Mouse. Event event ) { status. Bar. set. Text("Dragged at [" + event. get. X() + ", " + event. get. Y() + "]" ); } public void mouse. Moved( Mouse. Event event ) { status. Bar. set. Text("Moved at [" + event. get. X() + ", " + event. get. Y() + "]" ); } public static void main( String args[] ) { Mouse. Tracker application = new Mouse. Tracker(); } } 62

PHẦN 5 XỬ LÝ SỰ KIỆN BÀN PHÍM

PHẦN 5 XỬ LÝ SỰ KIỆN BÀN PHÍM

XỬ LÝ SỰ KIỆN BÀN PHÍM • Để xử lý sự kiện bàn phím

XỬ LÝ SỰ KIỆN BÀN PHÍM • Để xử lý sự kiện bàn phím java hỗ trợ một bộ lắng nghe sự kiện đó là interface Key. Listener. Một sự kiện bàn phím được phát sinh khi người dùng nhấn và nhả một phím trên bàn phím. Một lớp hiện thực Key. Listener phải cài đặt các phương thức key. Pressed, key. Released và key. Typed. Mỗi phương thức này có một tham số là một đối tượng kiểu Key. Event là lớp con của lớp Input. Event. 64

XỬ LÝ SỰ KIỆN BÀN PHÍM • Các phương thức của interface Key. Listener

XỬ LÝ SỰ KIỆN BÀN PHÍM • Các phương thức của interface Key. Listener – Phương thức key. Pressed được gọi khi một phím bất kỳ được nhấn. – Phương thức key. Typed được gọi thực hiện khi người dùng nhấn một phím không phải “phím hành động” (như phím mũi tên, phím Home, End, Page Up, Page Down, các phím chức năng như: Num Lock, Print Screen, Scroll Lock, Caps Lock, Pause). – Phương thức key. Released được gọi thực hiện khi nhả phím nhấn sau khi sự kiện key. Pressed hoặc key. Typed 65

XỬ LÝ SỰ KIỆN BÀN PHÍM Ví dụ: minh họa việc xử lý sự

XỬ LÝ SỰ KIỆN BÀN PHÍM Ví dụ: minh họa việc xử lý sự kiện chuột thông qua các phương thức của interface Key. Listener. Lớp Key. Demo bên dưới hiện thực interface Key. Listener, vì vậy tất cả 3 phương thức trong Key. Listener phải được cài đặt trong chương trình. // Key. Demo. java // Demonstrating keystroke events. // Java core packages import java. awt. *; import java. awt. event. *; public class Key. Demo extends Frame implements Key. Listener { private String line 1 = "", line 2 = ""; private String line 3 = ""; private Text. Area text. Area; //xem tiếp ở slide tiếp theo 66

XỬ LÝ SỰ KIỆN BÀN PHÍM // set up GUI public Key. Demo() {

XỬ LÝ SỰ KIỆN BÀN PHÍM // set up GUI public Key. Demo() { super( "Demonstrating Keystroke Events" ); text. Area = new Text. Area( 10, 15 ); // set up Text. Area text. Area. set. Text( "Press any key on the keyboard. . . " ); text. Area. set. Enabled( false ); this. add( text. Area ); add. Key. Listener( this ); // allow frame to process Key events set. Size( 350, 100 ); set. Visible( true ); } // handle press of any key public void key. Pressed( Key. Event event ) { line 1 = "Key pressed: " + event. get. Key. Text( event. get. Key. Code() ); set. Lines 2 and 3( event ); } //xem tiếp ở slide tiếp theo 67

XỬ LÝ SỰ KIỆN BÀN PHÍM // handle release of any key public void

XỬ LÝ SỰ KIỆN BÀN PHÍM // handle release of any key public void key. Released( Key. Event event ) { line 1 = "Key released: " + event. get. Key. Text( event. get. Key. Code() ); set. Lines 2 and 3( event ); } // handle press of an action key public void key. Typed( Key. Event event ) { line 1 = "Key typed: " + event. get. Key. Char(); set. Lines 2 and 3( event ); } //xem tiếp ở slide tiếp theo 68

XỬ LÝ SỰ KIỆN BÀN PHÍM // set second and third lines of output

XỬ LÝ SỰ KIỆN BÀN PHÍM // set second and third lines of output private void set. Lines 2 and 3( Key. Event event ) { line 2 = "This key is " + ( event. is. Action. Key() ? "" : "not" ) + "an action key"; String temp = event. get. Key. Modifiers. Text(event. get. Modifiers() ); line 3 = "Modifier keys pressed: " + ( temp. equals( "" )? "none" : temp ); text. Area. set. Text(line 1+"n"+line 2+"n"+ line 3+"n" ); } // execute application public static void main( String args[] ) { Key. Demo application = new Key. Demo(); } } // end class Key. Demo 69

HẾT CHƯƠNG 6

HẾT CHƯƠNG 6