Giáo trình Lập trình Java - Trình độ: Cao đẳng - Trường Cao đẳng kinh tế kỹ thuật Thành phố Hồ Chí Minh

pdf 91 trang Gia Huy 17/05/2022 4200
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Lập trình Java - Trình độ: Cao đẳng - Trường Cao đẳng kinh tế kỹ thuật Thành phố Hồ Chí Minh", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_lap_trinh_java_trinh_do_cao_dang_truong_cao_dang.pdf

Nội dung text: Giáo trình Lập trình Java - Trình độ: Cao đẳng - Trường Cao đẳng kinh tế kỹ thuật Thành phố Hồ Chí Minh

  1. ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG CAO ĐẲNG KINH TẾ KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH  GIÁO TRÌNH MÔN HỌC: LẬP TRÌNH JAVA NGÀNH: HỆ THỐNG THÔNG TIN TRÌNH ĐỘ: CAO ĐẲNG (Ban hành kèm theo Quyết định số: /QĐ-CĐKTKT ngày tháng năm 20 của Hiệu trưởng Trường Cao đẳng Kinh tế - Kỹ thuật Thành phố Hồ Chí Minh) Thành phố Hồ Chí Minh, năm 2020
  2. ỦY BAN NHÂN DÂN THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG CAO ĐẲNG KINH TẾ KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH  GIÁO TRÌNH MÔN HỌC: LẬP TRÌNH JAVA NGÀNH: HỆ THỐNG THÔNG TIN TRÌNH ĐỘ: CAO ĐẲNG THÔNG TIN CHỦ NHIỆM ĐỀ TÀI Họ tên: Thái Thị Ngọc Lý Học vị: Thạc sĩ Đơn vị: Khoa Công nghệ thông tin Email: thaithingocly@hotec.edu.vn TRƯỞNG KHOA TỔ TRƯỞNG CHỦ NHIỆM BỘ MÔN ĐỀ TÀI HIỆU TRƯỞNG DUYỆT Thành phố Hồ Chí Minh, năm 2020
  3. BM31/QT02/NCKH&HTQT TUYÊN BỐ BẢN QUYỀN Tài liệu này thuộc loại sách giáo trình nên các nguồn thông tin có thể được phép dùng nguyên bản hoặc trích dùng cho các mục đích về đào tạo và tham khảo. Mọi mục đích khác mang tính lệch lạc hoặc sử dụng với mục đích kinh doanh thiếu lành mạnh sẽ bị nghiêm cấm.
  4. BM31/QT02/NCKH&HTQT LỜI GIỚI THIỆU Giáo trình được biên soạn nhằm hỗ trợ tài liệu cho học sinh, sinh viên học môn Lập trình Java. Giáo trình gồm bốn phần chính giới thiệu về lịch sử java, các khái niệm cơ bản trong java, thiết kế giao diện và lập trình cơ sở dữ liệu với ngôn ngữ java. Phần mềm được dùng để học ngôn ngữ Java là NetBean được sử dụng trong giáo trình này. Học xong môn học này, học sinh và sinh viên có thể tạo được một chương trình java cơ bản trong console, thiết kế được giao diện ứng dụng dành cho desktop và kết nối được cơ sở dữ liệu cho ứng dụng. Xin cám ơn. ., ngày tháng năm Tham gia biên soạn Chủ biên
  5. BM31/QT02/NCKH&HTQT MỤC LỤC GIÁO TRÌNH MÔN HỌC 6 CHƯƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH JAVA 7 1.1 Lịch sử ra đời của java 7 1.2 Đặc điểm ngôn ngữ lập trình Java 7 1.3 Các công nghệ của Java 8 1.4 Các ứng dụng của Ngôn ngữ lập trình Java 9 1.5 Java Core API - Môi trường làm việc của java 10 1.6 Cài đặt và hướng dẫn sử dụng NetBeans 10 CHƯƠNG 2: LẬP TRÌNH CƠ BẢN VỚI JAVA 12 2.1 Kiến trúc Java 12 2.2 Các kiểu dữ liệu 13 2.3 Các toán tử 14 2.4 Các cấu trúc điều khiển 16 2.5 Mảng, chuỗi, lớp bao kiểu dữ liệu cơ sở 21 2.6 Xử lý ngoại lệ 27 2.7 Lập trình luồng nhập xuất 28 CHƯƠNG 3: XÂY DỰNG GIAO DIỆN NGƯỜI DÙNG 34 3.1 Cấu trúc chung của giao diện 34 3.2 Giới thiệu gói AWT và Swing 36 3.3 Trình quản lý giao diện – Layout 38 3.5 Các thành phần giao diện cơ bản 55 3.6 Xử lý sự kiện giao diện người dùng 60 CHƯƠNG 4: LẬP TRÌNH CƠ SỞ DỮ LIỆU 69 4.1 Giới thiệu JDBC 69 4.2 Kiến trúc JDBC 69 4.3 Lập trình kết nối đến CSDL 72 4.4 Thao tác xử lý trên CSDL 74 DANH MỤC HÌNH ẢNH 88 DANH MỤC BẢNG 91
  6. BM31/QT02/NCKH&HTQT GIÁO TRÌNH MÔN HỌC Tên môn học: LẬP TRÌNH JAVA Mã môn học: MH3101348 Thời gian thực hiện môn học: 75 giờ; (Lý thuyết: 15 giờ; Thực hành: 56 giờ; Kiểm tra: 4 giờ) Đơn vị quản lý môn học: Khoa Công Nghệ Thông Tin. I. Vị trí, tính chất của môn học: - Vị trí: là môn học chuyên ngành, học kỳ 4. - Tính chất: môn lý thuyết, môn học bắt buộc. II. Mục tiêu môn học: - Về kiến thức: + Trình bày được các khái niệm cơ bản về ngôn ngữ lập trình Java. + Mô tả các thành phần của trong ngôn ngữ lập trình Java (kiểu dữ liệu, toán tử, cấu trúc điều khiển, v.v ) + Trình bày chức năng và công dụng của các gói dùng để tạo giao diện trên Java. + So sánh ưu, nhược điểm của ngôn ngữ lập trình Java với những ngôn ngữ lập trình. - Về kỹ năng: + Tạo chương trình Java console đơn giản. + Xây dựng chương trình Java có sử dụng giao diện đồ họa người dùng (GUI). + Xây dựng ứng dụng quản lý đơn giản trên Java có sử dụng cơ sở dữ liệu. - Về năng lực tự chủ và trách nhiệm: + Nhận thức được tầm quan trọng của ngôn ngữ lập trình Java khi phát triển ứng dụng. + Nâng cao năng lực tự nghiên cứu, tự tìm hiểu trong quá trình học tập.
  7. Chương 1: Tổng quan về ngôn ngữ lập trình Java CHƯƠNG 1: TỔNG QUAN VỀ NGÔN NGỮ LẬP TRÌNH JAVA Giới thiệu: Giới thiệu tiểu sử của ngôn ngữ lập trình Java, đặc điểm, công nghệ Java. Mục tiêu: - Biết được lịch sử hình thành ngôn ngữ Java. - Biết được các đặc điểm của ngôn ngữ Java. - Cài đặt và sử dụng được NetBeans. 1.1 Lịch sử ra đời của java Java là một ngôn ngữ lập trình và là một nền tảng. Java là một ngôn ngữ cấp cao, mạnh mẽ, hướng đối tượng và an toàn. Năm 1991, ngôn ngữ lập trình Java có tên là Oak do tập đoàn Sun Microsystem phát triển đó là một ngôn ngữ được kế thừa từ C/C++. James Gosling là cha đẻ của ngôn ngữ này. Năm 1995, được đổi tên thành ngôn ngữ lập trình Java bởi vì tại thời điểm đó thì Oak đã được thông báo là đã bị đăng ký bản quyền nhãn hiệu. Java là tên một hòn đảo của Indonesia đây là một hòn đảo nổi tiếng về Coffee Peet và các loại đồ uống dành cho các kỹ sư của Sun. Năm 2010, hãng Oracle đã mua lại Sun Microsystem. Nền tảng là bất kỳ môi trường phần cứng hoặc phần mềm nào mà trên đó một chương trình hoặc phần mềm chạy. Vì Java có môi trường runtime (JRE) và API nên nó được gọi là nền tảng. 1.2 Đặc điểm ngôn ngữ lập trình Java Ngôn ngữ Java có các đặc trưng: – Đơn giản: Java đã cải tiến dễ dàng hơn bằng cách loại bỏ tất cả các phức tạp như con trỏ, các toán tử, phương thức nạp chồng (overload)như bạn thấy trong C ++ hoặc bất kỳ ngôn ngữ lập trình nào khác. – Hướng đối tượng: Mọi thứ được coi là một đối tượng khác nhau, có sở hữu các thuộc tính và tất cả các hoạt động được thực hiện bằng cách sử dụng các đối tượng này. – Độc lập: Java độc lập với nền tảng, có nghĩa là mọi ứng dụng được viết trên một nền tảng đều có thể dễ dàng chuyển sang nền tảng khác. KHOA CÔNG NGHỆ THÔNG TIN 7
  8. Chương 1: Tổng quan về ngôn ngữ lập trình Java – Mạnh mẽ: Java có một hệ thống quản lý bộ nhớ mạnh. Nó giúp loại bỏ lỗi vì nó kiểm tra Code trong quá trình biên dịch và runtime. – Bảo mật: Tất cả các mã được chuyển đổi sang byteCode sau khi biên dịch, không thể đọc được bởi con người và chạy các chương trình bên trong Sandbox để ngăn chặn mọi hoạt động từ các nguồn không đáng tin cậy. Nó cho phép phát triển các hệ thống / ứng dụng không có virus, giả mạo. – Phân tán: Java cung cấp một tính năng giúp tạo các ứng dụng phân tán. Sử dụng phương thức từ xa(RMI), một chương trình có thể gọi một phương thức của một chương trình khác thông qua và nhận được đầu ra. Bạn có thể truy cập các file bằng cách gọi các phương thức từ bất kỳ máy nào trên internet. – Đa luồng: Java hỗ trợ nhiều luồng thực thi, bao gồm một tập hợp các nguyên hàm đồng bộ hóa. Điều này làm cho lập trình với các chủ đề dễ dàng hơn nhiều. – Linh hoạt: Nó có khả năng thích ứng với môi trường phát triển hỗ trợ cấp phát bộ nhớ động do giảm lãng phí bộ nhớ và hiệu suất của ứng dụng được tăng lên. – Hiệu suất cao: Java đạt được hiệu suất cao thông qua việc sử dụng byteCode có thể dễ dàng dịch sang mã máy. Với việc sử dụng các trình biên dịch JIT (Just-In-Time), Java mang lại hiệu năng cao. – Thông dịch: Java được biên dịch thành byteCode, được thông dịch bởi môi trường Java run-time. 1.3 Các công nghệ của Java 1. JVM (Java Virtual Machine) JVM là máy ảo giúp máy tính chạy các chương trình Java. Đây là môi trường giúp cho byteCode java có thể thực thi. Nó là một cỗ máy trừu tượng. Đây là một đặc tả cung cấp một môi trường thời gian chạy trong đó mã byte Java có thể được thực thi. Nó theo ba ký hiệu: – Specification: Đây là một tài liệu mô tả việc triển khai máy ảo Java. Nó được cung cấp bởi Sun và các công ty khác. – Implementation (Triển khai): Đây là một chương trình đáp ứng các yêu cầu của đặc tả JVM. – Instance Runtime: Một thể hiện của JVM được tạo bất cứ khi nào bạn viết lệnh java trên dấu nhắc lệnh và chạy các lớp. 2. JRE (Java Runtime Environment) JRE (là viết tắt của Java Runtime Environment) được sử dụng để cung cấp môi trường để các byteCode có thể thực thi. Nó là trình triển khai của JVM và cung cấp các lớp KHOA CÔNG NGHỆ THÔNG TIN 8
  9. Chương 1: Tổng quan về ngôn ngữ lập trình Java thư viện hoặc các file khác mà JVM sử dụng khi chạy. Vì vậy, JRE là gói phần mềm chứa những gì được yêu cầu để chạy chương trình Java. Về cơ bản. 3. JDK (Bộ phát triển Java) Đây là công cụ cần thiết để: – Biên dịch – Tài liệu – Đóng gói chương trình Java. JDK bao gồm JRE và các Development Tool các công cụ lập trình cho các lập trình viên Java. Bộ công cụ phát triển Java được cung cấp miễn phí. Cùng với JRE, nó bao gồm trình thông dịch / trình tải, trình biên dịch (javac), trình lưu trữ (jar), trình tạo tài liệu (Javadoc) và các công cụ khác cần thiết trong phát triển Java. Nói tóm lại, nó chứa các công cụ phát triển JRE +. Hình 1.1: JDK - Nguồn [4] 1.4 Các ứng dụng của Ngôn ngữ lập trình Java Sử dụng lập trình ngôn ngữ Java để tạo ra 4 loại ứng dụng sau: 1) Standalone Application Ứng dụng Standalone là các ứng dụng dành cho desktop hoặc ứng dụng dựa trên hệ điều hành window. Các phần mềm này cần phải được cài vào trên mỗi máy tính. Ví dụ cho ứng dụng Standalone là Media player, antivirus, etc. AWT and Swing trong Java được dùng để tạo ứng dụng standalone. KHOA CÔNG NGHỆ THÔNG TIN 9
  10. Chương 1: Tổng quan về ngôn ngữ lập trình Java 2) Web Application Web application là các ứng dụng trang web động được chạy trên server. Hiện nay, các công nghệ Servlet, JSP, Struts, Spring, Hibernate, JSF, được dùng để tạo ra các ứng dụng web. 3) Enterprise Application Enterprise applications được gọi là ứng dụng doanh nghiệp. Một ứng dụng được phân phối trong các hoạt động kinh doanh, chẳng hạn như ứng dụng ngân hàng, v.v. Nó có ưu điểm là bảo mật cấp cao, cân bằng tải và phân cụm. Trong Java, EJB được sử dụng để tạo các ứng dụng doanh nghiệp. 4) Mobile Application Mobile application là ứng dụng được tạo ra dành cho thiết bị di động. Hiện nay, Android and Java ME được sử dụng để tạo ra các ứng dụng di động. 1.5 Java Core API - Môi trường làm việc của java API là các phương thức, giao thức kết nối với các thư viện và ứng dụng khác. Nó là viết tắt của Application Programming Interface – giao diện lập trình ứng dụng. API cung cấp khả năng cung cấp khả năng truy xuất đến một tập các hàm hay dùng. Và từ đó có thể trao đổi dữ liệu giữa các ứng dụng. API có các loại sau: Web API: là hệ thống API được sử dụng trong các hệ thống website. Hầu hết các website đều ứng dụng đến Web API cho phép bạn kết nối, lấy dữ liệu hoặc cập nhật cơ sở dữ liệu. Ví dụ: Bạn thiết kế chức nằng login thông Google, Facebook, Twitter, Github Điều này có nghĩa là bạn đang gọi đến API của. Hoặc như các ứng dụng di động đều lấy dữ liệu thông qua API. API trên hệ điều hành: Windows hay Linux có rất nhiều API, họ cung cấp các tài liệu API là đặc tả các hàm, phương thức cũng như các giao thức kết nối. Nó giúp lập trình viên có thể tạo ra các phần mềm ứng dụng có thể tương tác trực tiếp với hệ điều hành. API của thư viện phần mềm hay framework: API mô tả và quy định các hành động mong muốn mà các thư viện cung cấp. Một API có thể có nhiều cách triển khai khác nhau và nó cũng giúp cho một chương trình viết bằng ngôn ngữ này có thể sử dụng thư viện được viết bằng ngôn ngữ khác. Ví dụ bạn có thể dùng Php để yêu cầu một thư viện tạo file PDF được viết bằng C++. 1.6 Cài đặt và hướng dẫn sử dụng NetBeans KHOA CÔNG NGHỆ THÔNG TIN 10
  11. Chương 1: Tổng quan về ngôn ngữ lập trình Java NetBeans IDE là một công cụ hỗ trợ lập trình viết mã code miễn phí được cho là tốt nhất hiện nay, được sử dụng chủ yếu cho các lập trình viên phát triển Java tuy nhiên phần mềm có dung lượng khá là nặng dành cho các máy cấu hình có RAM, CPU tương đối cao để vận hành. NetBeans IDE là môi trường phát triển tích hợp và cực kỳ cần thiết cho các lập trình viên, công cụ này có thể hoạt động tốt với rất nhiều nền tảng hệ điều hành khác nhau như Linux, Windows, MacOS, là một mã nguồn mở cung cấp các tính năng cần thiết nhất nhăm tại ra các ứng dụng web, thiết bị di động, desktop. Cũng giống như Eclipse vậy, NetBeans IDE hỗ trợ rất nhiều những ngôn ngữ lập trình như Python, Ruby, JavaScript, Groovy, C / C + +, và PHP. Qua nhiều phiên bản cũ, nay công cụ lập trình NetBeans IDE đã cập nhật lên phiên bản 8.2 mới nhất có rất nhiều thay đổi và nâng cấp so với các phiên bản cũ hơn có thể kể đến như: Nâng cao ngôn ngữ lập trình C và C++. Nâng cấp, cải tiến các công cụ soạn thảo Profiler và Java. Hỗ trợ Docker, PHP 7. ECMAScript 6 và hỗ trợ thử nghiệm ECMAScript 7. Nâng cấp, cải tiến HTML 5 và Javascript. Để có thể cài đặt được NetBeans IDE các bạn phải cài đặt và cấu hình sẵn JDK trong máy thì mới cài đặt được. NetBean IDE được chia thành nhiều gói khác nhau để người dùng có thể tải về từng phần, tiết kiệm dung lượng, tùy theo nhu cầu của mình. Giống với Notepad++, NetBean IDE có gợi ý cú pháp khá tốt, và còn nhiều tính năng khá thú vị như tự động căn chỉnh mã nguồn, Remote FTP, SVN . Chính vì thế, nó được xem là môi trường phát triển không thể bỏ qua cho các lập trình viên. Nếu bạn nào đang sử dụng NetBeans IDE các bạn có thể download thêm Notepad++ để tạo nên bộ đôi soạn thảo văn bản lập trình cực kỳ hiệu quả và thông minh. Tải phần mềm về máy tại Hướng dẫn cài đặt NetBeans xem tại KHOA CÔNG NGHỆ THÔNG TIN 11
  12. Chương 2: Lập trình cơ bản Java CHƯƠNG 2: LẬP TRÌNH CƠ BẢN VỚI JAVA Giới thiệu: Chương 2 trình bày kiến trúc java, giới thiệu kiểu dữ liệu, các lệnh cấu trúc và luồng nhập xuất. Mục tiêu: - Khai báo được kiểu dữ liệu, - Thực thi được một chương trình java, - Sử dụng được các lệnh cấu trúc để giải quyết bài tập, - Sử dụng được luồng nhập xuất vào bài tập. 2.1 Kiến trúc Java Khác với ngôn ngữ lập trình khác, thay vì biên dịch mã nguồn thành mã máy, Java được thiết kế biên dịch mã nguồn thành bytecode. Bytecode sau đó được môi trường thực thi chạy. Ví dụ: tạo tập tin LapTrinhJava.java có nội dung mã sau LapTrinhJava.java Hình 2.1: Ví dụ nội dung cơ bản của tập tin Java KHOA CÔNG NGHỆ THÔNG TIN 12
  13. Chương 2: Lập trình cơ bản Java hotec: tên gói (package) chứa lớp. Đặt tên gói phải sử dụng ký tự thường và dấu chấm. Có thể xem package như folder còn class như file. LapTrinhJava: tên lớp. Tên lớp phải giống tên tập tin java. Viết hoa ký tự đầu của mỗi từ. main(): phương thức bắt đầu chạy. Lớp có thể có nhiều phương thức nhưng chỉ có một main() và main() được gọi tự động khi ứng dụng chạy. LapTrinhJava.java dùng lệnh javac thì sẽ tạo ra một tập tin .class, tập tin .class này là dạng bytecode. Quá trình chuyển từ tập tin .java sang tập tin .class là quá trình biên dịch. Để tập tin .class có thể chạy được cần có một runtime environment đó là Java Virtual Machine (JVM). JVM sẽ thông dịch các đoạn bytecode (tập tin .class) và tạo ra machine code có thể chạy được trên các hệ điều hành. JVM tải toàn bộ class lên RAM bao gồm class của tập tin và class thư viện được sử dụng để khởi tạo ứng dụng. Sau đó, bytecode verifier sẽ kiểm tra lại các bytecode vừa tạo có hợp lệ không. Tiếp theo, JVM sẽ thông dịch bytecode sang mã máy và chạy. Java sẽ thông dịch bytecode, vậy thì mỗi thao tác thực hiện được lặp đi lặp lại như các class common hay util thường xuyên được sử dụng sẽ phải thông dịch mỗi khi chạy. Thế thì ứng dụng chạy chậm lắm. Tại sao lại không biên dịch các class đó sau đó dùng lại. Thế là Just In Time Compiler (JIT Compiler) ra đời. JIT Compiler nó sẽ biên dịch các bytecode đã được thực thi trong JVM và cache lại. Mỗi khi gọi đến các lệnh đã được thực thi trước đó thì sẽ gọi vào cache trong JIT Compiler. Quá trình này tiết kiệm tài nguyên và thời gian thực thi các lệnh. 2.2 Các kiểu dữ liệu Kiểu dữ liệu chia làm hai nhóm: - Kiểu dữ liệu cơ sở gồm có byte, short, int, long, float, double, boolean and char - Kiểu dữ liệu không cơ sở String, Arrays and Classes. Bảng 2.1: Kiểu dữ liệu Kiểu dữ liệu Kích thước Khả năng lưu trữ byte 1 byte -128 đến 127 short 2 bytes -32,768 đến 32,767 int 4 bytes -2,147,483,648 đến 2,147,483,647 long 8 bytes - KHOA CÔNG NGHỆ THÔNG TIN 13
  14. Chương 2: Lập trình cơ bản Java 9,223,372,036,854,775,808 đến 9,223,372,036,854,775,807 float 4 bytes lưu từ 6 đến 7 ký số thập phân double 8 bytes Lưu được 15 ký số thập phân boolean 1 bit true or false char 2 bytes Lưu 1 ký tự hoặc giá trị trong bảng ASCII Ép kiểu dữ liệu Ép kiểu dữ liệu có hai hình thức. Đó là, ép kiểu tự động và ép kiểu tường minh. Ép kiểu tự động chỉ dùng cho kiểu dữ liệu cơ sở. Ép kiểu dữ liệu cơ sở theo thứ tự byte short char int long float double. Ép kiểu tường mình là cần phải khai báo. Ví dụ: int x = 3; double y=7.8; y = x;//ép kiểu tự động x=(int)y;//ép kiểu tường minh, phần thập phân sẽ bị bỏ 2.3 Các toán tử Toán tử số học Bảng 2.2: Toán tử số học Toán tử Diễn giải Ví dụ + Phép cộng x+y - Phép trừ x-y * Phép nhân x*y / Phép chia x/y KHOA CÔNG NGHỆ THÔNG TIN 14
  15. Chương 2: Lập trình cơ bản Java % Phép lấy số dư x%y ++ Tăng một đơn vị ++x Giảm một đơn vị x Toán tử so sánh Bảng 2.3: Toán tử so sánh Toán tử Diễn giải Ví dụ == Phép bằng x==y != Phép khác x!=y > Lớn hơn x>y = Lớn hơn bằng x>=y ? : Diễn giải: Nếu biểu thức có giá trị là true thì kết quả của biểu thức là , ngược lại là . KHOA CÔNG NGHỆ THÔNG TIN 15
  16. Chương 2: Lập trình cơ bản Java Ví dụ: tìm số lớn nhất của 2 số a và b int a = 1, b = 9; int max = a > b ? a : b; 2.4 Các cấu trúc điều khiển Cấu trúc lựa chọn IF ELSE Cú pháp: if (biểu thức điều kiện 1){ //khối lệnh 1 } else if (biểu thức điều kiện 2){ //khối lệnh 2 } else { //khối lệnh N } Ý nghĩa: Chương trình sẽ kiểm tra từ điều kiện từ 1 đến N -1 nếu gặp điều kiện i đầu tiên có giá trị true thì sẽ thực hiện công việc i, ngược lại sẽ thực hiện công việc N. Ví dụ 1: Xét điểm trung bình. Nếu lớn hơn 5 thì thông báo “Đậu”. double dtb= 7; if(dtb>=5) System.out.println("Đậu."); Trong ví dụ 1, nếu dtb nhỏ hơn 5 thì Hình 2.2: Kết quả Ví dụ không xuất bất kỳ thông báo gì ra màn hình. Ví dụ 2: Xét điểm trung bình. Nếu lớn hơn 5 thì thông báo “Đậu”, ngược lại thì thông báo “Rớt”. double dtb= 4; if(dtb>=5) System.out.println("Đậu."); Hình 2.3: Kết quả ví dụ KHOA CÔNG NGHỆ THÔNG TIN 16
  17. Chương 2: Lập trình cơ bản Java else System.out.println("Rớt."); Ví dụ 3: Viết chương trình tính thuế thu nhập. Giả sử thu nhập gồm lương và thưởng. Thuế thu nhập được tính như sau: Bậc thuế Phần thu nhập tính thuế/tháng (triệu đồng) Thuế suất (%) 1 Đến 5 5 2 Trên 5 đến 10 10 3 Trên 10 đến 18 15 4 Trên 18 đến 32 20 5 Trên 32 đến 52 25 6 Trên 52 đến 80 30 7 Trên 80 35 SWITCH Cú pháp switch (biểu thức điều kiện) { case giá trị 1: // khối lệnh 1 break; case giá trị 2: // khối lệnh 2 break; default: KHOA CÔNG NGHỆ THÔNG TIN 17
  18. Chương 2: Lập trình cơ bản Java // khối lệnh N break; } Ý nghĩa: switch là các trường hợp xảy ra của một biểu thức điều kiện. So sánh giá trị của biểu thức switch với giá trị của các case. Nếu bằng với giá trị của case nào thì sẽ thực hiện công việc của case đó, ngược lại sẽ thực hiện công việc của default. Nếu công việc của case không chứa lệnh break thì case tiếp sau sẽ được thực hiện. default là tùy chọn. Ví dụ 1: Viết chương trình máy tính cơ bản cho các phép toán +, -, *, /. double a = 5, b = 7, c = -1; char phep_toan = “+”; switch(phep_toan){ case “+”: c = a + b; break; case “-”: c = a - b; break; case “*”: thiếu break c = a + b; case “/”: c = a - b; break; default: System.out.println(“Vui lòng chọn +, -, x và :”); break; KHOA CÔNG NGHỆ THÔNG TIN 18
  19. Chương 2: Lập trình cơ bản Java } Ví dụ 2: Nhập tháng và năm, xuất số ngày của tháng đó. Gợi ý: - Nhập tháng - Nhập năm - Dùng switch để kiểm tra tháng, xuất ngày theo từng tháng - Đối với tháng 2, kiểm tra năm có nhuần thì ngày là 29, ngược lại là 28. Ví dụ 3: Viết chương trình tính thuế thu nhập. Biết cách tính thuế suất như sau: Bậc Lương Thuế suất 1 5 triệu 5% 2 Trên 5 triệu đến 10 triệu 10% 3 Trên 10 triệu đến 18 triệu 15% 4 Trên 18 triệu đến 32 triệu 20% 5 Trên 32 triệu đến 52 triệu 25% 6 Trên 52 triệu đến 80 triệu 30% 7 Trên 80 triệu 35% Vòng lặp Ý nghĩa: vòng lặp dùng để làm cho một khối lệnh được gọi lại nhiều lần. FOR Cú pháp: for (khởi tạo ; điều kiện; bước nhảy){ // lệnh } Ý nghĩa: Vòng lặp bắt đầu với khởi tạo và dừng khi điều kiện không thỏa mãn. Nếu thỏa mãn điều kiện thì vòng lặp tiếp tục thực hiện với giá trị mới bằng giá trị cũ cộng bước nhảy. Ví dụ: Viết chương trình xuất ra số 1 đến 19. KHOA CÔNG NGHỆ THÔNG TIN 19
  20. Chương 2: Lập trình cơ bản Java for(int i=1;i<20;i++){ System.out.printf(“Số %d.”,i); } WHILE Cú pháp: while (điều kiện) { // lệnh } Ý nghĩa: Thực hiện công việc trong khi biểu thức điều kiện có giá trị là true. Ví dụ: Viết chương trình xuất ra số 1 đến 19. int i = 1; while (i < 20) { System.out.println(“Số %d.”,i); i++; } DO WHILE Cú pháp: do { // công việc } while (điều kiện); Ý nghĩa: Tương tự lệnh lặp while chỉ khác ở chỗ điều kiện được kiểm tra sau, nghĩa là công việc được thực hiện ít nhất 1 lần. Ví dụ: Viết chương trình chỉ cho nhập số nguyên dương. int so = -1; do { so = scanner.nextDouble(); } while (so < 0); KHOA CÔNG NGHỆ THÔNG TIN 20
  21. Chương 2: Lập trình cơ bản Java LỆNH BREAK & CONTINUE - break dùng để ngắt lệnh lặp. - continue dùng để thực hiện lần lặp tiếp theo ngay lặp tức. Ví dụ: Viết chương trình kiểm tra điểm nhập vào trong khoản 0 10. int diem = 0; while(true){ diem = scanner.nextInt(); if(diem >= 0 && diem <=10){ break; } System.out.println(“Điểm phải từ 0 đến 10”); } Ví dụ: Viết chương trình xuất ra từ 1 đến 5 nhưng không xuất giá trị 3. int count; for (count = 1; count < 6; count++) { if (count == 3) { continue; } Hình 2.4: Kết quả System.out.printf("%d ",count); } 2.5 Mảng, chuỗi, lớp bao kiểu dữ liệu cơ sở MẢNG Ý nghĩa: Mảng là cấu trúc lưu trữ nhiều phần tử có cùng kiểu dữ liệu. Hình 2.5: Mảng - Nguồn [3] Các thành phần của mảng: - Chỉ số (index/indeces): cho biết vị trí của phẩn tử trong mảng. Chỉ số mảng bắt đầu là 0. - Giá trị phần tử (Elements). KHOA CÔNG NGHỆ THÔNG TIN 21
  22. Chương 2: Lập trình cơ bản Java Các công việc làm với mảng: - Khai báo - Truy xuất (đọc/ghi) phần tử - Lấy số phần tử (chiều dài của mảng) - Duyệt mảng - Sắp xếp các phần tử mảng Khai báo mảng Khai báo không khởi tạo int[] a; // mảng số nguyên chưa biết số phần tử int b[]; // mảng số nguyên chưa biết số phần tử String[] c = new String[5]; // mảng chứa 5 chuỗi Khai báo có khởi tạo // mảng số thực, 5 phần tử, đã được khởi tạo double[] d1 = new double[]{2, 3, 4, 5, 6}; // mảng số thực, 5 phần tử, đã được khởi tạo double[] d2 = {2, 3, 4, 5, 6}; Truy xuất (đọc/ghi) phần tử Sử dụng chỉ số (index) để phân biệt các phần tử. Chỉ số mảng tính từ 0. int a[] = {4, 3, 5, 7}; a[2] = a[1] * 4; // 45*4=180 Sau phép gán này mảng là {4, 3, 12, 7}; Lấy số phần tử (chiều dài của mảng) Sử dụng thuộc tính length để lấy số phần tử của mảng a.length sẽ có giá trị là 4 Duyệt mảng Vòng lặp for được dùng để duyệt mảng. Ngoài for, foreach cũng được dùng để duyệt mảng. Cú pháp: for (kiểu_dữ_liệu x : tập hợp){ // Xử lý phần tử x KHOA CÔNG NGHỆ THÔNG TIN 22
  23. Chương 2: Lập trình cơ bản Java } Ví dụ: Xuất các giá trị của mảng a ra màn hình. Cách 1: dùng for int[] a = {4, 3, 5, 9}; for(int i=0; i<a.length; i++){ System.out.println(a[i]); } Cách 2: dùng foreach int[] a = {4, 3, 5, 9}; for (int x : a){ System.out.println(x); } Ví dụ: tính tổng các số chẵn của mảng sử dụng foreach để duyệt mảng int[] a={9,3,8,7,3,9,4,2}; int tong=0; for(int x:a){ if(x%2==0) tong+=x; } System.out.println("Tổng: "+tong); Sắp xếp các phần tử mảng Dùng phương thức sort sắp xếp được hỗ trợ từ đối tượng Arrays trong Java. int[] a={9,3,8,7,3,9,4,2}; System.out.println("Mảng ban đầu: "+Arrays.toString(a)); Arrays.sort(a); System.out.println("Mảng sau khi sắp xếp: "+Arrays.toString(a)); Hình 2.6: Ví dụ sắp xếp mảng KHOA CÔNG NGHỆ THÔNG TIN 23
  24. Chương 2: Lập trình cơ bản Java Arrays.sort không thể sắp xếp giảm cho mảng được. Vì vậy, cần phải tự xây dựng hàm để sắp xếp giảm. int[] a={9,3,8,7,3,9,4,2}; int i,j,tmp; System.out.println("Mảng khi ban đầu: "+Arrays.toString(a)); for(i=0;i<a.length-1;i++) for(j=i+1;j<a.length;j++) { Hình 2.7: Ví dụ sắp xếp giảm dần if(a[i]<a[j]){ tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } System.out.println("Mảng được sắp xếp: "+Arrays.toString(a)); CHUỖI Khái niệm: String là một chuỗi các ký tự. String là một class được xây dựng sẵn trong Java. String là một kiểu dữ liệu được sử dụng nhiều nhất trong lập trình. String có rất nhiều phương thức giúp xử lý chuỗi một cách thuận tiện và hiệu quả. String s = “Hello World”; Các ký tự đặc biệt Bảng 2.5: Bảng ký tự đặc biệt Ký tự Hiển thị \n Xuống dòng \r Về đầu dòng \t Ký tự tab \\ \ \” “ KHOA CÔNG NGHỆ THÔNG TIN 24
  25. Chương 2: Lập trình cơ bản Java Ví dụ: System.out.println("\t+ Họ và tên: Lý\r\n\t+ Tuổi: 40"); Hình 2.8: Kết quả Các thao tác với chuỗi Bảng 2.6: Phương thức của chuỗi Phương thức Mô tả equals() So sánh bằng có phân biệt hoa/thường equalsIgnoreCase() So sánh bằng không phân biệt hoa/thường contains() Kiểm tra có chứa hay không startsWith() Kiểm tra có bắt đầu bởi hay không endsWith () Kiểm tra có kết thúc bởi hay không matches () So khớp với hay không? indexOf() Tìm vị trí xuất hiện đầu tiên của chuỗi con lastIndexOf() Tìm vị trí xuất hiện cuối cùng của chuỗi con toLowerCase () Đổi in thường toUpperCase () Đổi in hoa trim() Cắt các ký tự trắng 2 đầu chuỗi length() Lấy độ dài chuỗi substring() Lấy chuỗi con charAt (index) Lấy ký tự tại vị trí KHOA CÔNG NGHỆ THÔNG TIN 25
  26. Chương 2: Lập trình cơ bản Java replaceAll(find, replace) Tìm kiếm và thay thế tất cả split(separator) Tách chuỗi thành mảng Ví dụ: Viết chương trình kiểm tra đăng nhập là hợp lệ khi mã tài khoản là “admin” và mật khẩu trên 6 ký tự. Gợi ý: - Nhập username và password từ bàn phím. - Sử dụng equalsIgnoreCase() để so sánh username và length() để lấy độ dài mật khẩu. if(username.equalsIgnoreCase(“admin”) && password.length() > 6){ //thông báo } else{ ////thông báo } LỚP BAO KIỂU DỮ LIỆU CƠ SỞ Do nhiều hàm trongJava chỉ làm việc với đối tượng mà không làm việc với kiểu cơ sở cho nên tương ứng với mỗi kiểu cơ sở Java định nghĩa một lớp bao để bao giá trị của kiểu cơ sở tương ứng gọi là lớp bao kiểu cơ sở. Bảng 2.7: Kiểu dữ liệu cơ sở và lớp bao tương ứng Cơ sở Lớp bao byte Byte short Short int Integer long Long float Float KHOA CÔNG NGHỆ THÔNG TIN 26
  27. Chương 2: Lập trình cơ bản Java double Double char Character boolean Boolean Có hai khái niệm về lớp bao là boxing và unboxing. Boxing là việc tạo đối tượng từ lớp bao để bọc giá trị cơ sở. Có 3 cách để bao giá trị cơ sở sau: Integer a = Integer.valueOf(5) // bao tường minh Integer a = new Integer(5) // bao tường minh Integer a = 5 // bao ngầm định Unboxing là việc mở lấy giá trị cơ sở từ đối tượng của lớp bao. Có 2 cách mở bao để lấy giá trị cơ sở sau: int b = a.intValue() // mở bao tường minh int b = a; // mở bao ngầm định 2.6 Xử lý ngoại lệ Vấn đề ngoại lệ xảy ra khi người dùng nhập vào không đúng yêu cầu hoặc lỗi xảy ra khi xử lý chương trình. Ví dụ: int a = scanner.nextInt(); hoặc int a = Integer.parseInt(s); Trong ví dụ, người dùng nhập vào giá trị khác số thì sẽ xảy ra lỗi. Cú pháp: try { //lệnh nghi ngờ sẽ có lỗi } catch(Exception e) { //lệnh xử lý khi có lỗi xảy ra }finally{ //xử lý khi không có lỗi } Từ khóa finally không bắt buộc luôn có trong cú pháp. KHOA CÔNG NGHỆ THÔNG TIN 27
  28. Chương 2: Lập trình cơ bản Java Ví dụ: Bắt lỗi khi người dùng nhập vào giá trị khác số. try{ int a = scanner.nextInt(); System.out.println(“Bạn đã nhập đúng”); } catch (Exception ex){ System.out.println(“Vui lòng nhập số !”); } 2.7 Lập trình luồng nhập xuất Java sử dụng khái niệm luồng (Stream) để làm cho hoạt động Input/Output (I/O) nhanh chóng. Gói java.io chứa tất cả các lớp cần thiết cho các hoạt động đầu vào và đầu ra. Stream là một dòng liên tục, có thứ tự các bytes dữ liệu chảy giữa chương trình và thiết bị ngoại vi. Trong console có 3 stream tự động. 1) System.out: standard output stream 2) System.in: standard input stream 3) System.err: standard error stream Ví dụ: System.out.println("Xin chào."); System.err.println("Lỗi."); int i=System.in.read(); //trả về mã ASCII của ký tự đầu tiên System.out.println((char)i); //xuất ký tự đã nhập Có các loại streams cơ bản: byte streams, character streams, buffered streams, scanning and formatting, data streams, object streams. Trong giáo trình này hướng dẫn sử dụng byte streams. InputStream: được sử dụng để đọc dữ liệu từ một nguồn (source). Hình 2.9: Luồng nhập - Nguồn [5] KHOA CÔNG NGHỆ THÔNG TIN 28
  29. Chương 2: Lập trình cơ bản Java Lớp InputStream là một lớp trừu tượng. Nó là lớp cha của tất cả các lớp đại diện cho một luồng vào của các bytes. Hình 2.10: Các lớp của luồng nhập – Nguồn [5] OutputStream: được sử dụng để ghi dữ liệu đến đích (destination). Hình 2.11: Luồng xuất - Nguồn [5] Lớp OutputStream là một lớp trừu tượng. Nó là lớp cha của tất cả các lớp đại diện cho một luồng ra của các bytes. Một luồng ra chấp nhận các byte đầu ra và gửi chúng đến một số bộ phận chìm. Hình 2.12: Các lớp luồng xuất – Nguồn [5] KHOA CÔNG NGHỆ THÔNG TIN 29
  30. Chương 2: Lập trình cơ bản Java FileOutputStream Java FileOutputStream là một luồng ra được sử dụng để ghi dữ liệu vào một tệp. Nếu bạn phải ghi các giá trị kiểu dữ liệu cơ bản vào một tệp, hãy sử dụng lớp FileOutputStream. Bạn có thể ghi dữ liệu hướng byte cũng như dữ liệu hướng ký tự thông qua lớp FileOutputStream. Các phương thức của FileOutputStream: Bảng 2.8: Phương thức của FileOutputStream Phương thức Mô tả protected void finalize() Xóa kết nối với tập tin output stream. void write(byte[] ary) Ghi tất cả chiều dài ary.length bytes của mảng byte vào file output stream. void write(byte[] ary, int off, Ghi tất cả chiều dài ary.length bytes của mảng byte int len) bắt đầu tại offset off đến file output stream. void write(int b) Ghi một byte cụ thể vào file output stream. FileChannel getChannel() Trả về file channel object giao tiếp với file output stream. FileDescriptor getFD() Trả về mô tả của tập tin giao tiếp với stream. void close() Đóng file output stream. Khai báo java.io.FileOutputStream để sử dụng FileOutputStream. Ví dụ: Xuất một ký tự vào tập tin. try (FileOutputStream fout = new FileOutputStream("testout.txt")) { fout.write(65); System.out.println("Thành công "); }catch(IOException e){ System.out.println(e); } Hình 2.13: Kết quả xuất ký tự vào tập tin KHOA CÔNG NGHỆ THÔNG TIN 30
  31. Chương 2: Lập trình cơ bản Java Ví dụ: Xuất một chuỗi vào tập tin. try(FileOutputStream fout = new FileOutputStream("outString.txt")){ String s="Xin chào Java."; byte b[]= s.getBytes();//chuyển sang kiểu byte fout.write(b); fout.close(); System.out.println("Xuất tập tin thành công."); }catch(Exception ex){ System.out.println(ex); } Hình 2.14: Kết quả xuất chuỗi vào tập tin FileInputStream Java FileInputStream là một luồng ra được sử dụng để đọc dữ liệu từ một tệp. Nếu bạn phải đọc các giá trị kiểu dữ liệu cơ bản vào một tệp, hãy sử dụng lớp FileInputStream. Bạn có thể ghi dữ liệu hướng byte cũng Indữ liệu hướng ký tự thông qua lớp FileInputStream. Các phương thức của FileInputStream: Bảng 2.9: Phương thức FileInputStream Phương thức Mô tả int available() Trả về số lượng bytes có thể đọc. int read() Đọc byte dữ liệu từ tập tin. int read(byte[] b) Đọc tất cả bytes dữ liệu từ tập tin. int read(byte[] b, int off, int len) Đọc tất cả bytes dữ liệu tại off từ tập tin. long skip(long x) Đọc tập tin nhưng bỏ qua x. FileChannel getChannel() Trả về file channel object giao tiếp với KHOA CÔNG NGHỆ THÔNG TIN 31
  32. Chương 2: Lập trình cơ bản Java file input stream. FileDescriptor getFD() Trả về mô tả của tập tin giao tiếp với stream. protected void finalize() Đảm bảo phương thức đóng của tập không còn bất kỳ tham chiếu. void close() Đóng file output stream. Khai báo java.io.FileInputStream để sử dụng FileInputStream. Ví dụ: Đọc nội dung tập tin testout.txt và hiển thị ra màn hình. try(FileInputStream fin = new FileInputStream("testout.txt")){ int i = fin.read(); System.out.println((char)i); fin.close(); }catch(Exception e){ System.out.println(e); } Ví dụ: Đọc nội dung tập tin từ tập tin testin.txt và hiển thị ra màn hình. Hình 2.15: Nội dung tập tin sẽ được đọc try(FileInputStream fin = new FileInputStream("testin.txt")){ int i; while((i=fin.read())!=-1){ System.out.print((char)i); } fin.close(); }catch(Exception e){ System.out.println(e); } KHOA CÔNG NGHỆ THÔNG TIN 32
  33. Chương 2: Lập trình cơ bản Java BÀI TẬP CHƯƠNG 2 Bài tập 1: Viết chương trình nhập họ tên, điểm thường xuyên, điểm định kỳ từ bàn phím, tính điểm trung bình và xuất ra màn hình với dạng Họ tên – Điểm thường xuyên – Điểm định kỳ - Điểm trung bình. Hướng dẫn: Sử dụng Sytem.in.Read() để nhập dữ liệu Sử dụng System.out.print, System.out.println, System.out.printf để xuất. Bài tập 2: Viết chương trình nhập cạnh a và b.Tính và xuất chu vi, diện tích tích hình chữ nhật. Bài tập 3: Viết chương trình nhập cạnh a và b. Kiểm tra a=b thì dùng công thức tính hình vuông, ngược lại dùng công thức tính hình chữ nhật. Bài tập 4: Viết chương trình nhập vào số điện sử dụng của tháng và tính tiền điện. Nếu số điện sử dụng từ 0 đến 50 thì giá mỗi số điện là 1000. Nếu số điện sử dụng trên 50 thì giá mỗi số điện vượt hạn mức là 1200 Bài tập 5: Viết chương trình nhập vào tháng và hiển thị số ngày của tháng. Bài tập 6: Viết chương trình hiển thị bảng cửu chương. Bài tập 7: Viết chương trình nhập 2 mảng họ tên và điểm của sinh viên. Xuất 2 mảng đã nhập, mỗi sinh viên có thêm học lực. Yếu: điểm = 9 Bài tập 8: Ghi ký tự đầu tiên của tên học sinh vào một tập tin. Bài tập 9: Tạo tập tin txt với nội dung là Donal Trumph. Sử dụng luồng đọc, để đọc nội dung trong tập tin txt vừa tạo và hiển thị ra màn hình. KHOA CÔNG NGHỆ THÔNG TIN 33
  34. Chương 3: Xây dựng giao diện người dùng CHƯƠNG 3: XÂY DỰNG GIAO DIỆN NGƯỜI DÙNG Giới thiệu: Chương 3 giới thiệu giao diện người dùng, các điều khiển để thiết kế giao diện Swing. Mục tiêu: - Thiết kế giao diện người dùng đồ họa sử dụng Swing, - Sử dụng được các điều khiển cơ bản trong Swing. 3.1 Cấu trúc chung của giao diện Java Foundation Classes (JFC) là một tập hợp các thành phần GUI giúp đơn giản hóa việc phát triển các ứng dụng máy tính để bàn. Ví dụ: Một ứng dụng GUI quản lý nhân viên. Hình 3.1: Hình minh họa giao diện Hướng dẫn tạo một cửa sổ giao diện: Bước 1: File New Project Đặt tên là Java Swing Bước 2: Xóa package tự tạo từ NetBean KHOA CÔNG NGHỆ THÔNG TIN 34
  35. Chương 3: Xây dựng giao diện người dùng Bước 3: Tạo mới một package Hình 3.2: Tạo Package Bước 4: Tạo class mới Bước 5: Viết mã chương trình như sau package com.hotec.javaswing; import javax.swing.JFrame; public class helloSwing { public helloSwing(){ JFrame fr = new JFrame("Hello"); fr.setSize(400, 400); fr.setVisible(true); } Hình 3.3: Tạo lớp } * Phần chi tiết các của ví dụ sẽ được hướng dẫn tiếp ở phần 3.5. Cấu trúc chung của một giao diện GUI KHOA CÔNG NGHỆ THÔNG TIN 35
  36. Chương 3: Xây dựng giao diện người dùng Cửa sổ - Window ❖Cửa sổ ứng dụng. ❑ Khung chứa – Container ❖Chứa một hoặc nhiều điều khiển ❑ Điều khiển – Control ❖TextField, Radio, CheckBox, Button, Table ❑ Chú ý: ❖Một ứng dụng có thể có nhiều của sổ. ❖Một khung chứa có thể chứa nhiều điều khiển hoặc khung chứa khác Hình 3.4: Cấu trúc chung của một giao diện 3.2 Giới thiệu gói AWT và Swing AWT (Abstract Window Toolkit) Java AWT là một API để phát triển GUI hoặc các ứng dụng dựa trên desktop trong java. Các thành phần Java AWT phụ thuộc vào nền tảng, nghĩa là các thành phần được hiển thị theo chế độ xem của hệ điều hành. AWT có trọng lượng lớn, nghĩa là các thành phần của nó đang sử dụng tài nguyên của hệ điều hành. Gói java.awt cung cấp các lớp cho AWT api như TextField, Label, TextArea, RadioButton, CheckBox, Choice, List, v.v. Các lớp AWT KHOA CÔNG NGHỆ THÔNG TIN 36
  37. Chương 3: Xây dựng giao diện người dùng Hình 3.5: Các lớp trong AWT SWING Hướng dẫn Java Swing là một phần của Java Foundation Classes (JFC) được sử dụng để tạo các ứng dụng dựa trên cửa sổ. Nó được xây dựng trên API AWT và hoàn toàn được viết bằng java. Không giống như AWT, Java Swing cung cấp các thành phần nhẹ và độc lập với nền tảng. Gói javax.swing cung cấp các lớp cho API java swing như JButton, JTextField, TextArea, JRadioButton, JCheckbox, JMenu, JColorChooser, v.v. Các lớp Java Swing KHOA CÔNG NGHỆ THÔNG TIN 37
  38. Chương 3: Xây dựng giao diện người dùng Hình 3.6: Các lớp của Swing 3.3 Trình quản lý giao diện – Layout Các component trong Java Swing được chia làm hai loại là container và children, trong đó container là loại component dùng để chứa các component khác, ví dụ như JFrame, JPanel còn children là các component như JLabel, Jbutton, JTextField khi chúng ta đặt các component con lên các container thì việc đặt và sắp xếp theo vị trí nào đó và nó được gọi là Layout. The LayoutManagers được dùng để sắp xếp các điều khiển theo từng nhóm cụ thể. LayoutManager là một interface. Layout managers có các lớp sau: java.awt.BorderLayout javax.swing.BoxLayout java.awt.FlowLayout javax.swing.GroupLayout java.awt.GridLayout javax.swing.ScrollPaneLayout java.awt.CardLayout javax.swing.SpringLayout java.awt.GridBagLayout KHOA CÔNG NGHỆ THÔNG TIN 38
  39. Chương 3: Xây dựng giao diện người dùng BORDERLAYOUT BorderLayout sắp xếp các điều khiển vào 5 vùng: north, south, east, west and center. Mỗi vùng chỉ chứa một điều khiển. Cú pháp: BorderLayout(): tạo border layout mà không có khoảng trống giữa các điều khiển. JBorderLayout(int hgap, int vgap): tạo border layout với khoảng trống ngang và dọc giữa các điều khiển. Hằng số được sử dụng với hàm là: public static final int NORTH public static final int SOUTH public static final int EAST public static final int WEST public static final int CENTER Ví dụ: Tạo 5 buttons và đặt chúng vào 5 vùng Hình 3.7: Ví dụ BorderLayout Mã chương trình: import java.awt.*; import javax.swing.*; public class Border { KHOA CÔNG NGHỆ THÔNG TIN 39
  40. Chương 3: Xây dựng giao diện người dùng JFrame f; Border(){ f=new JFrame(); JButton b1=new JButton("NORTH");; JButton b2=new JButton("SOUTH");; JButton b3=new JButton("EAST");; JButton b4=new JButton("WEST");; JButton b5=new JButton("CENTER");; f.add(b1,BorderLayout.NORTH); f.add(b2,BorderLayout.SOUTH); f.add(b3,BorderLayout.EAST); f.add(b4,BorderLayout.WEST); f.add(b5,BorderLayout.CENTER); f.setSize(300,300); f.setVisible(true); } public static void main(String[] args) { new Border(); } } FLOWLAYOUT Flow Layout bố trí các Component trong Container theo dòng, từ trái sang phải theo thứ tự thêm vào. Tạo dòng mới khi kích thước dòng còn lại không đủ chứa Component thêm vào. Flow Layout bố trí vị trí các Component phụ thuộc vào kích thước của Container. Mỗi dòng của các Component được window mặc định canh giữa theo chiều ngang . Có thể điều chỉnh canh trái hoặc phải. KHOA CÔNG NGHỆ THÔNG TIN 40
  41. Chương 3: Xây dựng giao diện người dùng Cú pháp: FlowLayout(): tạo flow layout với lề được canh giữa. FlowLayout(int align): tạo flow layout với lề được cho. FlowLayout(int align, int hgap, int vgap): creates a flow layout with the given alignment and the given horizontal and vertical gap. Hằng số được sử dụng với hàm: public static final int LEFT public static final int RIGHT public static final int CENTER public static final int LEADING public static final int TRAILING Ví dụ: Thiết kế giáo diện như hình sau. Hình 3.8: Ví dụ FlowLayout Mã chương trình import java.awt.*; import javax.swing.*; public class MyFlowLayout{ JFrame f; MyFlowLayout(){ KHOA CÔNG NGHỆ THÔNG TIN 41
  42. Chương 3: Xây dựng giao diện người dùng f=new JFrame(); JButton b1=new JButton("1"); JButton b2=new JButton("2"); JButton b3=new JButton("3"); JButton b4=new JButton("4"); JButton b5=new JButton("5"); f.add(b1);f.add(b2);f.add(b3);f.add(b4);f.add(b5); f.setLayout(new FlowLayout(FlowLayout.RIGHT)); //setting flow layout of right alignment f.setSize(300,300); f.setVisible(true); } public static void main(String[] args) { new MyFlowLayout(); } } GRIDLAYOUT GridLayout dùng để tạo lưới chứa đựng các điều khiển. Cú pháp: GridLayout(): tạo lưới chỉ với 1 cột, 1 dòng. GridLayout(int rows, int columns): tạo lưới với rows dòng và columns cột không có khoảng trống. GridLayout(int rows, int columns, int hgap, int vgap): tạo lưới với rows dòng và columns cột có khoảng trống đứng vgap và khoảng trống ngang hgap. Ví dụ: Thiết kế giao diện như hình sau KHOA CÔNG NGHỆ THÔNG TIN 42
  43. Chương 3: Xây dựng giao diện người dùng Hình 3.9: Ví dụ GridLayout Mã chương trình: import java.awt.*; import javax.swing.*; public class MyGridLayout{ JFrame f; MyGridLayout(){ f=new JFrame(); JButton b1=new JButton("1"); JButton b2=new JButton("2"); JButton b3=new JButton("3"); JButton b4=new JButton("4"); JButton b5=new JButton("5"); JButton b6=new JButton("6"); JButton b7=new JButton("7"); JButton b8=new JButton("8"); JButton b9=new JButton("9"); KHOA CÔNG NGHỆ THÔNG TIN 43
  44. Chương 3: Xây dựng giao diện người dùng f.add(b1);f.add(b2);f.add(b3);f.add(b4);f.add(b5); f.add(b6);f.add(b7);f.add(b8);f.add(b9); f.setLayout(new GridLayout(3,3)); //setting grid layout of 3 rows and 3 columns f.setSize(300,300); f.setVisible(true); } public static void main(String[] args) { new MyGridLayout(); } } GRIDBAGLAYOUT Lớp Java GridBagLayout được sử dụng để căn chỉnh các điều khiển theo chiều dọc, chiều ngang hoặc dọc theo đường cơ sở của chúng. Các điều khiển có thể không có cùng kích thước. Mỗi đối tượng GridBagLayout duy trì một lưới ô hình chữ nhật động. Mỗi điều khiển chiếm một hoặc nhiều ô được gọi là vùng hiển thị của nó. Mỗi control liên kết một phiên bản của GridBagConstraints. Với sự trợ giúp của đối tượng ràng buộc, chúng ta sắp xếp vùng hiển thị của điều khiển trên lưới. GridBagLayout quản lý kích thước ưu tiên và tối thiểu của từng thành phần để xác định kích thước của thành phần. Ví dụ: Thiết kế giao diện như hình sau KHOA CÔNG NGHỆ THÔNG TIN 44
  45. Chương 3: Xây dựng giao diện người dùng Hình 3.10: Ví dụ GridBagLayout Mã chương trình: import java.awt.Button; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import javax.swing.*; public class GridBagLayoutExample extends JFrame{ public static void main(String[] args) { GridBagLayoutExample a = new GridBagLayoutExample(); } public GridBagLayoutExample() { GridBagLayoutgrid = new GridBagLayout(); GridBagConstraints gbc = new GridBagConstraints(); setLayout(grid); setTitle("GridBag Layout Example"); GridBagLayout layout = new GridBagLayout(); this.setLayout(layout); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridx = 0; KHOA CÔNG NGHỆ THÔNG TIN 45
  46. Chương 3: Xây dựng giao diện người dùng gbc.gridy = 0; this.add(new Button("Button One"), gbc); gbc.gridx = 1; gbc.gridy = 0; this.add(new Button("Button two"), gbc); gbc.fill = GridBagConstraints.HORIZONTAL; gbc.ipady = 20; gbc.gridx = 0; gbc.gridy = 1; this.add(new Button("Button Three"), gbc); gbc.gridx = 1; gbc.gridy = 1; this.add(new Button("Button Four"), gbc); gbc.gridx = 0; gbc.gridy = 2; gbc.fill = GridBagConstraints.HORIZONTAL; gbc.gridwidth = 2; this.add(new Button("Button Five"), gbc); setSize(300, 300); setPreferredSize(getSize()); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } } BOXLAYOUT BoxLayout sắp xếp các điều khiển theo chiều dọc hoặc chiều ngang. KHOA CÔNG NGHỆ THÔNG TIN 46
  47. Chương 3: Xây dựng giao diện người dùng Cú pháp BoxLayout(Container c, int axis) Hằng số public static final int X_AXIS public static final int Y_AXIS public static final int LINE_AXIS public static final int PAGE_AXIS Ví dụ: Sắp xếp các điều khiển theo Y_AXIS Hình 3.11: Ví dụ BoxLayout Mã chương trình: import java.awt.*; import javax.swing.*; public class BoxLayoutExample1 extends Frame { Button buttons[]; KHOA CÔNG NGHỆ THÔNG TIN 47
  48. Chương 3: Xây dựng giao diện người dùng public BoxLayoutExample1 () { buttons = new Button [5]; for (int i = 0;i<5;i++) { buttons[i] = new Button ("Button " + (i + 1)); add (buttons[i]); } setLayout (new BoxLayout (this, BoxLayout.Y_AXIS)); setSize(400,400); setVisible(true); } public static void main(String args[]){ BoxLayoutExample1 b=new BoxLayoutExample1(); } } GROUPLAYOUT GroupLayout gom nhóm các điều khiển và sắp xếp chúng vào các nhóm phân cấp. Cú pháp GroupLayout(Container host) tạo GroupLayout cho Container cụ thể. createSequentialGroup() tạo và trả về SequentialGroup. createParallelGroup(GroupLayout.Alignment alignment, boolean resizable): tạo và trả về ParallelGroup. Ví dụ: Thiết kế giao diện như hình sau Hình 3.12: Ví dụ GroupLayout Mã chương trình: KHOA CÔNG NGHỆ THÔNG TIN 48
  49. Chương 3: Xây dựng giao diện người dùng public class GroupExample { public static void main(String[] args) { JFrame frame = new JFrame("GroupLayoutExample"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPanel = frame.getContentPane(); GroupLayout groupLayout = new GroupLayout(contentPanel); contentPanel.setLayout(groupLayout); JLabel clickMe = new JLabel("Click Here"); JButton button = new JButton("This Button"); groupLayout.setHorizontalGroup( groupLayout.createSequentialGroup() .addComponent(clickMe) .addGap(10, 20, 100) .addComponent(button)); groupLayout.setVerticalGroup( groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(clickMe) .addComponent(button)); frame.pack(); frame.setVisible(true); } } CARDLAYOUT CardLayout quản lý các thành phần điều khiển và chỉ cho một điều khiển được hiển thị. CardLayout xem mỗi điều khiển như là một thẻ. Cú pháp KHOA CÔNG NGHỆ THÔNG TIN 49
  50. Chương 3: Xây dựng giao diện người dùng CardLayout(): tạo một card layout không có khoảng trống ngang và dọc. CardLayout(int hgap, int vgap): tạo một card layout có khoảng trống ngang và dọc. Ví dụ Hình 3.13: Ví dụ CardLayout Mã chương trình: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class CardLayoutExample extends JFrame implements ActionListener{ CardLayout card; JButton b1,b2,b3; Container c; CardLayoutExample(){ KHOA CÔNG NGHỆ THÔNG TIN 50
  51. Chương 3: Xây dựng giao diện người dùng c=getContentPane(); card=new CardLayout(40,30); //create CardLayout object with 40 hor space and 30 ver space c.setLayout(card); b1=new JButton("Apple"); b2=new JButton("Boy"); b3=new JButton("Cat"); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); c.add("a",b1);c.add("b",b2);c.add("c",b3); } public void actionPerformed(ActionEvent e) { card.next(c); } public static void main(String[] args) { CardLayoutExample cl=new CardLayoutExample(); cl.setSize(400,400); cl.setVisible(true); cl.setDefaultCloseOperation(EXIT_ON_CLOSE); } } KHOA CÔNG NGHỆ THÔNG TIN 51
  52. Chương 3: Xây dựng giao diện người dùng SCROLLPANELAYOUT JScrollPaneLayout chịu trách nhiệm về chín thành phần: một khung nhìn, hai thanh cuộn, tiêu đề hàng, tiêu đề cột và bốn thành phần "góc". Cú pháp JScrollPane() tạo JScrollPane Ví dụ Hình 3.14: Ví dụ ScrollPaneLayout Mã chương trình: import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JScrollPane; public class ScrollPaneDemo extends JFrame { public ScrollPaneDemo() { super("ScrollPane Demo"); ImageIcon img = new ImageIcon("child.png"); JScrollPane png = new JScrollPane(new JLabel(img)); getContentPane().add(png); KHOA CÔNG NGHỆ THÔNG TIN 52
  53. Chương 3: Xây dựng giao diện người dùng setSize(300,250); setVisible(true); } public static void main(String[] args) { new ScrollPaneDemo(); } } SPRINGLAYOUT SpringLayout sắp xếp các điều khiển của vùng chứa được liên kết của nó theo một tập hợp các ràng buộc. Các ràng buộc không là gì ngoài khoảng cách ngang và dọc giữa hai cạnh thành phần. Mọi ràng buộc được đại diện bởi một đối tượng SpringLayout.Constraint. Mỗi điều khiển của một vùng chứa SpringLayout, cũng như bản thân vùng chứa, có chính xác một tập các ràng buộc được liên kết với chúng. Mỗi vị trí cạnh phụ thuộc vào vị trí của cạnh kia. Nếu một ràng buộc được thêm vào để tạo cạnh mới hơn ràng buộc trước đó sẽ bị loại bỏ. SpringLayout không tự động đặt vị trí của các thành phần mà nó quản lý. Cú pháp SpringLayout.Constraints tạo đối tượng Constraints giúp quản lý kích thước và sự thay đổi vị trí cả các điều khiển. Ví dụ Hình 3.15: Ví dụ SpringLayout Mã chương trình: import java.awt.Container; KHOA CÔNG NGHỆ THÔNG TIN 53
  54. Chương 3: Xây dựng giao diện người dùng import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.SpringLayout; public class MySpringDemo { private static void createAndShowGUI() { JFrame frame = new JFrame("MySpringDemp"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); Container contentPane = frame.getContentPane(); SpringLayout layout = new SpringLayout(); contentPane.setLayout(layout); JLabel label = new JLabel("Label: "); JTextField textField = new JTextField("My Text Field", 15); contentPane.add(label); contentPane.add(textField); layout.putConstraint(SpringLayout.WEST, label,6,SpringLayout.WEST, contentPane); layout.putConstraint(SpringLayout.NORTH, label,6,SpringLayout.NORTH, contentPane); layout.putConstraint(SpringLayout.WEST, textField,6,SpringLayout.EAST, label); layout.putConstraint(SpringLayout.NORTH, textField,6,SpringLayout.NORTH, contentPane); layout.putConstraint(SpringLayout.EAST, contentPane,6,SpringLayout.EAST, textField); layout.putConstraint(SpringLayout.SOUTH, contentPane,6,SpringLayout.SOUTH, textField); KHOA CÔNG NGHỆ THÔNG TIN 54
  55. Chương 3: Xây dựng giao diện người dùng frame.pack(); frame.setVisible(true); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGUI(); } }); } } 3.5 Các thành phần giao diện cơ bản Container Container là một thành phần có thể chứa các điều khiển khác như button, text, label, v.v. Các lớp mở rộng lớp Container được gọi là vùng chứa như Khung, Hộp thoại và Bảng điều khiển. Window Window là một container mà không có borders và menu bars. Bạn phải sử dụng frame, dialog hoặc window khác cho việc tạo một window. Panel The Panel là một container mà không có title bar và menu bars. Nó chứa các điều khiển như là button, textfield, v.v Frame Frame là một container mà nó chứa title bar và có menu bars. Nó chứa các điều khiển khác như button, textfield, v.v Các phương thức thường được sử dụng của các lớp Điều khiển: Phương thức Mô tả public void add(Component c) Thêm một component vào một component khác. KHOA CÔNG NGHỆ THÔNG TIN 55
  56. Chương 3: Xây dựng giao diện người dùng public void setSize(int width,int height) Thiết lập kích thước của component. public void setLayout(LayoutManager m) Thiết lập layout manager cho component. public void setVisible(boolean b) Thiết lập ẩn/hiện cho component. Mặc định là false. Trong giáo trình này hướng dẫn sử dụng Swing, Window Trong Swing, JFrame được sử dụng để tạo cửa sổ. Các thành phần liên quan gồm có biểu tượng – icon, tiêu đề - title, thu/ phóng/tắt cửa sổ. Container Trong Swing có nhiều loại Container. Trong bài này chúng ta chỉ tìm hiểu JPanel. Panel là container được sử dụng để nhóm các control hoặc container khác. Viền xung quanh các điều khiển là Hình 3.16: Swing Containers JPanel. Hình 3.17: JFrame KHOA CÔNG NGHỆ THÔNG TIN 56
  57. Chương 3: Xây dựng giao diện người dùng Control Control là các phần tử giao diện được sử dụng để tiếp nhận dữ liệu từ người dùng hoặc trình bày dữ liệu đến người dùng. Các Control thường dùng là: ❖JLabel - Nhãn ❖JRadioButton – Lựa chọn ❖JTextField – Ô nhập ❖JComboBox – Hộp chọn ❖JButton – Nút nhấn ❖JTable – Bảng ❖JCheckBox – Hộp kiểm ❖JOptionPane – Hộp thoại Jlabel JLabel là điều khiển được sử dụng để tạo nhãn. ❖Thuộc tính quan trọng nhất của Jlabel là Text ❖Khi đặt tên bạn cần bắt đầu bởi lbl. JTextField JTextField được sử dụng để tạo ô nhập. 2 thuộc tính thường dung là Text và Name ❖Text: giá trị của ô nhập ❖Name: tên của ô nhập, nên bắt đầu bởi txt JTextArea JTextArea chỉ khác JTextField là cho phép chứa Text nhiều dòng. JPasswordField JPasswordField thì không cho nhìn thấy nội dung của Text. JButton JButton được sử dụng để tạo nút nhấn. Các thuộc tính thường sử dụng Hình 3.18: Swing Controls ❖Text: nhãn của nút ❖Name: tên của nút, nên bắt đầu bởi btn JCheckBox JCheckBox được sử dụng để tạo hộp kiểm. Các thuộc tính thường dùng KHOA CÔNG NGHỆ THÔNG TIN 57
  58. Chương 3: Xây dựng giao diện người dùng ❖Text: Nhãn đính kèm ❖Selected: Trạng thái ❖Name: Tên, nên bắt đầu bởi chk JRadioButton JRadioButton được sử dụng để tạo các mục chọn. Các thuộc tính thường dùng: ❖Text: Nhãn đính kèm ❖Selected: Trạng thái ❖Name: Tên, nên bắt đầu bởi rdo ❖ButtonGroup: nhóm mà radio thuộc vào. Trong mỗi Hình 3.19: JRadioButton nhóm bạn chỉ có thể chọn một radio. JComboBox JComboBox được sử dụng để tạo danh sách xổ xuống và chỉ cho phép chọn 1. Các thuộc tính thường sử dụng: ❖Model: chứa danh sách dữ liệu ❖SelectedIndex: vị trí mục được chọn ❖SelectedItem: dữ liệu mục chọn Hình 3.20: JComboBox ❖Name: Tên, nên bắt đầu bởi cbo JTable JTable được sử dụng để biểu diễn dữ liệu dạng bảng. Các thuộc tính thường dùng: ❖Model: dữ liệu bảng ❖SelectionMode: chế độ chọn các hang ❖RowHeight: chiều cao mỗi hang ❖Name: Tên, nên bắt đầu bởi tbl Hình 3.21: JOptionPane dạng JOptionPane Confirm JOptionPane là một dạng cửa sổ được sử dụng để tạo các hộp thoại thông báo. Có 3 dạng thông báo thường dùng:  Xác nhận – Confirm  Nhập – Input KHOA CÔNG NGHỆ THÔNG TIN 58
  59. Chương 3: Xây dựng giao diện người dùng  Thông báo - Message 1 2 4 3 5 6 Hình 3.24: JOptionPane dạng Input 7 Hình 3.24: Ví dụ form Đăng nhập Hình 3.24: JOptionPane dạng Message Ví dụ: Tạo form đăng nhập Control Thuộc tính Control Thuộc tính 1. Name: lblTitle 5. Name: txtPassword JLabel Text: Đăng nhập JPassword horizontalAlignment: CENTER 2. Name: lblUsername 6. Text: Remember JLabel Text: Username JCheckbox Selected: True Name: chkRemember 3. Name: lblPassword 7. Text: Login JLabel Text: Password JButton Name: btnLogin 4. Name: txtUsername JTextField Text: KHOA CÔNG NGHỆ THÔNG TIN 59
  60. Chương 3: Xây dựng giao diện người dùng 3.6 Xử lý sự kiện giao diện người dùng Sự kiện (Event) là sự thay đổi trạng thái của một đối tượng. Đối tượng như là button, cuộn màn hình, và sự kiện bắt đầu bằng sự tương tác của người dùng như là nhấn chuột, cuộn màn hình, . Trong khi sự kiện xảy ra thì Event handler được gọi. Callback là hàm được gọi trong event handler để xử lý các logic của bài toán. Ví dụ: Xử lý sự kiện đăng nhập. Hình 3.25: Xử lý sự kiện đăng nhập Yêu cầu: khi nhấn vào nút Login thì hiển thị hộp thoại Bước 1: Nhấn chuột phải vào nút Login Hình 3.26: Bước 1- Xử lý sự kiện KHOA CÔNG NGHỆ THÔNG TIN 60
  61. Chương 3: Xây dựng giao diện người dùng Sau khi thao tác, mã tự động xuất hiện như sau: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { //Viết mã xử lý } Bước 2: Viết mã hiển thị hộp thoại thông báo. private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { JOptionPane.showMessageDialog(this, "Đăng nhập thành công", "Thông báo", JOptionPane.INFORMATION_MESSAGE); } Ví dụ: Bắt sự kiện với JRadio Hình 3.27: Ví dụ Bắt sự kiện với JRadio KHOA CÔNG NGHỆ THÔNG TIN 61
  62. Chương 3: Xây dựng giao diện người dùng Hướng dẫn thực hiện: Bước 1: Thiết kế giao diện Stt Điều khiển Thuộc tính 1 JbuttonGroup 2 JRadio text: Nam buttonGroup: ButtonGroup1 name: rdoNam 3 JRadio text: Nữ buttonGroup: ButtonGroup1 name: rdoNu 4 JButton Text: Xác nhận Name: btnXacNhan Bước 2: Chọn sự kiện KHOA CÔNG NGHỆ THÔNG TIN 62
  63. Chương 3: Xây dựng giao diện người dùng Bước 3: Viết mã xử lý sự kiện private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { if(jRadioButton1.isSelected()){ JOptionPane.showMessageDialog(this, "Bạn có giới tính là Nam"); } if(jRadioButton2.isSelected()){ Hình 3.28: Chọn sự kiện JOptionPane.showMessageDialog(this, "Bạn có giới tính là Nữ"); } } KHOA CÔNG NGHỆ THÔNG TIN 63
  64. Chương 3: Xây dựng giao diện người dùng Ví dụ: Bắt sự kiện với JcomboBox Hình 3.29: Bắt sự kiện với JComboBox Hướng dẫn thực hiện: Bước 1: Thiết kế giao diện Stt Điều khiển Thuộc tính 1 JCombo Box model: C# Java Python R Name:cbbNgonNgu 2 JButton Text: Chọn Name: btnChon 3 JLabel KHOA CÔNG NGHỆ THÔNG TIN 64
  65. Chương 3: Xây dựng giao diện người dùng Bước 2: Chọn sự kiện Hình 3.30: Chọn sự kiện Bước 3: Viết mã bắt sự kiện private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { String data = "Ngôn ngữ được chọn là " + jComboBox1.getItemAt(jComboBox1.getSelectedIndex()); jLabel1.setText(data); } KHOA CÔNG NGHỆ THÔNG TIN 65
  66. Chương 3: Xây dựng giao diện người dùng BÀI TẬP CHƯƠNG 3 Bài tập 1: Thực hiện các yêu cầu: - Xác định các điều khiển trong hình và điền thông tin vào bảng sau. Control Thuộc tính name Thuộc tính khác - Thiết kế giao diện như hình trên. Bài tập 2: Thiết kế giao diện quản lý nhân viên. KHOA CÔNG NGHỆ THÔNG TIN 66
  67. Chương 3: Xây dựng giao diện người dùng Yêu cầu: Control Thuộc tính name Thuộc tính khác JLabel lblTitle Text: NHÂN VIÊN Font: Tahoma, Bold, 18 Foreground: Xanh dương HorizontalAlignment: CENTER JLabel lblMaNV text: Mã nhân viên JLabel lblHoTen text: Họ tên JTextField txtMaNV JTextField txtHoTen JCombo Box cbbQuocGia KHOA CÔNG NGHỆ THÔNG TIN 67
  68. Chương 3: Xây dựng giao diện người dùng Bài tập 3: Thiết kế giao diện với JPannel KHOA CÔNG NGHỆ THÔNG TIN 68
  69. Chương 4: Lập trình cơ sở dữ liệu CHƯƠNG 4: LẬP TRÌNH CƠ SỞ DỮ LIỆU Giới thiệu: Chương 4 giới thiệu JDBC, hướng dẫn cách kết nối đến cơ sở dữ liệu, thao tác với cơ sở dữ liệu qua các chức năng thêm, xóa, sửa, cập nhật và tìm kiếm. Mục tiêu: - Hiểu được cú pháp các lệnh trong việc kết nối cơ sở dữ liệu, - Kết nối được cơ sở dữ liệu trong một ví dụ cụ thể. - Thực hiện được các chức năng: thêm, xóa, sửa và tìm kiếm. 4.1 Giới thiệu JDBC JDBC là viết tắt của Java Database Connectivity. JDBC là một API Java và cung cấp các interface & class nhằm tạo cơ sở cho các ứng dụng Java tương tác với các hệ quản trị cơ sở dữ liệu. Tập hợp các lớp thực thi theo chuẩn JDBC để tương tác với một cơ sở dữ liệu, cụ thể gọi là JDBC driver. Phần lớn ý tưởng của JDBC kế thừa từ chuẩn kết nối ODBC của Microsoft. Có 4 loại JDBC drivers: - JDBC-ODBC Bridge Driver, - Native Driver, - Network Protocol Driver, - Thin Driver. * API (Giao diện lập trình ứng dụng) là một tài liệu chứa mô tả tất cả các tính năng của một sản phẩm hoặc phần mềm. Nó đại diện cho các lớp và giao diện mà các chương trình phần mềm có thể tuân theo để giao tiếp với nhau. Một API có thể được tạo cho các ứng dụng, thư viện, hệ điều hành, v.v. 4.2 Kiến trúc JDBC Cơ sở Ứng dụng Java dữ liệu JDBC Driver Hình 4.1: Kiến trúc JDBC KHOA CÔNG NGHỆ THÔNG TIN 69
  70. Chương 4: Lập trình cơ sở dữ liệu JDBC-ODBC Bridge Driver Hình 4.2: JDBC-ODBC Bridge Driver Được cung cấp miễn phí bởi Sun-jdk. Có thể truy xuất bất kỳ DBMS nào được hỗ trợ bởi ODBC driver. Tính khả chuyển cao nhưng kém hiệu quả. * Trong Java 8, JDBC-ODBC bị hủy bỏ. Native Driver Hình 4.3: Native Driver JDBC driver tương tác trực tiếp với database API gồm một phần mã Java và một phần mã tự nhiên của DBMS. * Native driver và Vendor client library cần được cài trên mỗi máy client. KHOA CÔNG NGHỆ THÔNG TIN 70
  71. Chương 4: Lập trình cơ sở dữ liệu Network Protocol Driver Network Protocol Driver sử dụng phần mềm trung gian (máy chủ ứng dụng) để chuyển đổi các cuộc gọi JDBC trực tiếp hoặc gián tiếp thành giao thức cơ sở dữ liệu dành riêng cho nhà cung cấp. Nó được viết hoàn toàn bằng java. Hình 4.4: Network Protocol Driver Thin Driver Thin driver chuyển đổi các cuộc gọi JDBC trực tiếp thành giao thức cơ sở dữ liệu dành riêng cho nhà cung cấp. Đó là lý do tại sao nó được gọi là trình điều khiển mỏng. Nó được viết hoàn toàn bằng ngôn ngữ Java. Hình 4.5: Thin Driver KHOA CÔNG NGHỆ THÔNG TIN 71
  72. Chương 4: Lập trình cơ sở dữ liệu 4.3 Lập trình kết nối đến CSDL Để kế nối cơ sở dữ liệu, trước tiên cần phải có cơ sở dữ liệu trước sau đó thực hiện 7 bước sau: 1. Nạp driver 2. Kết nối CSDL bằng đối tượng Connection 3. Tạo đối tượng Statement 4. Thi hành câu truy vấn 5. Đóng kết nối Bước 1: Nạp driver Cú pháp public static void forName(String className) throws ClassNotFoundException Ví dụ try { Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver"); Class.forName("net.sourceforge.jtds.jdbc.Driver"); } catch { ClassNotFoundException cnfe) { System.out.println("Error loading driver: " cnfe); } Bước 2: Kết nối CSDL bằng đối tượng Connection Cú pháp public static Connection getConnection(String url)throws SQLException public static Connection getConnection(String url,String name,String password) throws SQLException Ví dụ Connection con=DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe","system","password"); Có thể định nghĩa url trước String myURL = "jdbc:odbc:myBook“ ; String myURLtype_4 = " jdbc:oracle:thin:@localhost:1521:xe "; * Mỗi loại loại cơ sở dữ liệu sẽ có driver tương ứng. KHOA CÔNG NGHỆ THÔNG TIN 72
  73. Chương 4: Lập trình cơ sở dữ liệu Bước 3: Tạo đối tượng Statement Cú pháp public Statement createStatement() throws SQLException Ví dụ Statement stmt=con.createStatement(); Bước 4: Thi hành câu truy vấn Cú pháp public ResultSet executeQuery(String sql) throws SQLException Ví dụ ResultSet rs=stmt.executeQuery("select * from emp"); while(rs.next()){ System.out.println(rs.getInt(1)+" "+rs.getString(2)); } Bước 5: Đóng kết nối Cú pháp public void close() throws SQLException Ví dụ con.close(); Ví dụ ứng dụng java kết nối với cơ sở dữ liệu mysql import java.sql.*; class MysqlCon{ public static void main(String args[]){ try{ Class.forName("com.mysql.jdbc.Driver"); Connection con=DriverManager.getConnection( "jdbc:mysql://localhost:3306/sonoo","root","root"); // sonoo là cơ sở dữ liệu, root is username và password Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("select * from emp"); KHOA CÔNG NGHỆ THÔNG TIN 73
  74. Chương 4: Lập trình cơ sở dữ liệu while(rs.next()) System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getString(3)); con.close(); }catch(Exception e){ System.out.println(e);} } } 4.4 Thao tác xử lý trên CSDL Hướng dẫn các thao tác xử lý trên cơ sở dữ liệu thông qua ví dụ quản lý nhân viên. Hình 4.6: Ví dụ Quản lý nhân viên Yêu cầu: - Dữ liệu được tải vào bảng (JTable) khi form được mở. - Khi người dùng chọn một dòng trong bảng thì dữ liệu được hiển thị vào các điều khiển JText ở phía trên. - Thực hiện các chức năng thêm, xóa, sửa, cập nhật. KHOA CÔNG NGHỆ THÔNG TIN 74
  75. Chương 4: Lập trình cơ sở dữ liệu Hướng dẫn thực hiện Bước 1: Thiết kế form Hình 4.7: Bước 1 Thiết kế form Bước 2: Chuẩn bị cơ sở dữ liệu cho quản lý nhân viên Hình 4.8: Bước 2 Chuẩn bị cơ sở dữ liệu KHOA CÔNG NGHỆ THÔNG TIN 75
  76. Chương 4: Lập trình cơ sở dữ liệu Bước 3: Viết mã để tải dữ liệu vào Jtable Hình 4.9: Bước 3 Viết mã Bước 4: Viết mã thực hiện chức năng nhấn chọn dòng trong JTable Hình 4.10: Viết mã thực hiện chức năng chọn dòng trong JTable Bước 5: Viết mã thực hiện chức năng New Hình 4.11: Viết mã thực hiện chức năng chọn New KHOA CÔNG NGHỆ THÔNG TIN 76
  77. Chương 4: Lập trình cơ sở dữ liệu Bước 6: Viết mã thực hiện chức năng Save Hình 4.12: Viết mã thực hiện chức năng Save Bước 7: Viết mã thực hiện chức năng Update Hình 4.13: Viết mã thực hiện chức năng Update Bước 8: Viết mã thực hiện chức năng Delete KHOA CÔNG NGHỆ THÔNG TIN 77
  78. Chương 4: Lập trình cơ sở dữ liệu Hình 4.14: Viết mã thực hiện chức năng Delete KHOA CÔNG NGHỆ THÔNG TIN 78
  79. Chương 4: Lập trình cơ sở dữ liệu BÀI TẬP CHƯƠNG 4 Bài tập 1: Viết chương trình để kiểm tra kiến thức java cơ bản. Trong khi chờ kết quả, người dùng có thể đánh dấu câu hỏi để xem lại. KHOA CÔNG NGHỆ THÔNG TIN 79
  80. Chương 4: Lập trình cơ sở dữ liệu Bài tập 2: Viết ứng dụng quản lý thư viện gồm có người dùng và chức năng người dùng như sau: Người dùng hệ thống: Admin (quản trị) và Libraian (thủ thư) Yêu cầu chức năng đối với người dùng: 1. Admin add/view/delete librarian logout 2. Librarian add/view books issue books (cho mượn sách) View issued books (xem sách đã mượn) Return Books Logout KHOA CÔNG NGHỆ THÔNG TIN 80
  81. Chương 4: Lập trình cơ sở dữ liệu KHOA CÔNG NGHỆ THÔNG TIN 81
  82. Chương 4: Lập trình cơ sở dữ liệu Bài tập 3: Viết ứng dụng quản lý việc thanh toán học phí của sinh viên. Người dùng hệ thống: Admin và Accountant (kế toán) Yêu cầu chức năng: 1. Admin - add/view/edit/delete accountant - logout 2. Accountant - add/view/edit/delete students - check due fee - logout KHOA CÔNG NGHỆ THÔNG TIN 82
  83. Chương 4: Lập trình cơ sở dữ liệu KHOA CÔNG NGHỆ THÔNG TIN 83
  84. Chương 4: Lập trình cơ sở dữ liệu KHOA CÔNG NGHỆ THÔNG TIN 84
  85. Chương 4: Lập trình cơ sở dữ liệu KHOA CÔNG NGHỆ THÔNG TIN 85
  86. Chương 4: Lập trình cơ sở dữ liệu KHOA CÔNG NGHỆ THÔNG TIN 86
  87. TÀI LIỆU THAM KHẢO [1] Phạm Văn Trung & Cộng sự, “Lập trình Java căn bản”, Xây dựng, 2018. [2] Trần Đan Thư, “Lập trình Java căn bản”, Lao động xã hội, 2005. [3] Tập bài giảng FPoly, Lập trình Java 1,2, 3 Cao đẳng FPoly, 2012. [4] JavaTpoint, Ngôn ngữ Java, Liên kết Ngày truy cập 26/09/2020. [5] Oracle Java Document, Luồng nhập xuất, Liên kết Ngày truy cập 24/09/2020. [6] Oracle Java Document, “Creating a GUI with Swing”, Liên kết Ngày truy cập 15/10/2020. [7] Oracle Java Document, “Learning the Java Language”, Liên kết Ngày truy cập 15/10/2020. KHOA CÔNG NGHỆ THÔNG TIN 87
  88. DANH MỤC HÌNH ẢNH Hình 1.1: JDK - Nguồn [4] 9 Hình 2.1: Ví dụ nội dung cơ bản của tập tin Java 12 Hình 2.2: Kết quả Ví dụ 16 Hình 2.3: Kết quả ví dụ 16 Hình 2.4: Kết quả 21 Hình 2.5: Mảng - Nguồn [3] 21 Hình 2.6: Ví dụ sắp xếp mảng 23 Hình 2.7: Ví dụ sắp xếp giảm dần 24 Hình 2.8: Kết quả 25 Hình 2.9: Luồng nhập - Nguồn [5] 28 Hình 2.10: Các lớp của luồng nhập – Nguồn [5] 29 Hình 2.11: Luồng xuất - Nguồn [5] 29 Hình 2.12: Các lớp luồng xuất – Nguồn [5] 29 Hình 2.13: Kết quả xuất ký tự vào tập tin 30 Hình 2.14: Kết quả xuất chuỗi vào tập tin 31 Hình 2.15: Nội dung tập tin sẽ được đọc 32 Hình 3.1: Hình minh họa giao diện 34 Hình 3.2: Tạo Package 35 Hình 3.3: Tạo lớp 35 Hình 3.4: Cấu trúc chung của một giao diện 36 Hình 3.5: Các lớp trong AWT 37 Hình 3.6: Các lớp của Swing 38 Hình 3.7: Ví dụ BorderLayout 39 Hình 3.8: Ví dụ FlowLayout 41 Hình 3.9: Ví dụ GridLayout 43 Hình 3.10: Ví dụ GridBagLayout 45 Hình 3.11: Ví dụ BoxLayout 47 KHOA CÔNG NGHỆ THÔNG TIN 88
  89. Hình 3.12: Ví dụ GroupLayout 48 Hình 3.13: Ví dụ CardLayout 50 Hình 3.14: Ví dụ ScrollPaneLayout 52 Hình 3.15: Ví dụ SpringLayout 53 Hình 3.16: JFrame 56 Hình 3.17: Swing Containers 56 Hình 3.18: Swing Controls 57 Hình 3.19: JRadioButton 58 Hình 3.20: JComboBox 58 Hình 3.21: JOptionPane dạng Confirm 58 Hình 3.24: JOptionPane dạng Message 59 Hình 3.22: JOptionPane dạng Input 59 Hình 3.23: Ví dụ form Đăng nhập 59 Hình 3.25: Xử lý sự kiện đăng nhập 60 Hình 3.26: Bước 1- Xử lý sự kiện 60 Hình 3.27: Ví dụ Bắt sự kiện với JRadio 61 Hình 3.28: Chọn sự kiện 63 Hình 3.29: Bắt sự kiện với JComboBox 64 Hình 3.30: Chọn sự kiện 65 Hình 4.1: Kiến trúc JDBC 69 Hình 4.2: JDBC-ODBC Bridge Driver 70 Hình 4.3: Native Driver 70 Hình 4.4: Network Protocol Driver 71 Hình 4.5: Thin Driver 71 Hình 4.6: Ví dụ Quản lý nhân viên 74 Hình 4.7: Bước 1 Thiết kế form 75 Hình 4.8: Bước 2 Chuẩn bị cơ sở dữ liệu 75 Hình 4.9: Bước 3 Viết mã 76 Hình 4.10: Viết mã thực hiện chức năng chọn dòng trong JTable 76 KHOA CÔNG NGHỆ THÔNG TIN 89
  90. Hình 4.11: Viết mã thực hiện chức năng chọn New 76 Hình 4.12: Viết mã thực hiện chức năng Save 77 Hình 4.13: Viết mã thực hiện chức năng Update 77 Hình 4.14: Viết mã thực hiện chức năng Delete 78 KHOA CÔNG NGHỆ THÔNG TIN 90
  91. DANH MỤC BẢNG Bảng 2.1: Kiểu dữ liệu 13 Bảng 2.2: Toán tử số học 14 Bảng 2.3: Toán tử so sánh 15 Bảng 2.4: Toán tử luận lý 15 Bảng 2.5: Bảng ký tự đặc biệt 24 Bảng 2.6: Phương thức của chuỗi 25 Bảng 2.7: Kiểu dữ liệu cơ sở và lớp bao tương ứng 26 Bảng 2.8: Phương thức của FileOutputStream 30 Bảng 2.9: Phương thức FileInputStream 31 KHOA CÔNG NGHỆ THÔNG TIN 91