L P TRÌNH JAVA C B N L P TRÌNH JAVA C B N

Ơ Ả Ơ Ả

Ậ Ậ

ng 3 Ể

Ch ươ ĐI U KHI N Ề S KI N XU T Ấ Ự Ệ

Lê Tân B môn: L p trình máy tính

N i dung ch N i dung ch

ng 3 ng 3

ộ ộ

ươ ươ

ể ề ự ệ

 Giao di n và l p trình đi u khi n s ki n ậ ệ  Đ nh d ng xu t ấ ạ  Qu n lý s ki n ự ệ  Đăng ký listener  Các ph ứ ươ

2/20

ng th c event-handler

ậ ậ ề ề

ệ ố ỡ

 L p trình đi u khi n s ki n (event-driven

ự ệ Giao di n và l p trình đi u khi n s ki n 3.1 3.1 Giao di n và l p trình đi u khi n s ki n ể ệ ự ệ ể ệ Là m t k t n i, cho  Giao di n (interface): ặ ế ố phép các h th ng đ c l p g p g và tác ặ ộ ậ đ ng ho c giao ti p v i nhau. ớ ự ệ ộ ậ ề

ng tác c a ng ế ể ươ

ụ i s ườ ử ệ ủ ủ ầ ộ

ộ ự ệ

c x lý b i ch programming): T d ng v i m t thành ph n c a giao di n đ ồ ớ i dùng GUI là m t s ki n có th ho ng ể ườ ạ đ ử ượ ở

 Frame (khung): M t ki u c a s đ ị

c ươ ộ ng trình. ử ể

3/20

ổ ượ i s d ng đ nh nghĩa g i là m t ộ ườ ử ụ ọ

ng khung.

 Th c hi n các b ệ

ướ

c: • N p gói (package – t

ự ệ 3.1 3.1 Giao di n và l p trình đi u khi n s ki n Giao di n và l p trình đi u khi n s ki n ự ệ ề ề ể ể ệ ệ ậ ậ

ự ạ ư ụ

ng t ự ệ

ươ ủ

th vi n Java, đó là gói ừ ư ệ

khái ni m th m c, hay folder c a Windows) ch a ứ l p ớ Frame t java.awt

• Khai báo m t bi n thu c l p • S d ng toán t

ộ ớ Frame ế ử new đ t o m t đ i ộ ố ể ạ ộ ớ Frame và gán cho bi n ế ng thu c l p

4/20

ử ụ t ượ đã khai báo

ự ệ 3.1 3.1 Giao di n và l p trình đi u khi n s ki n Giao di n và l p trình đi u khi n s ki n ự ệ ể ể ề ề ệ ệ ậ ậ

ị ộ

Frame đó manager) cho đ i t • Xác đ nh b qu n lý b c c (layout ả ố ượ

• Thêm ph n t ụ ộ

ầ ử nhãn – label) vào đ i t

Frame. ng ố ượ ấ

ố ụ ng xu t d li u (ví d m t ấ ữ ệ ng ố ượ • Đi u ch nh kích th c c a đ i t ủ ướ ỉ Frame cho phù h p v i d li u xu t mà ớ ữ ệ ợ nó ch a.ứ

5/20

• Hi n th đ i t ng Frame trên màn hình ị ố ượ ể

ự ệ 3.1 3.1 Giao di n và l p trình đi u khi n s ki n Giao di n và l p trình đi u khi n s ki n ự ệ ề ề ể ể ệ ệ ậ ậ

 Ví d v s d ng khung xu t ấ ụ ề ử ụ // N p gói java.awt import java.awt.*; ...... private static Frame outputDisplay;//đ i t

ng

ố ượ

Frame

ng

ở ạ

ố ượ

ố ụ

outputDisplay = new Frame( ); // Kh i t o đ i t // Xác đ nh b qu n lý b c c cho khung outputDisplay.setLayout( new FlowLayout( )); //Thêm nhãn đ hi n th d li u vào khung

ị ữ ệ

ể ể

outputDisplay.add( new Label(“Total is $” + total)); outputDisplay.pack( ); // Đi u ch nh kích th outputDisplay.show( ); // Hi n th đ i t

c ướ Frame

ng

ỉ ị ố ượ

ề ể

6/20

 Ph

ng th c t o

ươ

ứ ạ (Constructor):

t c a ph

ng th c ứ

ươ

ọ ể

ượ

• Constructor là m t d ng đ c bi ặ • Đ c g i đ xây d ng đ i t ố ượ • Tên c a nó c n ph i đ t gi ng v i tên c a l p ch a ố

ộ ạ ự ả ặ

ệ ủ ng. ớ

ủ ớ

nó.

• Constructor không có tham s đ

default

ố ượ

c g i là ọ

constructor.

• Các Constructor không có ki u d li u tr v , k c ả ề ể ả

ữ ệ

ki u ể void.

• Các Constructor đ

ọ ử ụ

ượ

ử new khi t o ạ

c g i s d ng toán t ng, đóng vai trò kh i t o đ i t

ng.

ố ượ

ở ạ

m t đ i t  Ví d v

ộ ố ượ ụ ề constructor:

// Constructors public Label( ) // T o m t nhãn r ng (không ch a văn b n)

7/20

ự ệ 3.1 3.1 Giao di n và l p trình đi u khi n s ki n Giao di n và l p trình đi u khi n s ki n ự ệ ề ề ể ể ệ ệ ậ ậ

 GUI (Abstract Windowing Toolkit package –

3.2 3.2 Đ nh d ng xu t Đ nh d ng xu t ấ ạ ạ ấ ị ị

ng): Giao di n ệ ổ ừ ượ

 M t s thành ph n c a GUI:

i s d ng.

ử các thành ph n đ h a khác. ầ ể

gói công c c a s tr u t ụ ử đ h a ng ườ ử ụ ồ ọ ộ ố

ườ ườ ử ụ

8/20

ủ ầ • Khung (frame): M t d ng c a s (window) ch a ộ ạ ồ ọ • Nhãn (label): Thành ph n hi n th văn b n ầ • Nút (button): Thành ph n t o ra m t s ki n ộ ự ệ ầ ạ • Tr Thành ph n trong đó ng văn b n (textfield): ầ i s d ng có th nh p m t giá tr . ng ị ậ ể

 B qu n lý b c c: Đ nh d ng b ng cho

3.2 3.2 Đ nh d ng xu t Đ nh d ng xu t ấ ạ ạ ấ ị ị

ạ ả ị ả

ơ

 FlowLayout: ươ ả

• Ch ng trình qu n lý b c c đ n gi n nh t ố ụ • Qu n lý m c đ nh cho khung • Đ t các thành ph n cái n sau cái kia. ầ

ặ  GridLayout: ấ

• R t gi ng v i ố • Chia nh khung thành m t kh i ch nh t v i s ậ ớ ố

ớ FlowLayout. ộ

hàng và s c t c đ nh

i, h t hàng

ố ộ ố ị • Chèn các thành ph n vào các ô l ầ

ướ

ế

này đ n hàng kia.

ế

9/20

ố ụ vi c xu t d li u ấ ữ ệ ộ ệ

 Đ nh d ng xu t văn b n trong nhãn

3.2 3.2 Đ nh d ng xu t Đ nh d ng xu t ấ ạ ạ ấ ị ị

ề ph i, ho c căn gi a cho văn b n

ả c căn l

trái. ữ

ượ ặ

ấ ả ả

• Label.LEFT, Label.CENTER, Label.RIGHT.  Ví d : Mu n c t “Named” trong b ng trên

ị ạ • M c đ nh, văn b n đ ị • Có th căn l ể trong nhãn.

ụ ộ ố c canh gi a: ữ

Label.CENTER));

10/20

đ ượ dateWindow.add(new Label(“Named”,

ả ả

ự ệ ồ

ế ệ

ạ  Event handling (x lý s ki n): Ti n trình đáp ng các s ự ự ệ

ộ ị ng trình. ươ ứ

ự ế

ki n.ệ

ố ượ

ng, ch đ i s ờ ợ ự

 Event listener (b nghe s ki n): Đ i t ộ xu t hi n c a m t ho c nhi u s ki n. ự ệ ộ  Event handler (b x lý s ki n): Ph ươ ộ ử

ng th c, là b ộ c g i khi listener nh n đ

c

ự ệ ề ự ệ ượ

ượ

ph n c a event listener, đ ủ m t s ki n t

ậ ộ ự ệ ươ

 Event source (ngu n s ki n): Đ i t

ng ng. ứ ồ

ự ệ

ố ượ

ng s n sinh s ự

ki n.ệ

 Firing an event: Vi c s n sinh s ki n c a m t event

ự ệ

source.

 Registering the listener (đăng ký b nghe s ki n): Thêm

ự ệ

c quan tâm c a

ượ

ộ listener vào danh sách các listener đ event source.

11/20

ự ệ 3.3 3.3 Qu n lý s ki n Qu n lý s ki n ự ệ  Event (s ki n): Là m t hành đ ng, chi m m t v trí ộ không đ ng b theo khía c nh th c hi n ch

• Ghi nh n c a m t event listener đ nh n bi

t

ế

ộ ự ệ

ộ ủ

ự ệ

d ng đ c tr ng c a s ki n • Vi c thi hành event handler đ

ượ

ộ ạ

ọ ự ộ ệ ủ

đ ng t c a s ự

ạ c g i t ệ nh m đáp ng cho m t d ng riêng bi ằ ki n ệ

12/20

ự ệ 3.3 3.3 Qu n lý s ki n Qu n lý s ki n ả ả ự ệ  Các b ử ủ ư c x lý m t s ki n ướ ậ ặ

ử • S d ng event listener trong vi c qu n lý

ng c u quy n ề ỷ t trong ch ươ ượ ệ

ự ệ 3.3 3.3 Qu n lý s ki n Qu n lý s ki n ả ự ệ ả  Ch đ u quy n x lý s ki n ự ệ ề ế ộ ỷ ệ ử ụ s ki n ự ệ • Vi c x lý m t s ki n đ ộ ự ệ ử ệ ng đ c bi cho m t đ i t ặ ộ ố ượ trình

• S d ng m t l p riêng bi ử ụ

ệ ặ

13/20

t đ đ nh ệ ể ị ng th ự ế ườ vi c thi ừ ệ ộ ớ nghĩa event listener là th c t g p đ tách giao di n GUI t hành c a event listener c a nó ể ủ ủ

ươ ọ c th c ự ượ ng th c liên ứ

ộ ng event source.

 Ph

ng th c đăng ký m t listener là add, ươ ộ

Đăng ký listener 3.4 3.4 Đăng ký listener  Vi c đăng ký m t event listener đ ộ ệ hi n b ng cách g i m t ph ằ ệ k t v i đ i t ế ớ ố ượ ứ theo sau là tên listener.

ủ ụ

ươ ứ

 Ví d : listener c a các s ki n window là ự ệ ng th c đăng ký WindowListener → ph listener là addWindowListener. Đ c th c ự hi n nh sau:

ượ

ư

14/20

ệ outputDisplay.addWindowListener (myListener);

ớ ươ

ng th c t Đăng ký listener 3.4 3.4 Đăng ký listener  Các l p thích nghi: ộ ố ỉ ầ ươ ng ứ ừ

Có th m t ch ể ộ trình ch c n m t s ít các ph m t giao di n event listener ớ ầ

 S có các l p thích nghi v i ph n thân ươ

ng th c có trong giao ứ

.

ệ ộ ớ ẽ r ng cho m i ph ỗ ỗ ng ng. di n t ệ ươ ứ  Ví d : ụ l p WindowAdapter ớ  ỉ ươ

15/20

Ư ể th t s c n thi u đi m: ch đ nh nghĩa các ph ậ ự ầ ng th c ứ t cho vi c qu n lý s ki n. ự ệ ả ị ế ệ

ứ ứ ươ ươ

ng th c event-handler ng th c event-handler

ị // N p l p trong gói java.awt

ng

ố ượ

//Ngày theo d ng tháng – ngày – năm // Ngày theo d ng tháng – năm – ngày

ạ ạ

Các ph 3.5 3.5 Các ph //Ví d : Xu t ra m t ngày theo 2 đ nh d ng khác nhau import java.awt.*; ạ ớ import java.awt.event.*; public class DateFormats { private static Frame outputDisplay; //Khai báo đ i t public static void main( String[ ] args ) { final String MONTH_NAME = “August”; // Tên tháng final String MONTH_NUMBER = “8”; // Tháng theo số final String DAY = “17”; // Ngày trong tháng final String YEAR = “2001”; // Năm theo 4 ký số String first; String second; outputDisplay = new Frame( ); outputDisplay.setLayout( new GridLayout(5, 2) ); 16/20

ứ ứ ươ ươ

ng th c event-handler ng th c event-handler

c khung

ướ

ề ể

ỉ ị

17/20

Các ph 3.5 3.5 Các ph outputDisplay.add( new Label(“Format”)); outputDisplay.add( new Label(“Example”)); // Hi n th ngày theo d ng th nh t ấ outputDisplay.add( new Label(“Month day, year”)); first = MONTH_NAME + “ ” + DAY + “, ” + YEAR; outputDisplay.add( new Label(first) ); // Hi n th ngày theo d ng th hai ạ outputDisplay.add( new Label(“day Month year”)); second = DAY + “ ” + MONTH_NAME + “ ” + YEAR; outputDisplay.add( new Label(second) ); outputDisplay.pack( ); //Đi u ch nh kích th outputDisplay.show( );// Hi n th khung

ứ ứ

ng th c event-handler ng th c event-handler

outputDisplay.addWindowListener( new

ng WindowAdapter

WindowAdapter( ) ộ ố ượ

ng th c r ng

ng th c thay th ph

ế

ươ

ươ

ứ ỗ

// Thoát ch

ng trình

ươ

// T o m t đ i t { // Ph public void windowClosing (WindowEvent event) { outputDisplay.dispose( ); // Xóa khung System.exit( 0 ); } }); } }

18/20

Các ph 3.5 3.5 Các ph ươ ươ // Qu n lý s ki n c a s đóng ự ệ

ỏ ỏ

ượ

c s d ng ử ụ đ n p vào các l p trong m t gói? ộ ớ

2. Vi

t l nh t o m t đ i t

ng Frame tên

ừ ể ạ ế ệ

ộ ố ượ

ượ

là outDisplay. 3. Thành ph n đ ầ các giá tr đ n m t ph ị ế

ử ụ ươ

c s d ng đ truy n ể ng th c là gì? ứ ộ 4. Có bao nhiêu c t và bao nhiêu hàng

ượ

c đ nh d ng theo ạ

trong m t khung đ ộ l nh sau? ệ

out.setLayout(new GridLayout(4, 3));

19/20

ậ Câu h i và bài t p Câu h i và bài t p ậ 1. T khoá nào c a Java đ

t m t l nh đ thêm nhãn “This is my

ế

ỏ ỏ 5. Hãy vi

6. Ch c năng c a ph

ng th c

ươ

ứ add c a l p

ủ ớ

ng th c

ươ

ươ

Frame là gì? 7. M c đích c a ph ủ ọ

ố ụ

xu t hi n c a m t s ki n là gì?

ng th c

ứ windowClosing

đ

ứ setLayout là gì? Hãy g i tên hai ch ng trình qu n lý b c c ả và nêu s khác nhau gi a chúng. ữ ự ng mà vai trò c a nó là ch đ i s 8. Đ i t ờ ợ ự ủ ố ượ ủ ệ ấ 9. Đo n mã c a ph ủ ạ c ch a ứ ở ượ ổ

ộ ự ệ ươ đâu? ươ

DateFormats đ ể

10.Hãy s a đ i ch ử ị

ng trình hi n th ngày sinh c a b n. ạ

20/20

ậ Câu h i và bài t p Câu h i và bài t p ậ ộ ệ answer” vào outDisplay.