Thế nào là lập trình hướng đối tượng
Tìm hiểu về trừu tượng dữ liệu
Định nghĩa lớp và đối tượng
Constructor và Destructor
Tìm hiểu về tính lưu trữ, bao bọc dữ liệu, tính kế thừa và đa hình
Các ưu điểm của phương pháp lập trình hướng đối tượng
322 trang |
Chia sẻ: quynhsim | Lượt xem: 353 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Bài giảng môn Tin học - Lập trình java, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
GIÁO TRÌNH BÀI GIẢNGMÔN HỌC : LẬP TRÌNH JAVAMỞ ĐẦU GIỚI THIỆU SƠ LƯỢC LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Mục Tiêu Bài HọcThế nào là lập trình hướng đối tượngTìm hiểu về trừu tượng dữ liệuĐịnh nghĩa lớp và đối tượng Constructor và DestructorTìm hiểu về tính lưu trữ, bao bọc dữ liệu, tính kế thừa và đa hình Các ưu điểm của phương pháp lập trình hướng đối tượngLập Trình Hướng Đối TượngLấy đối tượng làm nền tảng cơ sở của phương pháp lập trình Phương pháp thiết kế và thực hiện bằng các hệ phần mềmTrừu Tượng Dữ LiệuLà tiến trình xác định và tập hợp các tính chất và các hành động của một thực thể có liên quan đến ứng dụngLợi ích :Tập trung vào vấn đềXác định những tính chất và hành động thiết yếuLoại trừ những chi tiết không cần thiếtTrừu Tượng Dữ LiệuCác tính chất của một đối tượng NgườiTênĐịa chỉTuổiChiều caoMàu tócCác tính chất của một đối tượng Khách hàngTênĐịa chỉTrừu Tượng Dữ Liệu (tiếp theo)Các thuộc tínhCác hành độngTên của khách hàngNhập tên của khách hàngĐịa chỉ của khách hàngNhập địa chỉ của khách hàngĐời xe hơi đã muaNhập đời xe hơi mua đượcNgười bán xe hơiNhập tên người bán xe hơiLập hoá đơnLớpLớp là một nhóm các đối tượng có chung những tính chất và hành độngLớp Khách hàngTên khách hàngĐịa chỉ khách hàngĐời xe hơi đã muaTên người bán xe hơiNhập tênNhập địa chỉNhập đời của xe hơi mua đượcNhập tên của người bán xe hơiLập hóa đơnĐối TượngĐối tượng là một thể hiện của lớpToànAnhTuấnĐối Tượng ( tiếp theo )Thuộc tínhTính chất mô tả một đối tượngHành độngDịch vụ mà đối tượng có thể đáp ứngPhương thứcĐặc tả cách đáp ứng bằng hành động khi được yêu cầuThông điệpYêu cầu một hành độngBiến cốSự kích thích từ đối tượng này gởi sang đối tượng khácLớp Và Đối TượngLớp là một thực thể, còn đối tượng là một thực thể thực tế Lớp là một mô hình ý niệm định rõ các tính chất và các hành động được quy định bởi một đối tượng, còn đối tượng là một mô hình thực sựLớp là khuôn mẫu từ đó đối tượng được tạo raTất cả các đối tượng trong cùng một lớp có các tính chất và các hành động như nhauConstructorTiến trình tạo ra một đối tượng được gọi là Constructor Một Constructor:Cấp phát vùng nhớKhởi gán những thuộc tính (nếu có)Cho phép truy cập những thuộc tính và phương thứcDestructorTiến trình hủy một đối tượng gọi là DestructorMột Destructor:Giải phóng bộ nhớCấm truy cập thuộc tính và phương thứcTính Lưu TrữTính lưu trữ là khả năng của đối tượng có thể lưu lại dữ liệu của nó sau khi đã bị hủyTính Bao Bọc Dữ LiệuTiến trình che dấu những chi tiết hiện thực một đối tượng được gọi là tính bao bọcƯu điểm:Tất cả những thuộc tính và phương thức cần thiết đều được tạo Một lớp có thể có nhiều tính chất và phương thức nhưng chỉ một số trong đó được hiển thị cho người dùngTính Kế Thừa LỚP SINH VIÊNLỚP NHÂN VIÊNLỚP KHÁCH HÀNGTênTênTênĐịa chỉĐịa chỉĐịa chỉĐiểm môn 1LươngSản phẩm mua đượcĐiểm môn 2Chức vụNhập tênNhập tênNhập tênNhập địa chỉNhập địa chỉNhập địa chỉNhập mã sản phẩmNhập điểmNhập lươngLập hóa đơnTính tổng số điểmTính lươngTính Kế Thừa (tiếp theo)Lớp NgườiTênĐịa chỉNhập tênNhập địa chỉTính Kế Thừa ( tiếp theo )LỚP NGƯỜITênĐịa chỉNhập tênNhập địa chỉThêm các thuộc tính và hành động cần thiết vào lớp khách hàngNhập mã sản phẩm đã muaLập hóa đơnLớp Khách Hàng + = Tính Kế Thừa ( tiếp theo )Tính Thừa kếLà cơ chế cho phép một lớp chia sẻ những thuộc tính và những hành động đã định nghĩa trong một hoặc nhiều lớp khácLớp conLà lớp thừa kế từ lớp khácLớp chaLà lớp từ đó một lớp khác thừa kế các ứng xử của nó Đa thừa kếKhi một lớp con thừa kế từ hai hoặc nhiều lớpTính Đa HìnhTextLinePictureHow are you?Hành động DisplayTính đa hình là thuộc tính cho phép một hành động ứng xử khác nhau trên các lớp khác nhauCác ưu điểm của phương pháp hướng đối tượngChia sẻ trong phạm vi một ứng dụngĐẩy mạnh sự dùng lại của các đối tượng khi hiện thực những ứng dụng mớiVề lâu dài, chi phí giảm đáng kểGiảm lỗi và rắc rối trong bảo trìĐiều chỉnh nhanh hơnTỔNG KẾTTiếp cận hướng đối tượng đưa ra một giải pháp toàn diện cho một bài toán cụ thểTrừu tượng dữ liệu là một tiến trình xác định và tập hợp các tính chất và các hành động có quan hệ với một thực thể cụ thểLớp mô tả một thực thể, còn đối tượng là một thực thể thực tếConstructor và DestructorTính lưu trữ, bao bọc dữ liệu, tính kế thừa và đa hìnhChương 1Giới thiệu ngôn ngữ lập trình JavaGiới thiệuSự phát triển của JavaHướng tới người dùngGiống với C / C++Các đặc trưng của JavaĐơn giảnHướng đối tượngĐộc lập phần cứngMạnhBảo mậtPhân tánĐa luồngĐộngCác chương trình dịch truyền thốngChương trình dịch Java Java Translation and ExecutionJava sourcecodeMachinecodeJavabytecodeJavainterpreterBytecodecompilerJavacompiler28Các loại chương trình JavaAppletsỨng dụng độc lập (console Application)Ứng dụng giao diện (GUI Application)ServletỨng dụng cơ sở dữ liệu Máy ảo Java Là một phần mềm dựa trên cơ sở máy tính ảoLà tập hợp các lệnh logic để xác định hoạt động của máy tínhĐược xem như là một hệ điều hành thu nhỏNó thiết lập lớp trừu tượng cho:Phần cứng bên dướiHệ điều hànhMã đã biên dịchQuá trình dịch chương trình JavaTrình biên dịch chuyển mã nguồn thành tập các lệnh không phụ thuộc vào phần cứng cụ thểTrình thông dịch trên mỗi máy chuyển tập lệnh này thành chương trình thực thiMáy ảo tạo ra một môi trường để thực thi các lệnh bằng cách: Nạp các file .classQuản lý bộ nhớ Dọn “rác”Trình dịch JavaJava Development Kit Java 1.0 - Sử dụng lần đầu vào năm 1995Java 1.1 – Đưa ra năm 1997 Java 2 – ..............Bộ công cụ JDKTrình biên dịch, 'javac' javac [options] sourcecodename.javaTrình thông dịch, 'java' java [options] classname Trình dịch ngược, 'javap' javap [options] classname Công cụ sinh tài liệu, 'javadoc' javadoc [options] sourcecodename.javaChương trình tìm lỗi - Debug, 'jdb‘jdb [options] sourcecodename.java ORjdb -host -password [options] sourcecodename.javaChương trình xem Applet , 'appletviewer‘appletviewer [options] sourcecodename.java / urlCác gói chuẩn của Javajava.lang – General supportjava.applet - Creating applets for the webjava.awt - Graphics and graphical user interfacesjava.iojava.util – Utilities(tien-ich)java.net - Network communicationjava.awt.eventjava.rmijava.security java.sqlChương 2Các kiến thức cơ bản - Cấu trúc chương trình của ngôn ngữ JavaCấu trúc một chương trình JavaXác lập thông tin môi trườngKhai báo lớp đối tượng (Class)Các thành phần (Tokens):Định danh Từ khóa / từ dự phòngKý tự phân cách Hằng (Literals)Toán tửJava Program Structurepublic class MyProgram{}public static void main (String[] args){}// comments about the class// comments about the methodmethod headermethod body38Ví dụ một chương trình Java mẫu// This is a simple program called “Ex1.java”// import java.lang.*;class Ex1{ public static void main(String args[]) { System.out.println(“My first program in Java”); }}Biên dịch chương trình java..\jdk\bin>javac Ex1.java..\jdk\bin>java Ex1 Kết quả:My first program in Java Truyền đối số dòng lệnh class Ex2{ public static void main(String parameters[]) { System.out.println(parameters[0]); System.out.println(parameters[1]); System.out.println(parameters[2]); }}Truyền đối số trong dòng lệnh (Tiếp theo)Các phần tử cơ bản của ngôn ngữ Java Lớp và phương thức (Classes & Methods)Kiểu dữ liệuBiến sốToán tửCấu trúc điều khiểnLớp trong Javapublic class MyProgram{}// comments about the classclass headerclass bodyComments can be added almost anywhere44Lớp trong Java Cú pháp khai báo lớp (Class)class tênlớp { kiểu tênbiến; : met_datatype tênphươngthức(dsthamsố) :}Các lớp nội (Nested Classes)Một lớp được định nghĩa bên trong một lớp khác. Lớp đó được gọi là “lớp nội” (Nesting)Các kiểu lớp nội:StaticNon-staticKiểu dữ liệuKiểu dữ liệu cơ sở (Primitive Data Types)Kiểu dữ liệu tham chiếu (Reference data types)Kiểu dữ liệu cơ sởbytecharbooleanshortintlongfloatdoubleKiểu dữ liệu cơ sở4 kiểu integers:byte, short, int, long2 kiểu số thực:float, double1 kiểu characters:char1 kiểu boolean :booleanKiểu dữ liệu cơ sởTypebyteshortintlongfloatdoubleStorage8 bits16 bits32 bits64 bits32 bits64 bitsMin Value-128-32,768-2,147,483,648 9 x 1018CharactersCharacter literals are delimited by single quotes:'a' 'X' '7' '$' ',' '\n'The ASCII characters :uppercase letterslowercase lettersPunctuationdigitsspecial symbolscontrol charactersA, B, C, a, b, c, period, semi-colon, 0, 1, 2, &, |, \, carriage return, tab, ...51BooleanA boolean value represents a true or false conditionA boolean can also be used to represent any two states, such as a light bulb being on or offThe reserved words true and false are the only valid values for a boolean typeboolean done = false;52Kiểu dữ liệu tham chiếuMảng (Array)Lớp (Class)InterfaceÉp kiểu (Type Casting)Kiểu dữ liệu này được chuyển đổi sang một kiểu dữ liệu khácVí dụ float c = 34.89675f;int b = (int)c + 10; Biến sốCú phápdatatype identifier [=value][, identifier[=value]...]; Khai báo biến số gồm 3 thành phần: Kiểu dữ liệu của biến số Tên biến Giá trị ban đầu của biến (không bắt buộc)Bộ từ khóa của JavaKhai báo mảngBa cách để khai báo mảng:datatype identifier [ ]; datatype identifier [ ] = new datatype[size]; datatype identifier [ ]= {value1,value2,.valueN}; Phương thức (Methods in Classes)Phương thức được định nghĩa như là một hành động hoặc một tác vụ thật sự của đối tượngCú pháp access_specifier modifier datatype method_name(parameter_list){ //body of method} Ví dụ về sử dụng phương thứcclass Ex3 { int x = 10; // variable public void show( ) { // method System.out.println(x); } public static void main(String args[ ]) { Ex3 t = new Ex3( ); // tao doi tuong t t.show( ); // method call Ex3 t1 = new Ex3( ); // tao doi tuong t1 t1.x = 20; t1.show( ); }}Các chỉ định truy xuất của phương thức (Access specifiers)Công cộng (public)Riêng tư (private)Bảo vệ (protected)Những phương thức được nạp chồng :(Methods Overloading)Những phương thức được nạp chồng :Cùng ở trong một lớpCó cùng tên Khác nhau về danh sách tham sốNhững phương thức được nạp chồng là một hình thức đa hình trong quá trình biên dịch (compile time)Ghi đè phương thức (Methods Overriding)Những phương thức được ghi đè: Có mặt trong lớp cha (superclass) cũng như lớp kế thừa (subclass)Được định nghĩa lại trong lớp kế thừa (subclass) Những phương thức được ghi đè là một hình thức đa hình trong quá trình thực thi (Runtime)Phương thức khởi tạo(Class Constructors)Là một phương thức đặc biệt dùng để khởi tạo giá trị cho các biến thành viên của lớp đối tượngCó cùng tên với tên lớp và không có giá trị trả vềĐược gọi khi đối tượng được tạo raCó 2 loại:Tường minh (Explicit constructors)Ngầm định (Implicit constructors)Phương thức khởi tạo của lớp dẫn xuất (Derived class constructors)Có cùng tên với lớp dẫn xuất (subclass)Nếu ở lớp dẫn xuất muốn gọi hàm constructor của lớp cơ sở thì câu lệnh gọi hàm constructor của lớp cơ sở phải là câu lệnh đầu tiên trong hàm constructor của lớp dẫn xuất - dùng từ khoá super Các toán tửCác loại toán tử:Toán tử số học (Arithmetic operators)Toán tử dạng Bit (Bitwise operators)Toán tử so sánh (Relational operators)Toán tử logic (Logical operators)Toán tử điều kiện (Conditional operator)Toán tử gán (Assignment operator)Toán tử số họcArithmetic Operators+ Addition (Phép cộng)- Subtraction (Phép trừ)* Multiplication (Phép nhân)/ Division (Phép chia)% Modulus (Lấy số dư)++ Increment (Tăng dần)-- Decrement (Giảm dần)+= Phép cộng và gán-= Phép trừ và gán*= Phép nhân và gán/= Phép chia và gán%= Phép lấy số dư và gánToán tử Bit (Bitwise Operators)~ Phủ định (NOT)& Và (AND)| Hoặc (OR)^ Exclusive OR (XOR)>> Dịch sang phải (Shift right) Lớn hơn= Lớn hơn hoặc bằngToán tử Logic(Logical Operators )&& Logical AND|| Logical OR! Logical unary NOTToán tử điều kiện(Conditional Operator)Cú pháp Biểu thức 1 ? Biểu thức 2 : Biểu thức 3; Biểu thức 1 Điều kiện kiểu Boolean trả về giá trị True hoặc FalseBiểu thức 2 Trả về giá trị nếu kết quả của mệnh đề 1 là TrueBiểu thức 3 Trả về giá trị nếu kết quả của mệnh đề 1 là FalseToán tử gán(Assignment Operator)= Assignment (Phép gán)Giá trị có thể được gán cho nhiều biến sốVí dụa = b = c = d = 90;Thứ tự ưu tiên của các toán tử Thứ tự của các toán tử có thể được thay đổi bằng cách sử dụng các dấu ngoặc đơn trong mệnh đềThứ tựToán tử1.trong ngoặc tính trước2.Các toán tử đơn như +,-,++,--3.Các toán tử số học và các toán tử dịch như *,/,+,-,>4.Các toán tử quan hệ như >,=,Ngược lại, khi cần loại ra khỏi phần tử chứa một thành phần giao diện thì sử dụng các hàm sau: void remove(int index) void remove(Component comp) void removeAll()Lớp FlowLayoutLớp FlowLayout có các hàm tạo lập để sắp hàng các thành phần giao diện: FlowLayout() FlowLayout(int aligment) FlowLayout(int aligment, int horizongap, int verticalgap) public static final int LEFT public static final int CENTER public static final int RIGHT Lớp GridLayoutLớp GridLayout cung cấp các hàm tạo lập để sắp hàng các thành phần giao diện:GridLayout()GridLayout(int rows, int columns)GridLayout(int rows, int columns, int hoiongap, int verticalgap)Tạo ra một lưới hình chữ nhật có rows columns ô có khoảng cách giữa các hàng các cột là horizongap, verticalgap. Một trong hai đối số rows hoặc columns có thể là 0, nhưng không thể cả hai, GridLayout(1,0) là tạo ra lưới có một hàng.Ví dụ: Mô tả cách sử dụng GridLayoutimport java.awt.*;import java.applet.*;public class GridLayoutApplet extends Applet { public void init() { //Cread a list of colors Label xLabel = new Label("X coordinate: "); Label yLabel = new Label("Y coordinate: "); TextField xInput = new TextField(5); TextField yInput = new TextField(5); // Tạo ra lưới hình chữ nhật có 4 ô và đặt layout để sắp xếp các thành phần // xLabel, xInput, yLabel, yInput setLayout(new GridLayout(2,2)); add(xLabel); // Đặt xLabel vào ô thứ nhất add(xInput); // Đặt xInput vào ô thứ hai add(yLabel); // Đặt yLabel vào ô thứ ba add(yInput); // Đặt yInput vào ô thứ tư }}Lớp BorderLayoutLớp BorderLayout cho phép đặt một thành phần giao diện vào một trong bốn hướng: bắc (NORTH), nam (SOUTH), đông (EAST), tây (WEST) và ở giữa (CENTER). BorderLayout() BorderLayout(int horizongap, int verticalgap) Tạo ra một layout mặc định hoặc có khoảng cách giữa các thành phần (tính bằng pixel) là horizongap theo hàng và verticalgap theo cột. Trường hợp mặc định là CENTER, ngược lại, có thể chỉ định hướng để đặt các thành phần comp vào phần tử chứa theo constraint là một trong các hằng trên.Ví dụ: Đặt một nút Button có tên “Vẽ” ở trên (NORT), trường văn bản “Hiển thị thông báo” ở dưới (SOUTH) và hai thanh trượt (SCROLLBAR) ở hai bên cạnh (WEST và EAST).import java.awt.*;import java.applet.*;public class BorderLayoutApplet extends Applet { public void init() { TextField msg = new TextField("Hien thi thong bao"); msg.setEditable(false); Button nutVe = new Button("Ve"); Canvas vungVe = new Canvas(); vungVe.setSize(150, 150);// Đặt kích thước cho vungVe vẽ tranh vungVe.setBackground( Color.white); // Đặt màu nền là trắng Scrollbar sb1=new Scrollbar(Scrollbar.VERTICAL,0,10,-50,100); Scrollbar sb2=new Scrollbar(Scrollbar.VERTICAL,0,10,-50,100); setLayout(new BorderLayout()); add(nutVe, BorderLayout.NORTH);// Đặt nutVe ở trên (NORT) add(msg, BorderLayout.SOUTH); // Đặt msg ở dưới (SOUTH) add(vungVe,BorderLayout.CENTER);// Đặt vungVe ở giữa (CENTER) add(sb1, BorderLayout.WEST); // Đặt sb1 ở bên trái (WEST) add(sb2, BorderLayout.EAST); // Đặt sb2 ở bên phải (EAST) }}Xử lý sự kiệnCác ứng dụng với GUI thường được hướng dẫn bởi các sự kiện (event). Việc nhấn một nút, mở, đóng các Window hay gõ các ký tự từ bàn phím, v.v. đều tạo ra các sự kiện (event) và được gửi tới cho chương trình ứng dụng. Các sự kiện (Events) được xử lý bằng các công cụ sau:Abstract Windowing Toolkit Trình duyệt.Các trình xử lý sự kiện do người dùng tạo riêng.Các ứng dụng cần đăng ký trình xử lý sự kiện với đối tượngCác trình xử lý này được gọi khi có một sự kiện tương ứng xảy raXử lý các sự kiện Event Listener sẽ lắng nghe một sự kiện cụ thể mà một đối tượng tạo raMỗi event listener cung cấp các phương thức để xử lý các sự kiện nàyLớp có cài đặt listener cần định nghĩa những phương thức nàyXử lý các sự kiệnCác bước cần tuân thủ để sử dụng mô hình Event Listener:Cài đặt Listener tương ứngNhận diện được tất cả các thành phần tạo sự kiệnNhận diện được tất cả các sự kiện được xử lýCài đặt các phương thức của listener, và viết các đoạn mã để xử lý sự kiện trong các phương thức đóInterface định nghĩa các phương thức khác nhau để xử lý mỗi sự kiệnCác sự kiện và Listener tương ứngActionEvent AdjustmentEventComponentEventFocusEvent ItemEvent WindowEvent TextEvent MouseEvent KeyEvent ActionListener AdjustmentListenerComponentListenerFocusListener ItemListenerWindowListener TextListener MouseListenerMouseMotionListenerKeyListener Xử lý các sự kiệnTrong Java các sự kiện được thể hiện bằng các đối tượng. Lớp cơ sở nhất, lớp cha của tất cả các lớp con của các sự kiện là lớp java.util.EventObject. Các lớp con của AWTEvent được chia thành hai nhóm:1. Các lớp mô tả về ngữ nghĩa của các sự kiện2. Các lớp sự kiện ở mức thấpCác lớp xử lý sự kiệnjava.lang.Objectjava.util.EventObjectjava.awt.eventActionEventAdjustmentEventComponentEventItemEventTextEventContainerEventFocusEventInputEvent{abstract}PaintEventWindowEventKeyEventMouseEventjava.awt.AWTEvent 1. Các lớp ngữ nghĩaa/ ActionEvent Sự kiện này được phát sinh bởi những hoạt động thực hiện trên các thành phần của GUI. Các thành phần gây ra các sự kiện hành động bao gồm: Button - khi một nút button được kích hoạt List - khi một mục trong danh sách được kích hoạt đúp MenuItem - khi một mục trong thực đơn được chọn TextField - khi gõ phím ENTER trong trường văn bản (text). Lớp ActionEvent có các hàm: String getActionCommand() Cho biết tên của lệnh tương ứng với sự kiện xảy ra, là tên của nút, mục hay text. b/ AdjustmentEvent Thành phần gây ra sự kiện căn chỉnh (adjustment): Scrollbar - khi thực hiện một lần căn chỉnh trong thanh trượt Scrollbar. Lớp này có hàm: int getValue() Cho lại giá trị hiện thời được xác định bởi lần căn chỉnh sau cùng. c/ ItemEventCác thành phần của GUI gây ra các sự kiện về các mục gồm có: Checkbox - khi trạng thái của hộp kiểm tra Checkbox thay đổi CheckboxMenuItem - khi trạng thái của hộp kiểm tra Checkbox ứng với mục của thực đơn thay đổi, Choice - khi một mục trong danh sách được chọn hoặc bị loại bỏ List - khi một mục trong danh sách được chọn hoặc bị loại bỏ.Lớp ItemEvent có hàm: Object getItem() Cho lại đối tượng được chọn hay vừa bị loại bỏ.d/ TextEventCác thành phần của GUI gây ra các sự kiện về text gồm có: TextArea - khi kết thúc bằng nhấn nút ENTER, TextField - khi kết thúc bằng nhấn nút ENTER. Kiểu sự kiệnNguồn gây ra sự kiệnCác hàm đón nhận và di dời các sự kiệnGiao diện Listener tương ứngAcitionEvent AdjustmentEvent ItemEvent TextEventButtonListTexFieldScrollbar ChoiceCheckboxCheckboxMenuItemListTextAreaTexFieldaddComponentlistener remove ActiontListener addAdjustmentListenerremoveAdjustmentListener addItemListenerremoveItemListener addTexListener removeTextListenerAcitionListener AdjustmentListener ItemListener TextListener2. Các sự kiện ở mức thấpa/ ComponentEvent Sự kiện này xuất hiện khi một thành phần bị che giấu, hiển thị hay thay đổi lại kích thước. Lớp ComponentEvent có hàm: Component getComponent() Cho lại đối tượng tham chiếu kiểu Component.b/ ContainerEvent Sự kiện này xuất hiện khi một thành phần được bổ sung hay bị loại bỏ khỏi phần tử chứa (Container). c/ FocusEvent Sự kiện này xuất hiện khi một thành phần nhận được một nút từ bàn phím.d/ KeyEvent Lớp KeyEvent là lớp con của lớp trừu tượng InputEvent được sử dụng để xử lý các sự kiện liên quan đến các phím của bàn phím. int getKeyCode() Đối với các sự kiện KEY_PRESSED hoặc KEY_RELEASED, hàm này được sử dụng để nhận lại giá trị nguyên tương ứng với mã của phím trên bàn phím. char getKeyChar() Đối với các sự kiện KEY_PRESSED, hàm này được sử dụng để nhận lại giá trị nguyên, mã Unicode tương ứng với ký tự của bàn phím. e/ MouseEvent Lớp MouseEvent là lớp con của lớp trừu tượng InputEvent được sử dụng để xử lý các tín hiệu của chuột. Lớp này có các hàm: int getX() int getY() Point getPoint() Các hàm này được sử dụng để nhận lại tọa độ x, y của vị trí liên quan đến sự kiện do chuột gây ra. void translatePoint(int dx, int dy) Hàm translate() được sử dụng để chuyển tọa độ của sự kiện do chuột gây ra đến (dx, dy). int getClickCount() Hàm getClickCount() đếm số lần kích chuột.f/ PaintEvent Sự kiện này xuất hiện khi một thành phần gọi hàm paint()/ update() để vẽ.g/ WindowEvent Sự kiện loại này xuất hiện khi thao tác với các Window. Lớp này có hàm: Window getWindow() Hàm này cho lại đối tượng của lớp Window ứng với sự kiện liên quan đến Window đã xảy ra.Các hàm xử lý các sự kiện ở mức thấp Kiểu sự kiệnNguồn gây ra sự kiệnCác hàm đón nhận và di dời các sự kiệnGiao diện Listener tương ứngComponentEvent ContainerEvent FocusEvent KeyEvent MouseEvent WindowEventComponent Container Component Component Component WindowaddComponentListener removeComponentListeneraddContainerListenerremoveContainerListeneraddFocusListenerremoveFocusListeneraddkeyListenerremoveKeyListeneraddMouseListenerremoMouseListeneraddMouseMotionListenerremoMouseMotionListeneraddWindowListenerremoveWindowListenerComponentListener ContainerListener FocusListener KeyListener MouseMotionListener WindowListenerVí dụ: Xây dựng ứng dụng có giao diện đồ họa GUI import java.awt.*;import java.awt.event.*;import java.applet.*;interface IGeometryConstants { // Định nghĩa Interface gồm các hằng cho trước int SQUARE = 0; int CIRCLE = 1; int ELLIPSE = 2; String[] shapeNames = {"Square", "Circle" , "Ellipse"}; int SMALL = 0; int MEDIUM = 1; int LARGE = 2; String[] sizeNames = {"Small", "Medium" , "Large"};}public class DemoApplet extends Applet implements IGeometryConstants { // Khai báo một Panel để chứa các Checkbox tương ứng với các loại hình shape Panel shapePanel;// Khai báo một Panel CheckboxGroup shapeCBG; // Khai báo một CheckboxGroup Checkbox squareCB; // Khai báo một Checkbox ứng với hình vuông Checkbox circleCB; // Khai báo một Checkbox ứng với hình tròn Checkbox ellipseCB; // Khai báo một Checkbox ứng với hình ellipse // Khai báo một Panel để chứa các Label và các TextField Panel xyPanel; // Khai báo một Panel xyPanel Label xLabel; // Khai báo một Label xLabel TextField xInput; // Khai báo một TextField xInput Label yLabel; // Khai báo một Label yLabel TextField yInput; // Khai báo một TextField yInput180 // Khai báo một Panel để chứa các Label , Choice và Checkbox Panel sizePanel; Label sizeLabel; Choice sizeChoices; Checkbox fillCB; // Khai báo một Panel để chứa shape, coordinates, size and fill Panel leftPanel Panel leftPanel; // Khai báo một Panel để chứa Massage display, draw button and canvas Panel rightPanel; Button drawButton; DrawRegion drawRegion; TextField messageDisplay; // Định nghĩa lại hàm init() public void init() { makeShapePanel(); makeXYPanel(); makeSizePanel(); makeLeftPanel(); makeRightPanel(); // Gọi hàm xử lý các sự kiện addListeners(); // Đưa các Panel vào hệ thống add(leftPanel); add(rightPanel); }// Đưa các thành phần về các shape vào shapePanel void makeShapePanel() { shapePanel = new Panel(); shapeCBG = new CheckboxGroup(); squareCB = new Checkbox(shapeNames[SQUARE], shapeCBG, true); circleCB = new Checkbox(shapeNames[CIRCLE], shapeCBG, false); ellipseCB = new Checkbox(shapeNames[ELLIPSE], shapeCBG, false); shapePanel.setLayout(new FlowLayout()); shapePanel.add(squareCB); shapePanel.add(circleCB); shapePanel.add(ellipseCB); }// Đưa các thành phần về các x,y coordinates vào xyPanel void makeXYPanel() { xyPanel = new Panel(); xLabel = new Label("X Coordinate:"); yLabel = new Label("Y Coordinate:"); xInput = new TextField(5); yInput = new TextField(5); xyPanel.setLayout(new GridLayout(2,2)); xyPanel.add(xLabel); xyPanel.add(xInput); xyPanel.add(yLabel); xyPanel.add(yInput); }// Đưa các thành phần về size và fill vào sizePanelvoid makeSizePanel() { sizePanel = new Panel(); sizeLabel = new Label("Size:"); sizeChoices = new Choice(); sizeChoices.add(sizeNames[0]); sizeChoices.add(sizeNames[1]); sizeChoices.add(sizeNames[2]); fillCB = new Checkbox("Fill", false); sizePanel.setLayout(new FlowLayout()); sizePanel.add(sizeLabel); sizePanel.add(sizeChoices); sizePanel.add(fillCB); }// Đưa các thành phần vào leftPanel void makeLeftPanel(){ leftPanel = new Panel(); leftPanel.setLayout(new BorderLayout()); leftPanel.add(shapePanel, "North"); leftPanel.add(xyPanel, "Center"); leftPanel.add(sizePanel, "South"); }// Đưa các thành phần vào rightPanelvoid makeRightPanel(){ rightPanel = new Panel(); messageDisplay = new TextField("MESSAGE DISPLAY"); messageDisplay.setEditable(false); messageDisplay.setBackground(Color.yellow); drawButton = new Button("Draw"); drawButton.setBackground(Color.lightGray); drawRegion = new DrawRegion(); drawRegion.setSize(150, 150); drawRegion.setBackground(Color.white); rightPanel.setLayout(new BorderLayout()); rightPanel.add(drawButton, BorderLayout.NORTH); rightPanel.add(messageDisplay, BorderLayout.SOUTH); rightPanel.add(drawRegio
File đính kèm:
- baigiangjava.ppt