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.