Giáo trình Java cơ sở

Java em là ai

Java là ngôn ngữ lập trình hướng đối tượng, do vậy không thể dùng Java để

viết một chương trình hướng chức năng. Java có thể giải quyết hầu hết các côngviệc mà các ngôn ngữ khác có thể làm được.

Java là ngôn ngữ vừa biên dịch vừa thông dịch. Đầu tiên mã nguồn được

biên dịch bằng công cụ JAVAC để chuyển thành dạng ByteCode. Sau đó được

thực thi trên từng loại máy cụ thể nhờ chương trình thông dịch JAVA. Mục tiêu

của các nhà thiết kế Java là cho phép người lập trình viết chương trình một lần

nhưng có thể chạy trên bất cứ phần cứng cụ thể, thế nên khẩu hiệu của các nhà

thiết kế Java là “Write One, Run Any Where”.

Ngày nay, Java được sử dụng rộng rãi để viết chương trình chạy trên

Internet. Nó là ngôn ngữ lập trình hướng đối tượng độc lập thiết bị, không phụ

thuộc vào hệ điều hành. Java không chỉ dùng để viết các ứng dụng chạy đơn lẻ hay

trong mạng mà còn để xây dựng các trình điều khiển thiết bị cho điện thoại di

động, PDA,

pdf 193 trang kimcuc 19420
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Java cơ sở", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

Tóm tắt nội dung tài liệu: Giáo trình Java cơ sở

Giáo trình Java cơ sở
Bé gi¸o dôc vμ ®μo t¹o 
Trêng ®¹i häc s ph¹m kü thuËt hng yªn 
---------------ooo------------------ 
§Ò c¬ng bµi gi¶ng Java c¬ së 
Chương 1 
CÁC KHÁI NIỆM CƠ BẢN 
BÀI 1. LÀM QUEN VỚI JAVA 
I. Lịch sử java 
Java là một ngôn ngữ lập trình được Sun Microsystems giới thiệu vào tháng 
6 năm 1995. Từ đó, nó đã trở thành một công cụ lập trình của các lập trình viên 
chuyên nghiệp. Java được xây dựng trên nền tảng của C và C++. Do vậy nó sử 
dụng các cú pháp của C và các đặc trưng hướng đối tượng của C++. 
Ban đầu Java được thiết kế để làm ngôn ngữ viết chương trình cho các sản 
phẩm điện tử dân dụng như đầu video, tivi, điện thoại, máy nhắn tin.. . Tuy nhiên 
với sự mãnh mẽ của Java đã khiến nó nổi tiếng đến mức vượt ra ngoài sự tưởng 
tượng của các nhà thiết kế ra nó. 
Java khởi thuỷ tên là Oak- là cây sồi mọc ở phía sau văn phòng của nhà 
thiết kế chính ông Jame Gosling, sau này ông thấy rằng đã có ngôn ngữ lập trình 
tên Oak rồi, do vậy nhóm thiết kế quyết định đổi tên, “Java” là cái tên được chọn, 
Java là tên của một quán cafe mà nhóm thiết kế java hay đến đó uống. 
II. Java em là ai 
 Java là ngôn ngữ lập trình hướng đối tượng, do vậy không thể dùng Java để 
viết một chương trình hướng chức năng. Java có thể giải quyết hầu hết các công 
việc mà các ngôn ngữ khác có thể làm được. 
Java là ngôn ngữ vừa biên dịch vừa thông dịch. Đầu tiên mã nguồn được 
biên dịch bằng công cụ JAVAC để chuyển thành dạng ByteCode. Sau đó được 
thực thi trên từng loại máy cụ thể nhờ chương trình thông dịch JAVA. Mục tiêu 
của các nhà thiết kế Java là cho phép người lập trình viết chương trình một lần 
nhưng có thể chạy trên bất cứ phần cứng cụ thể, thế nên khẩu hiệu của các nhà 
thiết kế Java là “Write One, Run Any Where”. 
Ngày nay, Java được sử dụng rộng rãi để viết chương trình chạy trên 
Internet. Nó là ngôn ngữ lập trình hướng đối tượng độc lập thiết bị, không phụ 
thuộc vào hệ điều hành. Java không chỉ dùng để viết các ứng dụng chạy đơn lẻ hay 
trong mạng mà còn để xây dựng các trình điều khiển thiết bị cho điện thoại di 
động, PDA,  
II. Một số đặc trưng của java 
1.Đơn giản 
Những người thiết kế mong muốn phát triển một ngôn ngữ dễ học và quen 
thuộc với đa số người lập trình. Java tựa như C++, nhưng đã lược bỏ đi các đặc 
trưng phức tạp, không cần thiết của C và C++ như: thao tác con trỏ, thao tác định 
nghĩa chồng toán tử (operator overloading), Java không sử dụng lệnh “goto” 
cũng như file header (.h). Cấu trúc “struct” và “union” cũng được loại bỏ khỏi 
Java. Nên có người bảo Java là “C++--“, ngụ ý bảo java là C++ nhưng đã bỏ đi 
những thứ phức tạp, không cần thiết. 
2. Hướng đối tượng 
Có thể nói java là ngôn ngữ lập trình hoàn toàn hướng đối tượng, tất cảc 
trong java đều là sự vật, đâu đâu cũng là sự vật. 
3. Độc lập với hệ nền 
Mục tiêu chính của các nhà thiết kế java là độc lập với hệ nền hay còn gọi 
là độc lập phần cứng và hệ điều hành. Đây là khả năng một chương trình được viết 
tại một máy nhưng có thể chạy được bất kỳ đâu 
Tính độc lập với phần cứng được hiểu theo nghĩa một chương trình Java 
nếu chạy đúng trên phần cứng của một họ máy nào đó thì nó cũng chạy đúng trên 
tất cả các họ máy khác. Một chương trình chỉ chạy đúng trên một số họ máy cụ thể 
được gọi là phụ thuộc vào phần cứng. 
Tính độc lập với hệ điều hành được hiểu theo nghĩa một chương trình Java 
có thể chạy được trên tất cả các hệ điều hành. Một chương trình chỉ chạy được trên 
một số hệ điều hành được gọi là phụ thuộc vào hệ điều hành. 
Các chương trình viết bằng java có thể chạy trên hầu hết các hệ nền mà 
không cần phải thay đổi gì, điều này đã được những người lập trình đặt cho nó 
một khẩu hiệu ‘viết một lần, chạy mọi nơi’, điều này là không thể có với các ngôn 
ngữ lập trình khác. 
 Đối với các chương trình viết bằng C, C++ hoặc một ngôn ngữ nào khác, 
trình biên dịch sẽ chuyển tập lệnh thành mã máy (machine code), hay lệnh của bộ 
vi xử lý. Những lệnh này phụ thuộc vào CPU hiện tại trên máy bạn. Nên khi muốn 
chạy trên loại CPU khác, chúng ta phải biên dịch lại chương trình. 
4. Mạnh mẽ Java là ngôn ngữ yêu cầu chặt chẽ về kiểu dữ liệu, việc ép 
kiểu tự động bừa bãi của C, C++ nay được hạn chế trong Java, điều này làm 
chương trình rõ ràng, sáng sủa, ít lỗi hơn.Java kiểm tra lúc biên dịch và cả trong 
thời gian thông dịch vì vậy Java loại bỏ một một số loại lỗi lập trình nhất 
định.Java không sử dụng con trỏ và các phép toán con trỏ. Java kiểm tra tất cả các 
truy nhập đến mảng, chuỗi khi thực thi để đảm bảo rằng các truy nhập đó không ra 
ngoài giới hạn kích thước. 
Trong các môi trường lập trình truyền thống, lập trình viên phải tự mình 
cấp phát bộ nhớ. Trước khi chương trình kết thúc thì phải tự giải phóng bộ nhớ đã 
cấp. Vấn đề nảy sinh khi lập trình viên quên giải phóng bộ nhớ đã xin cấp trước 
đó. Trong chương trình Java, lập trình viên không phải bận tâm đến việc cấp phát 
bộ nhớ. Qúa trình cấp phát, giải phóng được thực hiện tự động, nhờ dịch vụ thu 
nhặt những đối tượng không còn sử dụng nữa (garbage collection). 
Cơ chế bẫy lỗi của Java giúp đơn giản hóa qúa trình xử lý lỗi và hồi phục 
sau lỗi. 
5. Hỗ trợ lập trình đa tuyến 
Đây là tính năng cho phép viết một chương trình có nhiều đoạn mã lệnh 
được chạy song song với nhau. Với java ta có thể viết các chương trình có khả 
năng chạy song song một cách dễ dàng, hơn thế nữa việc đồng bộ tài nguyên dùng 
chung trong Java cũng rất đơng giản. Điều này là không thể có đối với một số 
ngôn ngữ lập trình khác như C/C++, pascal  
6. Phân tán 
Java hỗ trợ đầy đủ các mô hình tính toán phân tán: mô hình client/server, 
gọi thủ tục từ xa 
7. Hỗ trợ internet 
Mục tiêu quan trọng của các nhà thiết kế java là tạo điều kiện cho các nhà 
phát triển ứng dụng có thể viết các chương trình ứng dụng internet và web một 
cách dễ dàng, với java ta có thể viết các chương trình sử dụng các giao thức TCP, 
UDP một cách dễ dàng, về lập trình web phía máy khách java có công nghệ java 
applet, về lập trình web phía máy khách java có công nghệ servlet/JSP, về lập 
trình phân tán java có công nghệ RMI, CORBA, EJB, Web Service. 
8. Thông dịch 
Các chương trình java cần được thông dịch trước khi chạy, một chương 
trình java được biên dịch thành mã byte code mã độc lập với hệ nền, chương trình 
thông dịch java sẽ ánh xạ mã byte code này lên mỗi nền cụ thể, điều này khiến 
java chậm chạp đi phần nào. 
 III. Các kiểu ứng dụng Java 
 Với Java ta có thể xây dựng các kiểu ứng dụng sau: 
1. Ứng dụng Applets 
 Applet là chương trình Java được tạo ra để sử dụng trên Internet thông qua 
các trình duyệt hỗ trợ Java như IE hay Netscape. Applet được nhúng bên trong 
trang Web. Khi trang Web hiển thị trong trình duyệt, Applet sẽ được tải về và thực 
thi tại trình duyệt. 
2. Ứng dụng dòng lệnh (console) 
Các chương trình này chạy từ dấu nhắc lệnh và không sử dụng giao diện đồ 
họa. Các thông tin nhập xuất được thể hiện tại dấu nhắc lệnh. 
3. Ứng dụng đồ họa 
Đây là các chương trình Java chạy độc lập cho phép người dùng tương tác 
qua giao diện đồ họa. 
4. JSP/Servlet 
Java thích hợp để phát triển ứng dụng nhiều lớp. Applet là chương trình đồ 
họa chạy trên trình duyệt tại máy trạm. Ở các ứng dụng Web, máy trạm gửi yêu 
cầu tới máy chủ. Máy chủ xử lý và gửi kết quả trở lại máy trạm. Các Java API 
chạy trên máy chủ chịu trách nhiệm xử lý tại máy chủ và trả lời các yêu cầu của 
máy trạm. Các Java API chạy trên máy chủ này mở rộng khả năng của các ứng 
dụng Java API chuẩn. Các ứng dụng trên máy chủ này được gọi là các 
JSP/Servlet. hoặc Applet tại máy chủ. Xử lý Form của HTML là cách sử dụng đơn 
giản nhất của JSP/Servlet. Chúng còn có thể được dùng để xử lý dữ liệu, thực thi 
các giao dịch và thường được thực thi thông qua máy chủ Web. 
5. Ứng dụng cơ sở dữ liệu 
Các ứng dụng này sử dụng JDBC API để kết nối tới cơ sở dữ liệu. Chúng 
có thể là Applet hay ứng dụng, nhưng Applet bị giới hạn bởi tính bảo mật. 
6. Ứng dụng mạng 
 Java là một ngôn ngữ rất thích hợp cho việc xây dựng các ứng dụng mạng. 
Với thư viện Socket bạn có thể lập trình với hai giao thức: UDP và TCP. 
7. Ứng dụng nhiều tầng 
 Với Java bạn có thể xây dựng phân tán nhiều tầng với nhiều hỗ trợ khác 
nhau như: RMI, CORBA, EJB, Web Service 
8. Ứng dụng cho các thiết bị di động 
 Hiện nay phần lớn các thiết bị di động như: Điện thoại di động, máy trợ 
giúp cá nhân đều hỗ trợ Java. Thế nên bạn có thể xây dựng các ứng dụng chạy 
trên các thiết bị di động này. Đây là một kiểu ứng dụng khá hấp dãn, bởi vì các 
thiết bị di động này ngày càng phổ biến và nhu cầu có các ứng dụng chạy trên đó, 
đặc biệt là các ứng dụng mang tính chất giải trí như game 
IV. Máy ảo Java (JVM-Java Virtual Machine) 
Máy ảo là một phần mềm mô phỏng một máy tính thật (máy tính ảo). Nó có 
tập hợp các lệnh logic để xác định các hoạt động của máy tính và có một hệ điều 
hành ảo. Người ta có thể xem nó như một máy tính thật (máy tính có phần cứng 
ảo, hệ điều hành ảo). Nó thiết lập các lớp trừu tượng cho: Phần cứng bên dưới, hệ 
điều hành, mã đã biên dịch. 
Trình biên dịch chuyển mã nguồn thành tập các lệnh của máy ảo mà không phụ 
thuộc vào phần cứng và hệ điều hành cụ thể. Trình thông dịch trên mỗi máy sẽ 
chuyển tập lệnh này thành chương trình thực thi. Máy ảo tạo ra một môi trường 
bên trong để thực thi các lệnh bằng cách: 
1 Nạp các file .class 
2 Quản lý bộ nhớ 
3 Dọn “rác” 
Việc không nhất quán của phần cứng làm cho máy ảo phải sử dụng ngăn xếp để 
lưu trữ các thông tin sau: 
1 Các “Frame” chứa các trạng thái của các phương thức. 
2 Các toán hạng của mã bytecode. 
3 Các tham số truyền cho phương thức. 
4 Các biến cục bộ. 
Khi JVM thực thi mã, một thanh ghi cục bộ có tên “Program Counter” được 
sử dụng. Thanh ghi này trỏ tới lệnh đang thực hiện. Khi cần thiết, có thể thay đổi 
nội dung thanh ghi để đổi hướng thực thi của chương trình. Trong trường hợp 
thông thường thì từng lệnh một nối tiếp nhau sẽ được thực thi. 
Một khái niệm thông dụng khác trong Java là trình biên dịch “Just In Time-JIT”. 
Các trình duyệt thông dụng như Netscape hay IE đều có JIT bên trong để tăng tốc 
độ thực thi chương trình Java. Mục đích chính của JIT là chuyển tập lệnh bytecode 
thành mã máy cụ thể cho từng loại CPU. Các lệnh này sẽ được lưu trữ và sử dụng 
mỗi khi gọi đến. 
BÀI 2 NỀN TẢNG CỦA JAVA 
I. Tập ký tự dùng trong java 
Mọi ngôn ngữ nói chung, ngôn ngữ lập trình nói riêng đều phải xây dựng 
trên một tập hợp chữ cái (hay còn gọi là bảng chữ cái), các kí tự được nhóm lại 
theo một cách nào đó để tạo thành các từ, các từ lại được nhóm lại thành các câu 
(trong ngôn ngữ lập trình gọi là câu lệnh), một chương trình máy tính tính là một 
tập các câu lệnh được bố trí theo một trật tự mà người viết ra chúng sắp đặt 
 Ngôn ngữ java được được xây dựng trên bảng chữ cái unicode, do vậy ta có 
thể dùng các kí tự unicode để đặt tên cho các định danh. 
II. Từ khoá của Java 
Mỗi ngôn ngữ lập trình có một tập các từ khoá, người lập trình phải sử 
dụng từ khoá theo đúng nghĩa mà người thiết kế ngôn ngữ đã đề ra, ta không thể 
định nghĩa lại nghĩa của các từ khoá, như sử dụng nó để đặt tên biến, hàm.. 
Sau đây là một số từ khoá thường gặp: 
Từ khóa Mô tả 
abstract Sử dụng để khai báo lớp, phương thức trừu tượng 
boolean Kiểu dữ liệu logic 
break Được sử dụng để kết thúc vòng lặp hoặc cấu trúc switch 
byte kiểu dữ liệu số nguyên 
case được sử dụng trong lện switch 
cast Chưa được sử dụng (để dành cho tương lai) 
catch được sử dụng trong xử lý ngoại lệ 
char kiểu dữ liệu ký tự 
class Dùng để khai báo lớp 
const Chưa được dùng 
continue được dùng trong vòng lặp để bắt đầu một vòng lặp mới 
default được sử dụng trong lệnh switch 
do được dùng trong vòng lặp điều kiện sau 
double kiểu dữ liệu số thực 
else khả năng lựa chọn thứ hai trong câu lệnh if 
extends chỉ rằng một lớp đựơc kế thừa từ một lớp khác 
false Gía trị logic 
final Dùng để khai báo hằng số, phương thức không thể ghi đè, hoặc lớp 
không thể kế thừa 
finally phần cuối của khối xử lý ngoại lệ 
float kiểu số thực 
for Câu lệnh lặp 
goto Chưa được dùng 
if Câu lệnh lựa chọn 
implements chỉ rằng một lớp triển khai từ một giao diện 
import Khai báo sử dụng thư viện 
instanceof kiểm tra một đối tượng có phải là một thể hiện của lớp hay không 
interface sử dụng để khai báo giao diện 
long kiểu số nguyên 
native Khai báo phương thức được viết bằng ngông ngữ biên dịch C++ 
new tạo một đối tượng mới 
null một đối tượng không tồn tại 
package Dùng để khai báo một gói 
private đặc tả truy xuất 
protected đặc tả truy xuất 
public đặc tả truy xuất 
return Quay từ phương thức về chỗ gọi nó 
short kiểu số nguyên 
static Dùng để khai báo biến, thuộc tính tĩnh 
super Truy xuất đến lớp cha 
switch lệnh lựa chọn 
synchronized một phương thức độc quyền truy xuất trên một đối tượng 
this Ám chỉ chính lớp đó 
throw Ném ra ngoại lệ 
throws Khai báo phương thức ném ra ngoại lệ 
true Giá trị logic 
try sử dụng để bắt ngoại lệ 
void Dùng để khai báo một phương thức không trả về giá trị 
while Dùng trong cấu trúc lặp 
III. Định danh (tên) 
Tên dùng để xác định duy nhất một đại lượng trong chương trình. Trong java 
tên được đặt theo quy tắc sau: 
- Không trùng với từ khoá 
- Không bắt đầu bằng một số, tên phải bắt đầu bằng kí tự hoặc bắt đầu bằng kí 
$,_ 
- Không chứa dấu cách, các kí tự toán học như +, -, *,/, %.. 
- Không trùng với một định danh khác trong cùng một phạm vi 
chú ý: 
- Tên nên đặt sao cho có thể mô tả được đối tượng trong thực tế 
- Giống như C/C++, java có phân biệt chữ hoa chữ thường 
- Trong java ta có thể đặt tên với độ dài tuỳ ý 
- Ta có thể sử dụng các kí tự tiếng việt để đặt tên 
Quy ước về đặt tên trong java 
Ta nên đặt tên biến, hằng, lớp, phương thức sao cho nghĩa của chúng rõ ràng, 
dễ hiểu, khoa học và mang tính ước lệ quốc tế. Do java có phân biệt chữ hoa, chữ 
thường nên ta phải cẩn thận và chú ý. 
Sau đây là quy ước đặt tên trong java (chú ý đây chỉ là quy ước do vậy không 
bắt buộc phải tuân theo quy ước này): 
• Đối với biến và phương thức thì tên bao giờ cũng bắt đầu bằng ký tự thường, 
nếu tên có nhiều từ thì ghép lại thì: ghép tất cả các từ thành một, ghi từ đầu tiên 
chữ thường, viết hoa kí tự đầu tiên của mỗi từ theo sau trong tên, ví dụ area, 
radius, readInteger 
- Đối với tên lớp, giao diện ta viết hoa các kí tự đầu tiên của mỗi từ trong tên, ví 
dụ lớp WhileTest, Circle 
• Tên hằng bao giờ cũng viết hoa, nếu tên gồm nhiều từ thì chúng được nối với 
hau bởi kí tự ghạch dưới ‘_’, ví dụ PI, MAX_VALUE 
IV. Cấu trúc một chương trình java 
- Mỗi ứng dụng Java bao gồm một hoặc nhiều đơn vị biên dịch (mỗi đơn vị 
biên dịch là một tệp tin có phần mở rộng Java) 
- Mỗi đơn vị biên dịch bao gồm một hoặc nhiều lớp 
- Mỗi ứng dụng độc lập phải có duy nhất một phương thức main (điểm bắt đầu 
của ứng dụng) 
- Mỗi đơn vị biên dịch có nhiều nhất một lớp được khai báo là public, nếu như 
trong đơn vị biên dịch có lớp public thì tên của đơn vị biên dịch phải trùng với tên 
của lớp public (giống hệt nhau cả ký tự hoa lẫn ký tự thường) 
- Bên trong thân của mối lớp ta khai báo các thuộc tính, phương thức của lớp 
đó, Java là ngôn ngữ hướng đối tượng, do vậy mã lệnh phải nằm trong lớp nào đó. 
Mỗi lệnh đều được  ...  cả các thành phần trong thư 
viện awt. Chúng chỉ thay thế một phần của awt như: Button, Panel, TextFeild, v.v. 
Còn các lớp trợ giúp khác trong awt như : Graphics, Color, Font, FontMetrics, v.v. 
vẫn không thay đổi. Bên cạnh đó các thành phần Swing còn sử dụng mô hình sử lý 
sự kiện của awt. 
I. Giới thiệu về hệ thống đồ hoạ của Java 
1. Giới thiệu chung 
Thiết kế API cho lập trình đồ hoạ của Java là một ví dụ hoàn hảo về cách dùng 
lớp, sự kế thừa và giao diện. API cho lập trình độ hoạ bao gồm một tập rất nhiều 
lớp nhằm trợ giúp xây dựng các thành phần giao diện khác nhau như: cửa sổ,nút 
ấn, ô văn bản, menu, hộp kiểm, v.v. Mối quan hệ kế thừa giữa các thành phần này 
được mô tả trong hình sau: 
1 Componient Đây là lớp (trừu tượng) cha của mọi lớp giao diện người dùng. 
Lớp này cung cấp các thuộc tính, hành vi cơ bản nhất của tất cả các thành 
phần giao diện. 
2 Container Là một vật chứa dùng để ghép nhóm các thành phần giao diện 
khác. Mỗi vật chứa có một lớp quản lý hiển thị, lớp quản lý hiển thị có 
trách nhiệm bố trí cách thức hiển thị các thành phần bên trong. Hai vật chứa 
hay được sử dụng nhất la JFrame và JPanel. 
3 Jcomponient Là lớp cha của mọi thành phần Swing ligth weight, được vẽ 
trực tiếp lên canvas bằng mã lệnh Java. 
4 Window Được sử dụng để tạo ra một cửa sổ, Thông thường ta hay sử dụng 
hai lớp con của nó là JFrame và JDialog. 
5 JFrame là cửa sổ không lồng bên trong cửa sổ khác. 
6 JDialog là một cửa sổ được hiển thị dưới dạng modal. 
7 JAplet là lớp cha của mọi lớp ứng dụng aplet. 
8 JPanel là một vật chứa, lưu giữ các thành phần giao diện người dùng. 
9 Graphics là lớp trừu tượng cung cấp ngữ cảnh đồ hoạ để vẽ các đối tượng 
đồ hoạ như: Đường thẳng, đường tròn, hình ảnh 
10 Color lớp này biểu diễn một mầu sắc. 
11 Font lớp này biểu thị cho một font đồ hoạ. 
12 FontMetrics là một lớp trừu tượng dùng để xác định các thuộc tính của 
Font. 
Tất cả các thành phần đồ hoạ trong thư viện Swing được nhóm trong gói 
javax.swing. Đa số các thành phần trong thư viện Swing đều có tiếp đầu ngữ là ‘J’, 
Ví dụ một nút lệnh trong thư viện Swing có tên là JButton, một memu có tên là 
JMenu. 
Tất cả những lớp khác được liệt kê trong hình dưới đây 
Chú ý: Đừng pha trộn các thành phần giao diện swing và awt trong cùng một ứng 
dụng. Chẳng hạn như đừng nên đặt một JButton vào một Panel và đừng nên đặt 
Button vào JPanel. Việc làm này có thể gây lỗi. 
Một lớp được kế thừa từ lớp JComponent được thể hiện trong hình sau: 
2. Một số phương thức của lớp Component 
Lớp Component cung cấp các thuộc tính, phương thức chung cho các lớp 
con của nó. Sau đây là một số phương thức của lớp Component : 
- Dimension getSize():cho lại đối tượng thuộc lớp Dimension gồm width (chiều 
rộng), height (chiều cao) xác định kích thước của một thành phần tính theo pixel. 
- void setSize(int width, int height) và void setSize(Dimension d) đặt lại kích 
thước của thành phần. 
- Point getLocation(): cho lại tọa độ (kiểu Point) trên cùng bên trái (tọa độ gốc) 
của thành phần đang xét. 
- void setLocation(int x, int y) và void setLocation(Point p) đặt lại các tọa độ được 
chỉ định cho một thành phần. 
- Rectangle getBounds():cho lại đường biên là hình chữ nhật Rectangle bao gồm 
tọa độ gốc và chiều dài, chiều rộng của hình chữ nhật. 
- void setBounds(int x, int y) và void setBounds(Rectangle r):đặt lại đường biên 
cho một thành phần. 
- void setForeground(Color c):được sử dụng để đặt màu vẽ cho thành phần đồ họa 
- void setBackground(Color c):đặt màu nền cho thành phần đồ họa. Các tham số 
của hai hàm này là đối tượng của lớp Color sẽ được giới thiệu ở phần sau. 
- Font getFont(): được sử dụng để biết được font của các chữ đang xử lý trong 
thành phần đồ họa. 
- void setFont(Font f):đặt lại font chữ cho một thành phần. 
- void setEnabled(boolean b):Nếu đối số b của hàm getEnabled() là true thì thành 
phần đang xét hoạt động bình thường, nghĩa là có khả năng kích hoạt (enable), có 
thể trả lời các yêu cầu của người sử dụng và sinh ra các sự kiện như mong muốn. 
Ngược lại, nếu là false thì thành phần tương ứng sẽ không kích hoạt được, nghĩa là 
không thể trả lời được các yêu cầu của người sử dụng. 
- Lưu ý: Tất cả các thành phần giao diện khi khởi tạo đều được kích hoạt 
- void setVisible(boolean b):Một thành phần đồ họa có thể được hiển thị lên màn 
hình (nhìn thấy được) hoặc bị che giấu tùy thuộc vào đối số của hàm setVisible() 
là true hay false. 
3. Lớp Container 
Lớp Container là lớp con của lớp trừu tượng Component. Các lớp chứa (lớp 
con của Container) cung cấp tất cả các chức năng để xây dựng các giao diện đồ 
họa ứng dụng, trong đó có phương thức add() được nạp chồng dùng để bổ sung 
một thành phần vào vật chứa và phương thức remove() cũng được nạp chồng để 
gỡ bỏ một thành phần ra khỏi vật chứa. 
4. Tạo ra Frame 
Lớp JFrame là lớp con của lớp Frame (Frame là lớp con của lớp Window) 
được sử dụng để tạo ra những cửa sổ cho các giao diện ứng dụng GUI. 
Kịch bản chung để tạo ra một cửa sổ là: 
1. Tạo ra một frame có tiêu đề gì đó, ví dụ “My Frame” : 
 JFrame myWindow= new JFrame(“My Frame”); 
2. Xây dựng một cấu trúc phân cấp các thành phần bằng cách sử dụng hàm 
myWindow.getContentPane().add() để bổ sung thêm JPanel hoặc những 
thành phần giao diện khác vào Frame: 
Ví dụ: myWindow.getContentPane().add(new JButton(“OK”));// Đưa vào 
một nút (JButton) có tên “OK” vào frame 
3. Đặt lại kích thước cho frame sử dụng hàm setSize(): 
 myWindow.setSize(200, 300);// Đặt lại khung frame là 200 ( 300 
4. Gói khung frame đó lại bằng hàm pack(): 
 myWindow.pack(); 
5. Cho hiện frame: 
 myWindow.setVisible(true); 
II. Trình quản lý hiển thị trong Java 
 Khi thiết kế giao diện đồ họa cho một ứng dụng, chúng ta phải quan tâm 
đến kích thước và cách bố trí (layout) các thành phần giao diện như: JButton, 
JCheckbox, JTextField, v.v. sao cho tiện lợi nhất đối với người sử dụng. Java có 
các lớp đảm nhiệm những công việc trên và quản lý các thành phần giao diện GUI 
bên trong các vật chứa. 
Bảng sau cung cấp bốn lớp quản lý layout (cách bố trí và sắp xếp) các thành phần 
GUI. 
Tên lớp Mô tả 
FlowLayout Xếp các thành phần giao diện trước tiên theo hàng từ trái qua phải, 
sau đó theo cột từ trên xuống dưới. Cách sắp xếp này là mặc định 
đối với Panel, JPanel ,Applet và JApplet. 
GridLayout Các thành phần giao diện được sắp xếp trong các ô lưới hình chữ 
nhật lần lượt theo hàng từ trái qua phải và theo cột từ trên xuống 
dưới trong một phần tử chứa. Mỗi thành phần giao diện chứa trong 
một ô. 
BorderLayout Các thành phần giao diện (ít hơn 5) được đặt vào các vị trí theo các 
hướng: north (bắc), south (nam), west (tây), east (đông) và center 
(trung tâm)). Cách sắp xếp này là mặc định đối với lớp Window, 
Frame, Jframe, Dialog và JDialog. 
GridBagLayout Cho phép đặt các thành phần giao diện vào lưới hình chữ nhật, 
nhưng một thành phần có thể chiếm nhiều nhiều hơn một ô. 
null Các thành phần bên trong vật chứa không được sẵp lại khi kích 
thước của vật chứa thay đổi. 
Các phương pháp thiết đặt layout 
Để lấy về layout hay để đặt lại layout cho vật chứa, chúng ta có thể sử dụng hai 
phương thức của lớp Container: 
 LayoutManager getLayout(); 
 void setLayout(LayoutManager mgr); 
Các thành phần giao diện sau khi đã được tạo ra thì phải được đưa vào một phần 
tử chứa nào đó. Hàm add() của lớp Container được nạp chồng để thực hiện nhiệm 
vụ đưa các thành phần vào phần tử chứa. 
Component add(Component comp) 
Component add(Component comp, int index) 
Cmponent add(Component comp, Object constraints) 
Cmponent add(Component comp, Object constraints, int index) 
Trong đó, đối số index được sử dụng để chỉ ra vị trí của ô cần đặt thành phần giao 
diện comp vào. Đối số constraints xác định các hướng để đưa comp vào phần tử 
chứa. 
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() 
1. Lớp FlowLayout 
Lớp FlowLayout cung cấp 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 
 Đối số aligment xác định cách sắp theo hàng: từ trái, phải hay trung tâm, 
horizongap và verticalgap là khoảng cách tính theo pixel giữa các hàng 
các cột. Trường hợp mặc định thì khoảng cách giữa các hàng, cột là 5 pixel. 
2. Lớp GridLayout 
Lớ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. 
3.Lớp BorderLayout 
Lớ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. 
Component add(Component comp) 
void add(Component comp, Object constraint) 
public static final String NORTH 
public static final String SOUTH 
public static final String EAST 
public static final String WEST 
public static final String CENTER 
 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. 
III. Xử lý sự kiện trong Java 
Cá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. Trong 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. 
Hình H7-20 Các lớp xử lý các sự kiện 
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ện, 
2. Các lớp sự kiện ở mức thấp. 
1. Ý nghĩa của các lớp 
a. ActionEvent 
Sự kiện này được phát sinh bởi những hoạt 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: 
1 JButton - khi một nút button được khích hoạt, 
2 JList - khi một mục trong danh sách được kích hoạt đúp, 
3 JmenuItem, JcheckBoxMenu, JradioMenu - khi một mục trong thực đơn 
được chọn, 
4 JTextField - khi gõ phím ENTER trong trường văn bản (text). 
b. AdjustmentEvent 
Sự kiện này xẩy ra khi ta điều chỉnh (adjustment) giá trị thanh cuốn (JScollBar) 
1 Scrollbar - khi thực hiện một lần căn chỉnh trong thanh trượt Scrollbar. 
Lớp này có phương thức 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. ItemEvent 
Các thành phần của GUI gây ra các sự kiện về các mục gồm có: 
1 JCheckbox - khi trạng thái của hộp kiểm tra Checkbox thay đổi. 
2 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. 
3 JRadioButton- khi trạng thái của hộp chọn (Option) thay đổi. 
4 JList - khi một mục trong danh sách được chọn hoặc bị loại bỏ chọn. 
5 JCompoBox - khi một mục trong danh sách được chọn hoặc bị loại bỏ 
chọn. 
Lớp ItemEvent có phương thức Object getItem(): Cho lại đối tượng được chọn 
hay vừa bị bỏ chọn. 
d. TextEvent 
Các thành phần của GUI gây ra các sự kiện về text gồm có: 
1 TextArea - khi kết thúc bằng nhấn nút ENTER, 
2 TextField - khi kết thúc bằng nhấn nút ENTER. 
 e. ComponentEvent 
Sự kiện này xuất hiện khi một thành phần bị ẩn đi/hiển ra hoặc thay thay đổi lại 
kích thước. Lớp ComponentEvent có phương thức: 
Component getComponent() 
 Cho lại đối tượng tham chiếu kiểu Component. 
f. 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 
vật chứa (Container). 
g. FocusEvent 
Sự kiện loại này xuất hiện khi một thành phần nhận hoặc mất focus. 
h. 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. Lớp này có các phương 
thức: 
 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. 
i. 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 phương thức: 
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. 
j. PaintEvent 
 Sự kiện này xuất hiện khi một thành phần được vẽ lại, thực tế sự kiện này 
xẩy ra khi phương thức paint()/ update() được gọi đến. 
k. WindowEvent 
 Sự kiện loại này xuất hiện khi thao tác với các Window, chẳng hạn như: 
đóng, phóng to, thu nhỏ.. một cửa sổ. Lớp này có phương thức: 
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. 
Kiểu sự kiện Nguồn gây ra sự kiện Phương thức đang ký, gõ bỏ 
đối tượng lắng nghe 
Giao diện 
Listener lắng 
nghe tương ứng 
AcitionEvent JButton 
JList 
TexField 
addComponentlistener 
removeActiontListener 
AcitionListener 
AdjustmentEvent JScrollbar addAdjustmentListener 
removeAdjustmentListener 
AdjustmentListe
ner 
ItemEvent JCheckbox addItemListener ItemListener 
 JCheckboxMenuItem 
JRadioButton 
JList 
JCompoBox 
removeItemListener 
TextEvent JTextArea 
JTexField 
JTextPane 
JEditorPane 
addTexListener 
removeTextListener 
TextListener 
ComponentEvent Component addComponentListener 
removeComponentListener 
ComponentListe
ner 
ContainerEvent Container 
addContainerListener 
removeContainerListener 
ContainerListen
er 
FocusEvent Component addFocusListener 
removeFocusListener 
FocusListener 
KeyEvent Component addkeyListener 
removeKeyListener 
KeyListener 
MouseEvent Component addMouseListener 
remoMouseListener 
addMouseMotionListener 
remoMouseMotionListener 
MouseMotionLi
stener 
WindowEvent Window addWindowListener 
removeWindowListener 
WindowListener
 3. Một số lớp điều hợp 
Giao diện Listener lắng nghe Lớp điều hợp tương ứng 
AcitionListener Không có lớp điều hợp tương ứng 
AdjustmentListener AdjustmentAdapter 
ItemListener Không có lớp điều hợp tương ứng 
TextListener Không có lớp điều hợp tương ứng 
ComponentListener ComponentAdapter 
ContainerListener ContainerAdapter 
FocusListener FocusAdapter 
KeyListener KeyAdapter 
MouseMotionListener MouseMotionAdapter 
WindowListener WindowAdapter 

File đính kèm:

  • pdfgiao_trinh_java_co_so.pdf