[tính chất bổ sung] < kiểu dữ liệu trả về > < tên phơng thức > [các ngoại public có thể truy cập từ bên ngoài lớp định nghĩa protected chỉ đợc truy cập từ lớp định nghĩa và những lớp d
Trang 1LờI CảM ƠN
Trớc tiên em xin chân thành cảm ơn thầy Lê Văn Minh đã tận tình hớng dẫn và giúp đỡ về tài liệu, thiết bị để em hoàn thành khoá luận này Xin cảm ơn các thầy cô trong khoa Công nghệ thông tin cùng các thầy cô giáo trờng Đại học Vinh đã truyền thụ cho em những tri thức quý báu trong suốt 4 năm học qua Công ơn dạy dỗ của thầy cô chỉ có thể đền đáp bằng thái độ học tập nghiêm túc và hăng say, em
sẽ cố gắng làm đợc điều đó không chỉ trong quá trình làm khoá luận
mà trong cả quá trình công tác sau này.
Sự quan tâm giúp đỡ của bố mẹ, gia đình và bạn bè cũng là một nguồn động viên lớn, con mong rằng những gì làm đợc trong quá trình học tập này sẽ là một phần nhỏ bé đền đáp công ơn của bố
mẹ và lòng tin tởng của mọi ngời.
Vinh ngày 26/05/2003 Sinh viên :Phạm thị Thanh
Trang 2Môc Lôc
Ch¬ng I : §Æt VÊn §Ò
1 Giíi thiÖu vÒ chat
2 Lùa chän c«ng cô thùc hiÖn
Trang 3mà lại rất tốn kém.
Bạn có quá nhiều thời gian rảnh rỗi trong ngày ? Chỉ cẫn đến tra là xong hết việc, nửa ngày còn lại chẳng biết làm gì ? Bạn đã quá mệt mỏi, kiệt sức với đống bài vở ở trờng? Bạn căng thẳng, lo âu, stress vì công việc công ty ? Bạn cô đơn, không tìm ra ngời tâm sự ? Bạn là một cô gái rụt rè, khép kín, không tự tin giao tiếp ở chốn đông ngời ? Hay bạn đang tò mò muốn khám phá thế giới ?
Hoan hô “chat” trên Internet : một bớc tiến vợt lên cả e-mail và newsgroup Vâng, dĩ nhiên e-mail và newsgroup đều rất tuyệt – bạn gửi
th đi và nhận th về Nhng nếu bạn muốn đợc hồi đáp ngay thì sao? Bạn phải nói chuyện thực sự với ai đó
ồ không, không thực sự “nói”, mà là “gõ chữ” đến ngời kia Bạn gõ chữ, họ gõ trả lời tiếp Gần nh là điện đàm, chỉ có điều không có tiếng đằng hắng dọn giọng, không có tiếng cời khúc khích, cũng không có nhiễu xuyên âm Hơi bị chậm nữa Thực ra chat chỉ là một hình thức bắt chớc nghèo nàn của điện đàm nhng dẫu sao nó cũng có nhiều u điểm không thể phủ nhận:
Từ Vinh mà nói chuyện với ngời thân ở California qua Internet rẻ hơn nhiều so với nói chuyện bằng điện thoại
Bạn có thể liên hệ với một ngời mà bạn không nắm số điện thoại, chỉ có
Trang 4Nếu tiếp xúc với ngời nớc ngoài, bạn có dịp trau dồi ngoại ngữ - thờng
là tiếng Anh -đặc biệt là tiếng lóng, ngôn ngữ thông tục
Nguyên tắc cơ bản khi chat trên trang Web là chọn cho mình một
nichname ( biệt hiệu) và chọn phòng tán gẫu
Loại hình trò chuyện thứ ba là gửi thông điệp tức thời (instant
messaging) Đối với loại hình này, bạn sẽ đợc liên lạc kín đáo, tay đôi với ngời nào tuỳ ý Có thể lập ra danh sách những ngời mà bạn muốn trò chuyện, do vậy khi ngời có tên trong danh sách lên Net, bạn sẽ đợc thông báo về điều đó, đồng thời những ngời kia cũng đợc thông báo về tình trạng trực tuyến của bạn Với những lợi ích nh vậy, việc viết một chơng trình chat để có thể chạy đợc trên mạng là một công việc khá thú vị nó liên quan
đến nhiều kiến thức về chuyển thông tin trên mạng, giao diện với ngời dùng, lu trữ thông tin
2 Lựa chọn công cụ thực hiện
Lập trình hớng đối tợng (OOP) là con đờng mới mẻ cho các nhà lập trình Đối tợng là khái niệm cơ sở của OOP Nó không chỉ là những con số, cũng không chỉ là những cấu trúc thông thờng Nó bao gồm các số liệu nh
là những thuộc tính riêng (properties) và các hàm nh là các phơng thức (methods) để nó trao đổi với các đối tợng khác Thay vì phải chuyển cho nhau những số liệu trong hệ thống mở, nh bằng các hàm, trong OOP, các
đối tợng dùng thông báo để gửi thông tin, dữ liệu cho nhau và để nhắc đối tợng kia phải thực hiện nhiệm vụ của mình
Các nguyên lý về làm việc với đối tợng là những điều đầu tiên cần phải biết của lập trình viên Đó là một khối chứa các dữ liệu (gọi là biến, vùng hay thuộc tính) biểu diễn những tính năng của đối tợng và phơng thức biểu diễn các ứng xử của đối tợng trớc tác động của các đối tợng khác hay chính
nó Đối tợng có thể đợc nhân bản hay thêm tính năng mà không làm h các
định nghĩa cũ Khi một chơng trình cần mở rộng, chúng ta chỉ cần định nghĩa thêm các thuộc tính, các phơng thức cho đối tợng sẵn có hay có thể nhân bản thêm cho phù hợp với những hoạt động mới
Các đối tợng có thể mở rộng hay dẫn xuất từ một đối tợng khác, do đó thời gian viết lệnh sẽ giảm đi Quan trọng hơn là, cũng từ điều trên, việc
Trang 5bẫy lỗi và sửa chữa sẽ giảm đi rất nhiều vì ta chỉ cần xem xét trên lớp mới tạo mà thôi.
Sử dụng OOP, ta cũng có sự đơn giản tơng tự Ta tạo một cấu trúc chứa dữ liệu và định nghĩa các phơng thức để làm việc với dữ liệu Nh thế, đối t-ợng tạo và kết hợp dữ liệu bằng mã lệnh Chúng ta có một đối tợng có đủ
Trong trờng hợp này, OOP xác định rõ ràng là thủ tục xuất dữ liệu ra màn hình là riêng của màn hình đó Nghĩa là chúng ta có những đối tợng màn hình khác nhau có các phơng thức xuất dữ liệu ra màn hình khác nhau.Sau hết, nếu Bạn nghĩ rằng: “ nếu tôi có hai màn hình khác nhau thì khi tôi muốn in ra màn hình, tôi cần phải xác định đúng vị trí cần in trên từng màn hình và chú ý đến các tơng tác với ngời dùng ở những cửa sổ khác nhau”, thì Bạn cần nên biết rằng trong OOP, Bạn không cần phải làm điều
đó Bởi vì sau khi Bạn đã trừu tợng hoá đầy đủ các yếu tố của một đối tợng màn hình, lúc bạn sẽ viết thủ tục, các yếu tố cụ thể sẽ không còn ảnh hởng
đến thủ tục bạn viết đối tợng màn hình sẽ tính toán giùm bạn
Tổ chức mã lệnh
Lập trình hớng đối tợng sẽ tổ chức các mã lệnh của bạn một cách gọn gàng vì hai nhân tố sau:
• Khi sử dụng đúng, OOP bắt buộc ta phải tổ chức các mã lệnh thành nhiều đoạn nhỏ để dễ quản lý
• Và vì dùng OOP, mỗi đoạn mã nhỏ đó sẽ đợc tổ chức rất tự nhiên, không cần ta phải suy nghĩ nhiều về việc tố chức
Trang 6Java hớng đối tợng
Sự hỗ trợ lập trình hớng đối tợng là cốt lõi của java Mọi hoạt động, mọi câu lệnh của java đều phải tác động lên và qua các đối tợng Mà tợng trng cho chung là các Lớp (class) Đối tợng là những mẫu (instance) của lớp Trong ý nghĩa này, lớp có thể đợc xem nh một cái khuôn đúc nên các
đối tợng Lấy hình chữ nhật làm ví dụ, ta có thể tạo ra một hình chữ nhật với toạ độ x,y của đỉnh thứ nhất, chiều dài, chiều rộng, cách di chuyển, ph-
ơng thức đổi kích thớc tạo ra một lớp Rectangle, và viết mã lệnh cho nó
Nh thế khi thực hiện các mã lệnh, ta cần tạo ra một mẫu của lớp này Mẫu
ấy chính là một đối tợng Rectangle cụ thể
Sự kế thừa và thiết kế OOP
Để có thể phát triển thêm cho ứng dụng, có một công thức cần theo: + Chia nhỏ mã lệnh thành đơn vị nhỏ nhất:
Khi viết một chơng trình OOP điều cần thiết đầu tiên là phải hình dung
đủ các thành phần Sau đó chia nhỏ chúng thành các đơn vị nhỏ nhất Ví dụ với yếu tố viên đạn, ta có các đơn vị yếu tố nhỏ hơn là có thể cháy, kích th-
ớc viên đạn, tầm sát thơng, số lợng
+ Xem xét các tính chất chung giữa các đơn vị trên:
Bớc kế tiếp là xem xét kỹ mối liên hệ chung giữa các đơn vị thành phần Ví dụ trong chơng trình quản lý th viện, thủ th và ngời mợn đều có tính chung là ngời: có tên tuổi, có chức vụ, có địa chỉ Vậy ta có đa cả hai
đối tợng này vào cùng một lớp?
+ Xem xét sự khác nhau giữa các đơn vị:
Ngợc lại trên, ta sẽ phân tích các đơn vị có điều gì khác biệt mà không thể gom lại Trở lại ví dụ vừa nêu, rõ ràng thủ th là ngời quản lý, coi nh sở hữu cuốn sách, có nhiệm vụ phải nhận lại cuốn sách đã cho mợn, còn ngời mợn phải trả lại cuốn sách đã mợn
+ Tìm tính chất chung nhất của tất cả các đơn vị:
Rất hiếm khi ta không thể tìm thấy một tính chất nào chung cho mọi
đơn vị Nh thế, có thể một đơn vị nào đó không dùng chung bất kỳ tính chất nào với những đơn vị khác Ta hãy xét một chơng trình trò chơi chiến đấu, viên đạn, máy bay, ngời bảo vệ, nhà cửa, rõ ràng là rất khác nhau, tuy vậy
ta có thể thấy những cái chung của máy bay, ngời, viên đạn, có thể di chuyển, mìn, nhà cửa, máy bay, ngời có thể bị nổ, những tính chất chung nào bao trùm lên mọi đơn vị? Có một điều rõ ràng mà bạn có thể quên là chúng đều có thể vẽ trên màn hình Nh vậy chúng ta có lớp Draw_Object.+ Gom các tính chất chung và lặp lại
Ta sắp xếp các đơn vị có chung một số tính chất lại với nhau và lặp lại nhiều lần nh vậy cho đến mức thấp nhất
Trang 7+ Sử dụng các đối tợng để thêm vào theo yêu cầu
Trong nhiều trờng hợp, ngời sử dụng yêu cầu thêm các yếu tố mới Ta chỉ nên tạo những đối tợng mới hơn là định nghĩa những biến mới Điều này dễ thấy ở những ai đã từng lập trình với các ngôn ngữ khác Ta thờng hay tạo ra một biến mới bất kỳ lúc nào ta cần Với OOP, khi cần ta hãy tạo hẳn một đối tợng mới
Chơng II : Ngôn ngữ lập trình java
1 tổng quan về Ngôn ngữ Java
1.1 Ghi chú
Trang 8Chúng ta rất cần các ghi chú để gợi nhớ lại quá trình suy nghĩ của mình, kiểm ngiệm các lập luận và nhất là khi chúng ta cần bổ sung, sửa chữa, nâng cấp chơng trình
Java hỗ trợ hai cách ghi chú:
Chúng ta cũng lu ý rằng True, False dù không nằm trong danh sách các
từ khoá của Java, cũng vẫn là hai giá trị thật sự và có thể coi là từ khóa
1.3 Kiểu dữ liệu
Java có hai loại:
1 Kiểu dữ liệu gốc ( chuẩn) – Primitive type
2 Kiểu dữ liệu dẫn xuất – Reference types
Kiểu dữ liệu gốc là các khối dữ liệu đã đợc xác định trong ngôn ngữ
Nh vật chất đợc cấu tạo từ các nguyên tử, thì các kiểu dữ liệu phức tạp
đợc tạo thành từ các dữ liệu gốc
Các kiểu dữ liệu gốc của Java bao gồm các nhóm sau: số nguyên, số thực( dấu chấm động) ký tự ( character) giá trị đúng sai ( Boolean)
Tơng tự nh C / C++ , trong java, ta khai báo một biến theo mẫu sau
kiểu dữ liệu tên biên
1.4 Đặt tên hằng và biến
Việc đặt trên cho một hằng và biến cần theo những nguyên tắc sau: + Chỉ bắt đầu bằng một ký tự (chữ), một dấu gạch dới hay một dấu dollard $
+ Không có khoảng trắng giữa tên
+ Sau ký tự đầu, có thể dùng các ký tự (chữ), ký số, dấu dollard, dấu gạch dới
+ Không trùng với các từ khoá
Trang 9Chú ý rằng trong Java, có phân biệt chữ thờng và chữ in Ta có thể dùng chữ in nh LONG để biểu thị một biến hay hằng dù trùng với từ khoá long Tuy nhiên chúng tôi đề nghị không dùng cách này
3 Giao tiếp ( inferface)
Chúng ta sẽ tìm hiểu Lớp và Giao tiếp ở đoạn dành riêng, còn Mảng thì tơng đối đơn giản và có liên quan nhiều đến các kiểu dữ liệu gốc sẽ đợc trình bày trong cùng đoạn này
1.5.1 Khai báo:
Đặc trng của mảng là đợc đặt trong cặp ngoặc vuông “[ ]” (bracket symbols) Một mảng đợc khai báo bằng hai cách:
1 Cặp ngoặc vuông đặt sau tên biến
2 Cặp ngoặc vuông đặt sau kiểu dữ liệu
1.5.2 Định vị ( allocation)
Sau khi khai báo, bản thân mảng cha đợc xác định Mảng cần đợc định
vị trong vùng nhớ, nói cách khác cần đợc cấp vùng nhớ Không nh các ngôn ngữ khác, kích thớc của mảng không dợc xác định ngay khi khai báo
1.5.3 Khởi tạo ( initialization)
Cũng có thể định vị một mảng bằng cách liệt kê các phần tử của nó
1.5.4 Truy cập một mảng
Các phần tử trong một mảng luôn đợc đánh số bắt đầu từ số 0 Phần tử
đầu tiên là phần tử thứ 0, và phần tử cuối cùng của một mảng n phần tử sẽ
có số thứ tự là n-1 Ta có thể tham khảo giá trị của một phần tử bằng cách gán số thứ tự của phần tử ta muốn truy cập vào giữa hai cặp ngoặc vuông
1.6 Toán tử và Biểu thức
Toán tử trong một ngôn ngữ thờng đợc để tạo ra hay thay đổi các giá trị của chơng trình Java có một tập hợp rất phong phú các toán tử (còn gọi là tác tử)
Các toán tử đợc chia làm hai loại:
Toán tử đôi: cần có 2 toán hạng, tạo ra một giá trị mới là kết của 2 toán hạng này
Toán tử đơn: chỉ cần một toán hạng, tạo ra một giá trị mới là kết của sự thay đổi giá trị của toán hạng
Trang 101.6.3 Lựa chọn
Khi có sự rẽ nhánh dựa trên một quyết định, ta gọi đó là sự lựa chọn:
1.6.3.1 Lệnh if then
Lệnh if then là một phép thử của một biểu thức Boolean
If < biểu thức Boolean> then < khối lệnh> ;
Nếu biểu thức Boolean đúng, khối lệnh 1 sẽ đợc thực hiện, còn biểu thức đó sai, khối lệnh 1 sẽ bỏ qua
Một hình thức khác của if then là if then else
if < biểu thức boolean> then < khối lệnh 1> else < khối lệnh 2 >
Nếu biểu thức boolean đúng, thực hiện khối lệnh 1, ngợc lại thực hiện khối lệnh 2
Trang 11case < giá trị 1> : < khối lệnh 1 > ;
case < giá trị 2> : < khối lệnh 2 > ;
case < giá trị 3> : < khối lệnh 3 > ;
default : < khối lệnh default > ;
}
Nếu biểu thức có giá trị bằng giá trị 1, thực hiện khối lệnh 1
Nếu biểu thức có giá trị bằng giá trị i, thực hiện khối lệnh i
Còn biểu thức không thỏa mãn tất cả các giá trị đã liệt kê, thực hiện khối lệnh default
1.6.4 Vòng lặp
Vòng lặp là một nguyên lý không thể thiếu trong bất kỳ ngôn ngữ lập trình nào Không có những vòng lặp, việc giải quyết các vấn đề thực tế sẽ chỉ đạt đợc một giới hạn nào đó Các cấu trúc vòng lặp trong Java cũng t-
Lu ý nên sử dụng biến trong vòng lặp một cách rõ ràng vì với việc khai báo biến từ trớc, ta có thể sẽ không nhớ rằng biến đó đã đợc khai báo cha
và đã sử dụng trong tiến trình nào rồi
Thứ hai là khi khai báo trong lòng của vòng lặp, biến sẽ đợc giải phóng sau khi vòng lặp chấm dứt Điều đó làm chơng trình sáng sủa hơn và không phạm những lỗi trong khi chạy do sử dụng biến không hợp lý
Trong các thành phần của cấu trúc loop, ta có thể bỏ bớt một vòng thành phần trong dòng lệnh đầu Nh có thể bỏ qua không ghi bớc nhảy trong dòng thứ nhất và ghi vào bên trong khối lệnh
Trang 121.6.4.2 Vòng lặp while
Cấu trúc lệnh:
while <biểu thức boolean>
<khối lệnh>
Khối lệnh của vòng lặp while đợc thực hiện khi biểu thức boolean còn
có giá trị true Trong cấu trúc, java không hỗ trợ các khởi tạo và các bớc nhảy Ta phải chú ý thực hiện chúng trong quá trình thực hiện khối kệnh Cần thật cẩn thận vì có rất nhiều khi ta tạo ra những vòng lặp vĩnh viễn Nghĩa là biểu thức boolean luôn luôn đúng
Trong trờng hợp này, biểu thức boolean đợc kiểm tra trớc rồi mới thực hiện khối lệnh
1.6.4.3 Vòng lặp do while
Cấu trúc lệnh :
do {
< khối lệnh> ;
} while < biểu thức boolean> ;
Vòng lặp này cho thực hiện khối lệnh rồi mới kiểm tra biểu thức boolean Nếu biểu thức còn đợc thỏa thì tiếp tục thực hiện khối lệnh Lệnh này khác với cấu trúc while ở chỗ là cho phép thực hiện khối lệnh đợc ít nhất một lần
1.6.5 Phép nhảy (jumping)
Trong việc lập trình việc thực hiện các vòng lặp đôi khi không theo hết vòng mà ta có thể xử lý các trờng hợp đặc biệt để thoát khỏi vòng lặp Nh ta cần tìm một giá trị nào đó trong một dãy 1000 phần tử Ta phải thực hiện vòng lặp duyệt dãy, so sánh các phần tử của dãy với giá trị cần tìm từ phần
tử đầu tiên đến phần tử cuối cùng Có thể giá trị đó là giá trị phần tử cuối cùng, nếu vậy ta phải duyệt qua hết dãy Nhng nếu giá trị đó là của phần tử
đầu tiên hay phần tử ở giữa dãy? Rõ ràng là khi tìm thấy, ta phải thôi duyệt dãy Ta nhảy ra khỏi vòng lặp Java hỗ trợ cho những trờng hợp này với các
từ khóa break và continue
Trang 13Lệnh 4 ;
1.6.8 Nhãn ( label)
Không nh các ngôn ngữ khác, Java không hỗ trợ lệnh goto, mặc dù goto có trong bộ từ khóa Java thực hiện việc kết hợp lệnh break hay continue với nhãn để thay thế lệnh goto
Thông thờng để thực hiện điều này, nhà thiết kế chơng trình sẽ thực hiện việc phân tích từ trên xuống (Top- Down Approach) Họ chia nhỏ ch-
ơng trình thành từng phần với những chức năng riêng biệt, rồi tiếp tục chia nhỏ các phần vừa tính đợc thành các phần nhỏ hơn cho đến khi không thể chia nhỏ hơn
• Hàm hay phơng thức trong Java ( và các ngôn ngữ khác) chính là các khối lệnh đơn vị thực hiện những chức năng riêng biệt
Trang 14Trong một vài ngôn ngữ, hàm đợc dùng có phân biệt với thủ tục ( cũng
là một khối lệnh thực hiện một chức năng chuyên biệt nào đó )
• Thủ tục là một khối lệnh khi đợc thực hiện không trả về bất cứ giá trị nào Còn hàm thờng nhận về một giá trị
Vì trong Java không có một hàm nào là toàn cực mà luôn luôn phải tơng ứng với một đối tợng cụ thể, thể hiện hành vi ứng xử của đối tợng, nên kể
từ đây ta chỉ dùng khái niệm phơng thức thay cho khái niệm hàm
Private: Phơng thức này chỉ đợc truy xuất bên trong lớp chứa nó
Public: Có thể đợc truy xuất từ bất kỳ lớp bên ngoàI nào
Protected: Chỉ các lớp là dẫn xuất của lớp chứa phơng thức này mới truy
xuất đợc nó
Default: Nếu không khai báo rõ cách truy xuất, các phơng thức sẽ nhận
giá trị mặc định, đó là chỉ đợc truy xuất trong bản thânlớp đã khai báo nó
^ Cách cập nhật:
static: hay class Phơng thức đợc khai báo là static/class sẽ tác động
không phụ thuộc vào các đối tợng cụ thể Phơng thức loại lớp hay tĩnh tác
động lên toàn thể các mẫu tạo ra từ lớp chứa nó
astract: Phơng thức đơn giản nhất, không cài đặt gì ở trong lớp khai báo
nó Nhng phơng thức này sẽ đợc phát triển trong các lớp là dẫn xuất của lớp hiện hành
final : Khi đợc khai báo là final, phơng thức này đợc bảo vệ không cho các
lớp dẫn xuất khai báo và cài đặt lại (overriding)
native : là phơng thức đợc viết bằng một ngôn ngữ khác Java Giống nh
phơng thức abstract, phơng thức native chỉ có tên gọi và khối lệnh rỗng Nhng khác với abstract, nó đợc cài đặt trong các th viện dùng chung viết bằng ngôn ngữ khác
Synchronyzed: khai báo một phơng thức là synchronyzed sẽ bảo đảm dữ
liệu không bị sai lạc khi cùng một lúc 2 phơng thức truy cập cùng một dữ
Trang 15liệu Đối với một chơng trình đơn giản, điều đó không quan trọng nhng khi ta nghiên cứu việc sử dụng phân tuyến (thread), nó lại là một vấn đề lớn.
1.8 Lớp và đối tợng
Trong phần này ta làm việc với các kiểu dữ liệu dẫn xuất của Java lớp
và giao tiếp Ta cũng sẽ tìm hiểu cơ sở hớng đối tợng của Java thông qua việc tạo các lớp, các đối tợng và những tính chất của chúng
Lớp còn có tính đa dạng (polymorphism) cho phép cài đặt các lớp dẫn xuất rất khác nhau từ cùng một lớp nguồn
Ta định nghĩa một lớp tên MyClass Lu các dòng trên vào một file tên
là MyClass.java, ta có thể biên dịch thành một lớp MyClass trong file CLASS và khi cho thông dịch (chạy) lớp này chẳng cho ra một kết quả gì, vì không có gì trong thân của lớp (khối lệnh giữa hai dấu ngoặc- body of class)
Tuy thế ta vẫn có thể tạo đợc những đối tợng của lớp này Câu lệnh sau khi biên dịch sẽ không sai nhng cũng không làm gì:
Trang 16MyClass my Object = new MyClass ( ) ;
2 Thuộc tính (vùng của lớp- Field)
Định nghĩa
Ta định nghĩa thêm các vùng cho lớp MyClass
Vùng đợc định nghĩa nh khai báo một biến trong chơng trình:
Truy xuất ( Field access)
Một nguyên lý quan trọng của lập trình hớng đối tợng là đóng gói
(encapsulation) Đóng gói cho phép đối tợng dấu đi các chi tiết cài đặt của
nó và chỉ công bố những gì đối tợng cần công bố để trao đổi với các đối ợng khác
t-Java dùng các từ khóa: public, private, protected cho việc này
^ Một vùng gọi là public có thể dợc truy cập từ tất cả các đối tợng khác
^ Một lớp không thể truy xuất vùng private của lớp khác
^ Vùng protected của một lớp có thể đợc truy cập trong bản thân lớp đó mà còn cho các lớp dẫn xuất từ lớp chủ truy cập, nhng các lớp khác nữa thì không đợc
Ví dụ 1
Class Car {
public String manufactuer ;
public String model ;
private float cost ;
protected int mtime ;
}
Một vùng còn có thể đợc gán tính chất tĩnh (static) Đó là một thành phần của lớp chứ không chỉ của các mẫu (đối tợng) của lớp Nó tồn tại trong tất cả các mẫu của lớp với cùng một giá trị Có lúc nó còn đợc định nghĩa là biến lớp (class variable)
Phơng thức
Phơng thức là những ứng xử của lớp lên các vùng, hay lên các tác động bên ngoài
Một phơng thức đợc định nghĩa theo cấu trúc sau:
Trang 17[tính chất bổ sung] < kiểu dữ liệu trả về > < tên phơng thức > [các ngoại
public có thể truy cập từ bên ngoài lớp định nghĩa
protected chỉ đợc truy cập từ lớp định nghĩa và những lớp dẫn xuất của lớp đó
private chỉ đợc truy cập trong bản thân lớp định nghĩa
static một phơng thức của lớp, chung cho mọi mẫu của lớp abstract không cài đặt đợc gì trong lớp
final không bị định nghĩa chồng ở các lớp dẫn xuất (hằng) native một cài đặt phụ thuộc môi trờng trong một ngôn ngữ
khác nh C hay hợp ngữ
synchronized dùng để chỉ một phơng thức tới hạn (critical method) ngăn các tác động của các đối tợng khác lên đối tợng
trong khi việc đồng bộ hóa đang đợc thực hiện
Khai báo chồng một phơng thức (over loading method)
Khai báo chồng một phơng thức là tạo ra nhiều phơng thức có cùng tên Chúng chỉ khác nhau ở các tham số Do đó khi gọi một phơng thức có khai báo chồng, ta phải xác định đúng tham số cần gửi theo để phơng thức tơng ứng thực hiện Nh thế, việc khai báo chồng luôn đi kèm với việc chọn đối
số tơng ứng và khác biệt nhau (khác kiểu dữ liệu, khác số lợng tham số) Phơng thức khởi dựng (Constructor) đợc dùng để khởi tạo một mẫu (instance) của lớp, tức là gán các giá trị ban đầu và tạo ra một đối tợng cụ thể Phơng thức construtor phải có cùng tên với lớp, đợc gọi đến khi chơng trình tạo một đối tợng mới thông qua từ khóa new
Biến this
Một lớp của Java luôn tồn tại một biến ẩn, đặc biệt: biến this Thành
phần này dợc sử dụng trong khi chạy và tham khảo đến bản thân lớp chứa
nó Ta thờng dùng biến this trong khi construtor
Lớp và Sự kế thừa (inheritance)
Trong Java, rất nhiều khi ta tạo một lớp mới dựa vào một lớp đã biết Khi đó tất cả tính chất của lớp cũ (vùng và phơng thức) sẽ trở thành tính chất của lớp mới Ta gọi lớp mới là lớp dẫn xuất của lớp cũ (derived class),
Trang 18hay còn gọi là lớp con (subclass) Còn lớp cũ gọi là siêu lớp (superclass)
Có thể lớp cũ lại là một dẫn xuất từ một lớp nào đó, nhng đối với lớp con, lớp cũ là siêu lớp trực tiếp (immediate superclass)
Ta dùng từ khóa extends để chỉ rõ lớp đợc dẫn xuất
Thật sự là tất cả các lớp đợc khai báo trong Java đều là dẫn xuất từ lớp Object mặc định của Java Nhng ta có thể bỏ qua khai báo extends Object trong khi viết chơng trình
Khai báo phơng thức chồng
Do tính thừa kế, lớp con nhận tất cả các phơng thức của lớp cha làm của mình và cũng có thể thay thế các phơng thức này bằng các khai báo chồng
Tính chất một lớp ( class modifiers)
Lớp trong Java có 3 tính chất đặc trng bởi 3 từ khóa
Tính chất ý nghĩa
public lớp có thể đợc truy cập từ các khối khác
final lớp không thể tạo dẫn xuất ( lớp hằng)
Giao tiếp đợc khai báo gần giống nh một lớp, với các vùng và các
ph-ơng thức Nhng các vùng của giao tiếp là những hằng (từ khóa final) và các phơng thức là trừu tợng (dù không có từ khóa abstract), nghĩa là các phơng thức của giao tiếp đều rỗng Trong các lớp có cài đặt giao tiếp, ta phải cài
đặt cụ thể các phơng thức này trớc khi dùng đến Rất có thể có trờng hợp là hai lớp rất khác nhau cùng cài đặt một giao tiếp, ta không chắc rằng các ph-
ơng thức của giao tiếp đợc cài trong lớp này hoạt động nh trong lớp kia trong cách cài đặt chi tiết khác nhau nhng chắc chắn rằng chúng sẽ cùng trả
về một kiểu dữ liệu nh nhau
1.9.1 Khai báo một giao tiếp:
Cấu trúc khai báo một giao tiếp:
[public] interface NameofInterface [extends InterfaceList]
Trang 19Mặc nhiên các lớp trong cùng một khối với một giao tiếp sẽ đợc quyền cài đặt giao tiếp đó Nhng nếu đợc khai báo là public, giao tiếp sẽ cho tất cả các lớp hay đối tợng cài đặt nó Tuy nhiên, bản thân giao tiếp phải đợc lu trong một tập tin cùng tên và phần mở rộng là java (tơng tự nh các lớp public)
Một giao tiếp cũng có thể là dẫn xuất của các giao tiếp khác, kế thừa tất cả các giá trị hằng và các phơng thức của chúng Lúc này nó đợc gọi là một giao tiếp con(sub-interface) còn giao tiếp kia đợc gọi là siêu-giao tiếp (super-interface)
Có một điều khác với lớp là một giao tiếp không chỉ có một siêu giao tiếp trực tiếp mà có thể là dẫn xuất cùng lúc của vài ba hay hơn các siêu giao tiếp cha Khi đó, các siêu giao tiếp đợc liệt kê thành chuỗi cách nhau bởi dấu phẩy(,)
1.9.2 Khai báo phơng thức trong giao tiếp
Một phơng thức trong giao tiếp đợc định nghĩa theo cấu trúc:
[public] return_value nameofmethod([parameters]) [throws ExceptionList];
Các giá trị trong ngoặc [] là tuỳ chọn
Các vùng trong giao tiếp luôn luôn là hằng (final),tĩnh (static) và toàn cục (public) dù ta có khai báo tờng minh hay không Tuy thế để cho rõ ràng trong lập trình ta nên khai báo tờng minh
Chú ý rằng một phơng thức đợc khai báo trong giao tiếp cần đợc cài đặt
cụ thể trong lớp có cài đặt giao tiếp nhng không đợc phép khai báo chồng
Có nghĩa là số lợng và kiểu các tham số của phơng thức trong giao tiếp phải
đợc giữ nguyên khi cài đặt cụ thể trong lớp
2.Lập trình giao diện
2.1 Giới thiệu về các thành phần awt:
AWT còn đợc gọi là bộ th viện công cụ lập trình Windows trừu tợng (Abstract Window Toolkit) dùng để xây dựng giao diện ngời dùng(GUI).Một chơng trình Window sử dụng giao diện đồ hoạ đợc xây dựng nên chủ yếu từ các thành phần cơ bản (component) nh nút nhấn, trình đơn, hình
ảnh Cũng nh các hàm API của Window java cung cấp cho ta th viện AWT với đầy đủ các đối tợng cần thiết để lắp ghép và tạo nên 1 ứng dụng Windows thờng có Tuy nhiên không giống nh các hàm Windows API thuần nhất AWT đợc các nhà thiết kế Java trừu tợnghoá ở mức cao hơn, nó không phụ thuộc vào bất cứ hệ điều hành sử dụng giao diện Windows nào (Lu ý là ngoài hệ Windows nổi tiếng của Microsoft ra còn không ít những
hệ điều hành khác cũng cùng sử dụng giao diện kiểu cửa sổ nh Solaris của Sun, OS/2 của IBM, hệ điều hành trên máy Macitosh )
Trang 20Trớc đây khi viết một chơng trình với cùng một mục đích ta thờng phải xem xét cách thức sử dụng các hàm API của từng hệ khác nhau (mà học các hàm API thì không dễ chịu chút nào) Sử dụng các lớp trong th viện AWT ta sẽ không cần phải lo về điều đó nữa Chơng trình ứng dụng Java của chúnh ta sẽ tự động áp dụng những hàm API thích hợp cho từng môi tr-ờng hệ điều hành (thông qua máy ảo Java) Với AWT ta có thể thiết kế giao diện cửa sổ dựa trên các đối tợng thành phần nh sau:
Nút nhấn - buttons, Ô văn bản - Text fields, nhãn - Label, Vùng văn bản - Text area, trình đơn - menu, nút chọn - Radio button, Ô đánh dấu - Check box, khung vẽ - canvas, danh sách - List, thanh trợt - Scrollbars, lựa chọn - choice, khung cửa sổ - Frame
2.2 Nút nhấn (button)
Tạo nút nhấn:
Gọi phơng thức khởi dựng sau:
public Button(String label)
với label là nhãn mà ta muốn nút nhấn đó hiển thị nh OK hay Cancel chẳng hạn Đổi tên cho nút nhấn ta gọi phơng thức setLabel( ) của đối tợng button
có dạng:
public void setLabel( String newLabel)
Để xem tên nhãn hiện tại của nút nhấn hãy gọi phơng thức getLabel:
public String getLabel( )
Sử dụng nút nhấn
Khi tác động vào một đối tợng (nh kích chuột vào đối tợng đó chẳng hạn) tức là ta đã tạo ra một tình huống (event) bắt đối tợng phản ứng lại Java thiết kế 2 cách để một đối tợng xử lý đợc tình huống xảy ra
Một là : Các đối tợng muốn tiếp nhận đợc tình huống xảy ra cho mình phải cài đặt phơng thức action Java sẽ gọi phơng thức này khi có bất cứ tình huống nào xảy đến cho đối tợng Phơng thức action đợc cài đặt nh sau:
public boolean action(Event event, Object whatAction)
trong đó event là tình huống xảy ra với đối tợng, whatAction xác định xem
Trang 21thông tin cho các đối tợng khác Ta cũng có thể dùng nhãn để làm công cụ
đa kết quả ra màn hình dới dạng một chuỗi:
Có 3 cách để tạo dựng 1 đối tợng nhãn Cách đơn giản để tạo ra một đối ợng nhãn không có nội dung gì cả bằng phơng thức:
t-public Label( )
Dĩ nhiên một nhãn không có nội dung gì thì không có ý nghĩa gì cả,
nh-ng ta vẫn có thể dùnh-ng phơnh-ng thức
setText(String newLabel)
để đặt lại nội dung mới cho nhãn này
Cách thứ 2 để tạo nhãn là cung cấp luôn cho nhãn nội dung ngay khi tạo dựng
public Label (String LabelText)
Cách thứ 3 là thêm vào chế độ canh lề khi trình bày nhãn:
public Label (String LabelText, int align)
Những giá trị canh lề của lớp có thể có của lớp Label là các hằng số:Label.CENTER
Label.LEFT
Label.RIGHT
Để lấy nội dung hiện hành của nhãn ta gọi phơng thức:
public String getText ( )
Để xem nhãn đợc căn lề ở chế độ nào ta dùng ta gọi
public int getAlignment ( )
Muốn thiết lập lại chế độ căn lề ta cần dùng phơng thức:
public void setAlignment (int align) throws IlligalArgmentException
Phơng thức này chỉ nhận một trong các giá trị CENTER, LEFT, RIGHT làm đối số
Khi tạo một đối tợng để đa nó vào Frame hay applet ta gọi phơng thức add
add(label)
2.4.Nút chọn (radio button) và ô đánh dấu( chechbox)
Tạo ô đánh dấu(checkbox)
Một ô đánh dấu gồm 2 phần : nhãn và một dấu biểu hiện trạng thái của
ô Nhãn đợc đặt cạnh ô chứa dấu trạng thái Trạng thái đợc biểu diễn nh một biến kiểu boolean, mặc định ban đầu là false nghĩa là ô cha đợc đánh dấu
Trang 22Lớp checkbox dùng để tạo ô đánh dấu gồm 5 phơng thức khởi dựng nh sau:
Tạo ô đánh dấu không có nhãn (ta có thể gán nhãn sau này)
public Checkbox ( )
Tạo ô đánh dấu với một nhãn checkboxLabel gắn kèm
public Checkbox (String checkboxLabel)
Tạo ô đánh dấu với một nhãn checkboxLabel gắn kèm cùng trạng thái ban đầu ô đó nếu state = true thì ô vừa tạo ra đã đợc đánh dấu
public Checkbox (String checkboxLabel, boolean state)
Hai phơng thức còn lại:
public Checkbox (String label, boolean state, CheckboxGroup g)
và
public Checkbox (String label, CheckboxGroup g, boolean state)
Dùng để tạo ô đánh dấu có nhãn với trạng thái đánh dấu ban đầu.Chỉ khác một điều là nút nhấn tạo ra sẽ đợc nhóm lại trong nhóm g Khi ta nhóm các ô đánh dấu lại thành một nhóm thì nó trở thành các nút chọn (radio button chứ không còn là một ô đánh dấu nữa Do đó nếu muốn tạo ô
đánh dấu (checkbox) bằng hai phơng thức này hãy chuyển giá trị null cho thành phần g
Kiểm tra và thiết lập trạng thái cho ô đánh dấu (checkbox state)
Ta có thể kiểm tra một ô có đang dợc đánh dấu hay không bằng cách gọi phơng thức sau cửa đối tợng checkbox
public boolean getState ( )
Nếu muốn thiết lập trạng thái cho ô đánh dấu ta gọi phơng thức
setState (boolean state)
Hoặc đơn giản hơn là: ObjectChecbox (boolean state);
Sử lý tình huống khi ô đánh dấu thay đổi trạng thái
Ta tạo những đối tợnglistener bằng cách cài đặt (implement) các giao tiếp (interface) mà Java đã thiết kế săn cho mỗi loại thành phần AWT Đối với nút nhấn ta sử dụng giao tiếp ActionListener Còn đối với ô đánh dấu hãy tạo đối tợng listener cho nó từ giao tiếp ItemListener (Chính xác là lớp java.awt.Event.ItemListener) Để làm cho đối tợng listener biết lắng nghe ô
đánh dấu thay đổi trạng thái ta dùng phơng thức sau của đối tợng Checkbox:
AddItemListener (ItemListener L)
Để loại bỏ đối tợng listener khỏi ô đánh dấu ta gọi phơng thức:
removeItemListener (ItemListener L)
Trang 23Giao tiếp java.awt.Event.ItemListener chỉ có một phơng thức để cài đặt là:
ItemStateChanged (ItemEvent evt)
Tạo nút chọn(radio button)
Nút chọn (radio button) chỉ là một trờng hợp đặc biệt của ô đánh dấu (checkbox) Không có lớp RadioButton nào phục vụ cho việc tạo đối tợng nút chọn Thay vào đó ta dùng ngay chính lớp Checkbox để tạo nút chọn ta tạo ô đánh dấu và đặt nó vào 1 nhóm thế là ta đã có nút chọn Vấn đề là cần phải tạo ra đối tợng nhóm (group) từ lớp CheckboxGroup bằng phơng thức sau:
Đối tợng ItemEvent sẽ cho biết tình huống xảy ra với đối tợng nào (ta
đang trong vai trò lắng nghe các đối tợng khác thì điều này là cần thiết), nút có đợc chọn hay không? nút thuộc loại nào (checkbox hay radio) Ph-
ơng thức getItemSelectable ( ) sẽ về đối tợng nơi mà tình huống vừa phát sinh:
public ItemSelectable getItemSelectable( )
Phơng thức getItem của đối tợng ItemEvent sẽ cho ta biết giá trị của nút chọn Trong trờng hợp này nó sẽ trả về nội dung nhãn gắn với thành phần nút chọn hoặc ô đánh dấu:
public Object getItem( )
Phơng thức getStateChange ( ) sẽ trả về các hằng ItemEvent.SELECTED hay ItemEvent.DESELECTED tuỳ vào tình hình thực tại của từng nút lúc đó
public int getStateChange ( )
2.5.Lựa chọn (choice)
Đối tợng choice và các phơng thức hỗ trợ
Thành phần lựa chọn choice tơng tự nh trình đơn đổ xuống(popup menu) nó đa ra cho ta một danh sách các mục và chỉ đợc chọn một trong các mục đó mà thôi
Trang 24Tạo đối tợng choice sử dụng lớp choice và gọi phơng thức khởi dựng sau:
public Choice ( )
Sau đó đa các danh mục vào bằng addItem nh sau:
public synchronized void addItem (String item) throws NullPointerException
Bỏ 1 mục thứ i khỏi danh sách
public synchronized void remove (int i)
Hay loại bỏ toàn bộ mục trong danh sách:
public synchronized void removeAll( )
Thay đối tên mục chọn hiện tại trong danh sách
public synchronized void select (int i) throws IlligalArgumenException
i là thứ tự mục chọn trong danh sách mà ta muốn nó trở thành mục hiện hành, hoặc chọn theo tên của mục bằng phơng thức:
public void select (String item)
Phơng thức getSelectedIndex ( ) trả về vị trí tứ tự trong danh sách của mục chọn hiện hành còn getSelectedItem ( ) trả về tên của mục đó:
public int getSelectedIndex ( )
public String getSelectedItem ( )
Tên phần tử trong danh sách các mục chọn khi biết số thứ tự của phần
Trang 25Phơng thức này tạo một danh sách mỗi lần chỉ chọn đợc một phần tử (đơn chọn).
Phơng thhức khởi dựng thứ hai là:
public List (int rows)
Với phơng thức này ta có thể chỉ định bao nhiêu phần tử sẽ đợc hiển thị cùng một lúc trong danh sách
Phơng thức khởi dựng cuối cùng là:
public List (int rows, boolean multiMode)
Phơng thức này tạo ra một danh sách cho phép lựa chọn nhiều phần tử cùng một lúc (đa chọn).Ví dụ nh:
List myList = new List(7,true)
Tơng thự nh Choice sau khi tạo ra đối tợng List ta có thể đa từng phần
tử vào danh sách bằng lệnh add:
public synchronized void add (String item)
Ta cũng có thể chèn thêm vào danh sách bằng phơng thức:
public synchronized void add (String item, int index)
trong đó index là vị trí mà ta muốn chèn phần tử mới vào
Các đặc điểm của danh sách
Lớp List cung cấp cho ta các phơng thức khác nhau để thay đổi nội dung của danh sách Phơng thức replaceItem ( ) thay thế phần tử ở một vị trí xác định bằng phần tử khác:
public synchronized void replaceItem (String newvalue, int pos)
Ta cũng có thể loại một phần tử ra khỏi danh sách bằng phơng thức remove:
public synchronized void remove( int pos)
Hoặc xoá bỏ toàn bộ các phần tử ra khỏi danh sách:
public synchronized void removeAll( )
Phơng thức getSelectedIndex ( ) sẽ trả về vị trí của phần tử đợc chọn trong danh sách Nếu không có phần tử nào đợc chọn thì trả về -1:
public synchronized int getSelectedItem( )
Đối với các danh sách có thể đợc chọn nhiều phần tử cùng một lúc ta có thể lấy ra vị trí của tất cả các phần tử đang đợc chọn bằng phơng thức:
public synchronized int [] getSeletedIndexs( )
Hoặc trực tiếp lấy ra các phần tử đợc chọn khi gọi:
public synchronized String [] getSelectedItems ( )
Trang 26Để chọn một phần tử nào đó trong danh sách mà ta biết vị trí của nó hãy sử dụng phơng thức:
public synchronized void select (int index)
Nếu muốn phần tử đang ở trạng thái chọn chuyển sang bình thờng (không
đợc chọn nữa thì ta gọi phơng thức sau:
public synchronized void deselect (int index)
Phơng thức cho biết trạng thái của một phần tử là đang đợc chọn hay không:
public synchronized boolean isSelected (int index)
Ta cũng có thể làm cho một danh sách đang ở chế độ đơn chọn thành đa chọn bằng gọi phơng thức:
public void setMultiplesSelection (boolean allowMultiple)
Phơng thức isMultipleMode cho biết một dang sách đang ở chế độ đơn chọn hay đa chọn:
public boolean isMultipleMode ( )
Sử dụng đối tợng danh sách (List)
Hãy cài đặt giao tiếp ItemListener để tạo ra đối tợng biết lắng nghe sự thay đổi trạng thái của các phần tử trong danh sách Sử dụng đối số ItemEvent trong phơng thức ItemStateChange để biết đợc chỉ số phần tử
đang thay đôỉ trạng thái gọi phơng thức getItem( )
Để sử lý đợc tình huống nhấp đôi chuột, hãy cài đặt giao tiếp ActionListener và gắn nó vào danh sách Phơng thức getActionCommand( ) trong ActionEvent sẽ trả về tên của phần tử bị nhắp đôi
2.6.Ô văn bản và vùng văn bản (Text field và Text area)
Th viện AWT cung cấp cho ta hai lớp khác nhau để tạo ra đối tợng nhấp đợc văn bản vào đó là lớp TextField và TextArea Đối tợng ở lớp TextField chỉ có khả năng nhập đợc một dòng văn bản, còn đối tợng thuộc lớp TextArea có thể nhập vào nhiều dòng văn bản cùng một lúc Cả hai lớp này đều ra đời từ lớp TextComponent nên chúng sử dụng rất nhiều phơng thức tơng tự nhau
Tạo ô văn bản( TextField)
Phơng thức khởi dựng:
public TextField ( )
Phơng thức này tạo ra một ô văn bản không xác định trớc kích thớc, nếu muốn tạo ô văn bản hiển thị tối thiểu numColums ký tự thì hãy gọi ph-
ơng thức:
public TextField (int numColums)
Trang 27Khi muốn tạo ra một ô văn bản với nội dung là một chuỗi cho trớc, hãy gọi phơng thức:
public TextField (String initialText)
Tạo vùng văn bản với nội dung cho trớc:
public TextArea (String initialText)
Tạo vùng văn bản với số dòng và số cột định trớc:
public TextArea (int rows, int cols)
Tạo vùng văn bản với số dòng và số cột và nội dung định trớc:
public TextArea (String initialText, int rows, int cols)
Đặc điểm chung của các thành phần văn bản
Nếu muốn đa nội dung văn bản vào các đối tợng văn bản hãy sử dụng phơng thức setText:
public void setText (String newText)
Nếu muốn lấy nội dung văn bản từ các đối tợng này hãy sử dụng:
public String getText ( )
Lấy ra chuỗi văn bản con đang đợc chọn hay đánh dấu:
public String getSelectedText ( )
Xác định vị trí đánh dấu khối văn bản bắt đầu và kết thúc ở đâu hãy gọi hai phơng thức sau:
// Lấy vị trí bắt đầu của khối đánh dấu
public int getSelectionStart ( )
// Lấy vị trí kết thúc khối đánh dấu
public int getSelectionEnd ( )
Ta có thể dùng phơng thức selectAll để đánh dấu toàn bộ nội dung văn bản:
public void selectAll ( )
Để cho phép một đối tợng văn bản có thể soạn thảo đợc (có nghĩa là
ng-ời dùng nhập đợc văn bản vào đó) hãy gọi phơng thức setEditable:
public void setEditable (boolean canEdited)
Trang 28Nếu canEdited = false thì ngời dùng chỉ có thể xem chứ không thể đa dữ liệu vào đợc Mặc định là canEdited = true
Phơng thức isEditable giúp ta xác định xem đối tợng văn bản đang ở trạng thái nào Có thể soạn thảo đợc hay không (chỉ trả về true nếu đợc và false nếu không):
public boolean isEditeable ( )
Đặc điểm riêng của đối tợng ô văn bản (TextField)
Lớp TextField cho phép ta đặt ký tự hiển thị (echo character) cho dữ liệu nhập vào Ký tự hiên thị rất hữu dụng trong trờng hợp ta nhập mật mã (password) Chẳng hạn khi ngời dùng đánh vào ô văn bản thì chỉ toàn ký tự dấu * hiển thị mà thôi, nghĩa là không thấy đợc mật mã Cài đặt lại chế độ cho ô văn bản rất dễ, ta chỉ cần gọi phơng thức
public void setEchoChar (char ch)
Một trong các ký tự hiển thị thờng dùng để hiển thị mật mã là dấu *.Ngợc lại có thể xác định xem ký tự nào hiện đang đợc dùng làm chế độ hiển thị cho ô văn bản bằng phơng thức:
public char getEchoChar ( )
Cuối cùng ta có thể dùng phơng thức getColums để xác định xem chiều dài ô văn bản ( tính theo ký tự) là bao nhiêu số ký tự có thể hiển thị cùng một lúc trong ô văn bản chứ không phải là số ký tự tối đa mà ô văn bản đợc quyền nhập
public int getColums ( )
Đặc điểm riêng của đối tợng vùng văn bản ( TextArea )
Đối tợng TextArea chủ yếu dùng để soạn thảo văn bản vì chúng cho phép nhập đợc nhiều dòng Để phục vụ cho mục đích này lớp TextArea bổ sung các phơng thức dùng để chèn (inserting), nối đuôi (appending) và thay thế (replacing) các chuỗi văn bản Ta có thể đa thêm một dòng văn bản vào
đối tợng TextArea bằng phơng thức:
public void appendText (String newText)
Ta cũng có thể chèn một chuỗi văn bản vào một vị trí bất kỳ bằng
ph-ơng thức insertText nh sau:
public void insertText (String newText, int pos)
Cũng có thể thay thế một đoạn văn bản trong nội dung của đối tợng TextArea bằng phơng thức replaceText nh sau:
public void replaceText (String newText, int start, int end)
Sau cùng ta có thể xác định kích thớc hiển thị theo số dòng và số cột của đối tợng TextArea bằng hai phơng thức sau:
public int getRows ( )
Trang 29public int getColums ( )
Sử dụng đối tợng TextField và TextArea
Thờng ta chỉ muốn lấy nội dung văn bản của đối tợng TextField hay TextArea sau khi ngời dùng đã nhập xong dữ liệu vào Hãy thiết kế giao tiếp ActionListener để gắn đối tợng xử lý tình huống vào ô văn bản TextField, khi ngời dùng nhấn phím Enter thì tình huống này sẽ đợc gọi
Ví dụ:
passwordField.addActionListener(new ActionListener(){
public void actionPeformed(ActionEvent){
Khi ngời dùng kích chuột vào mũi tên ở hai đầu thanh trợt thì tình huống lại nảy sinh Thanh trợt sẽ tự động trừ đi hay cộng thêm vào vị trí hiện tại của thanh trợt 1 đơn vị (ta có thể xác định đơn vị này mặc định là 1)
Tình huống page nảy sinh khi ngời dùng kích chuột vào khoảng giữa thanh trợt và vị trí hiện hành Vị trí hiện hành sẽ rời đi một số đơn vị do ta chỉ định
Tình huống absolute nảy sinh khi ngời dùng nắm vào vị trí hiện hành của thanh trợt và lôi nó đi (drag) từ chỗ này đến chỗ khác
Đối tợng Scrollbar chỉ chịu trách nhiệm di chuyển vị trí hiện hành và cung cấp cho ta các giá trị thay đổi Nó không tự động cuộn văn bản hay hình vẽ nh ta thờng thấy ở các ứng dụng Để làm đợc điều này ngời lập trình phải tự điều khiển thanh trợt, quan sát và nắm bắt qua trình thay đổi vị trí của nó để xử lý các đối tợng khác (nh khung hình hay những dòng văn bản) cho thích hợp
Tạo thanh trợt
Thanh trợt đợc tạo bằng nhiều cách
public Scrollbar ( )
Trang 30nếu dùng phơng thức này thì các thông số cần thiết khác cho thanh trợt
sẽ đợc cho biết sau bằng các phơng thức khác
Để tạo ra thanh trợt đứng hay ngang theo ý mình ta có thể gọi phơng thức khởi dựng:
public Scrollbar (int orientation)
Trong đó orientation sẽ nhận một trong các giá trị : Scrollbar.VERTICAL dùng để tạo thanh trợt đứng còn Scrollbar.HORIZONTAL sẽ tạo thanh trợt ngang
Ta có thể tạo ra thanh trợt với đầy đủ thông số ban đầu bằng phơng thức sau:
public Scrollbar(int orientation, int pos, int pageUnit, int minValue, int maxValue)
Các đặc điểm của thanh trợt
Thay đổi đơn vị tăng giảm của thanh trợt
public void setUnitincrement (int increment)
Nếu muốn biết hiện thời đơn vị tăng giảm này là bao nhiêu ta goi
ph-ơng thức:
public int getUnitIncrement ( )
Mỗi khi có tình huống page xảy ra, vị trí hiện hành cua thanh trợt này rời đi không phải là 1 mà là 2 hay nhiều hơn, ta có thể định con số này nhờ phơng thức:
public void setBlockIncrement (int b)
Nếu muốn biết đơn vị hiện thời này là bao nhiêu ta sử dụng hàm ngợc nó:
public int getBlockIncrement( )
Ngoài ra để lấy giá trị lớn nhất và nhỏ nhất của thanh trợt ta dùng hai phơng thức sau:
public int getMaximum ( )
public int getMinimum ( )
Phơng thức setValue sẽ đặt lại vị trí hiện hành cho thanh trợt:
public void setValue (int newPos)
Phơng thức cho biết vị trí hiện hành
public void getValue ( )
Muốn biết một đối tợng thanh trợt là đứng hay ngang ta dùng phơng thức
public int getOrientation ( )
Trang 31Trị trả về sẽ là một trong hai hằng số Scrollbar.VERTICAL và Scrollbar.HORIZONTAL.
Phơng thức setValues sẽ giúp ta thiết lập lại các thông số cho thanh ợt:
tr-public void setValues (int possition, int pageUnit, int minimum, int maximum)
Sử dụng thanh trợt
Cũng giống nh các đối tợng khác trong AWT khi có một tình huống xảy ra với Scollbar ta hãy nhờ đối tợng xử lý tình huống là AdjustmentListener xử lý giùm Khi cài đặt cho giao tiếp AdjustmentListener chỉ cần cài đặt phơng thức sau:
public void adjustmentValueChanged (AdjustmentEvent evt)
Đối tợng AdjustmentEvent trong phơng thức trên cung cấp cho ta hàm getAdjustmentType ( ) để xác định xem tình huống nào đang xảy ra
Dới đây là ý nghĩa và vị trí trả về của hàm này:
tình huống absolute xảy ra, ta lấy vị trí thanh trợt bằng hàm getValue( )
có thể chứa cả khung chứa khác
Bộ quản lý cách trình bày là gì ( Layout manager)
Khung chứa có thể nhận các đối tợng từ ngoài đa vào nó và nó phải biết cách nào đó để sắp xếp “chỗ ở” cho các đối tợng này trên mảnh đất nhỏ hẹp của mình Mỗi đối tợng khung chứa đều đợc trang bị một bộ quản lý chịu trách nhiệm nh vậy Tuỳ theo cách quản lý mà ta sẽ ra quyết định xem đối tợng đa vào sẽ đợc đặt nằm ở đâu bên trong khung chứa Các bộ phận quản
lý trình bày mà th viện AWT cung cấp cho ta bao gồm:
2.8.Giới thiệu về khung chứa (container) và bộ quản lý trình bày(layout manager) của các đối t ợng AWT
Phần trên ta đã xem xét qua các thành phần AWT cơ bản Muốn các
đối tợng AWT hiển thị hay tơng tác đợc trong chơng trình ta thờng phảI sử
Trang 32dụng phơgn thức add để đa đối tợng đó vào applet Nhng có một điều cha
đợc đề cập đến là vị trí sắp xếp của đối tợng đó trên applet Thờng thì nếu quan sát kỹ ta sẽ thấy applet tự động sắp xếp các đối tợng đa vào theo thứ
tự từ trái qua phải và từ trên xuống dới
Hãy hình dung Applet tựa nh một khung chứa (container), còn các đối tợng cứ việc thoải mái “ném” vào đó java thiết lập một bộ quản lý riêng biệt (đợc gọi là Layout Manager) sẽ chịu trách nhiệm sắp xếp những đối t-ợng theo một trật tự nhất định
Đối tợng khung chứa (Container) là gì?
Những đối tợng có khả năng quản lý và nhóm các đối tợng con khác lại
đợc gọi đối tợng khung chứa (container) Những đối tợng con thuộc thành phần AWT mà ta đã nghiên cứu qua nh: nút nhấn, checkbox, nút radio, thanh trợt (scrollbar), danh sách(list) chỉ sử dụng đợc khi ta đa nó đa vào khung chứa Java cung cấp cho ta các đối tợng khung chứa nh sau:
• Panel : Đối tợng khung chứa đơn giản nhất Mục đích chỉ để nhóm các đối tợng con lại và sắp xếp trình bày chúng theo từng cách thích hợp
• Frames : Khung chứa này là một cửa sổ (window) hăn hoi nh mọi ứng dụng Window thông thờng khác Nó thờng đợc dùng để tạo ra các ứng dụng Window
• Dialogs : Cũng là một cửa sổ nhng không đầy đủ chức năng nh đối ợng khung chứa frame Nh tên gọi, nó là một cửa sổ dạng hộp thoại (cửa sổ dạng này còn gọi là popup-window) có những tác dụng nh
t-đa ra lời thông báo hay dung để lấy số liệu nhập từ ngoài vào thông qua các đối tợng TextField
• ScrollPanes : Đây là một khung chứa tơng tự khung chứa Panel nhng
có thêm hai thanh trợt giúp ta tổ chức và xem đợc các đối tợng lớn choáng nhiều chỗ trên màn hình nh hình ảnh hay văn bản chứa nhiều dòng
Lu ý : khung chứa không chỉ chứa các đối tợng con mà bản thân nó còn
có thể chứa cả các khung chứa khác
Bộ quản lý cách trình bày là gì (layout managers)?
Khung chứa có thể nhận đối tợng từ ngoài đa vào nó phải biết cách nào
đó để sắp xếp “chỗ ở” cho các đối tợng trong nó Tuỳ theo cách quản lý mà
nó sẽ đa ra quyết định xem đối tợng đa vào sẽ đợc đặt ở đâu Các bộ quản
lý trình bày mà th viện AWT cung cấp bao gồm:
Cách trình bày Flow (Flow layout)
Cách trình bày Border (Border layout)
Cách trình bày Grid (Grid layout)
Trang 33Cách trình bày Gridbag (Gridbag layout)
Cách trình bày Card (Card layout)
2.9.Các đặc điểm chung của đối t ợng khung chứa (container)
Tất cả các đối tợng khung chứa đều có những khả năng xử lý cơ bản là
đa các đối tợng con vào khung và loại chúng ra Ta đa một đối tợng khác vào khung chứa bằng phơng thức add sau:
Public synchronized Component add(Component comp)
Ta đã sử dụng phơng thức này nhiều lần để đa một đối tợng vào Applet Nếu đối tợng đợc đa vào khung thành công thì kết quả trả về chính là đối t-ợng đó, còn không trị trả về sẽ là null
Khung chứa quản lý việc lu giữ các đối tợng giống nh ta lu giữ các phần tử trong một mảng (array) hay trong một đối tợng vector (đối tợng này cũng tơng tự nh mảng, nó dùng để cất giữ nhiều đối tợng khác nhau) Mỗi
đối tợng mà ta đa vào khung khứa đều đợc cấp một chỉ số (index) Phơng thức sau sẽ giúp ta chèn một đối tợng vào khung ở vị trí pos cho trớc:
public synchronized Component add (String name, Component comp)
Phơng thức này dùng để đa đối tợng mới vào phía cuối các đối tợng đã
có Tuy nhiên ta đã có thêm đối số name để giúp các bộ quản lý layout có
đợc thông tin về đối tợng vừa thêm vào nhằm dễ bề sắp xếp một vài bộ quản lý về cách trình bày (layout manager) nh BorderLayout đòi hỏi đối t-ợng thêm vào phải có một tên riêng biệt thì mới cho hiển thị Nếu bộ quản
lý nào không cần đến tên của đối tợng thì đối số này bị bỏ qua
Quá trình loại bỏ một đối tợng ra khỏi khung chứa cũng rất đơn giản Chỉ cần gọi phơng thức:
public synchronized void remove (Component comp)
comp là đối tợng cần loại bỏ
Để loại bỏ tất cả mọi đối tợng ra khỏi khung chứa thì không gì đơn giản hơn là gọi phơng thức
public synchronized void removeAll( )
Nh ta đã nêu các đối tợng đợc quản lý nh một mảng (array) nên ta có thể dễ dang tham khảo đến đối tợng thứ n trong khung chứa bằng phơng thức:
public synchronized Component getComponent( int n) throws ArrayIndexOutOfBoundsException
Phơng thức này sẽ ném ra một ngoại lệ ArrayIndexOutOfBoundsException khi đối tợng của ta tham khảo ngoài số phần tử mà mảng lu giữ các đối tợng hiện có Nếu thành công thì trả về chính là đối tợng thứ n
Trang 34Hoặc ta có thể lấy ra toàn bộ các đối tợng trong khung chứa ra một mảng riêng của mình nh sau:
public synchronized Component [ ] getComponent( )
Để đếm xem hiện tại trong khung chứa có bao nhiêu đối tợng gọi
ph-ơng thức:
public int countComponents ( )
Trên đây là đăc điểm của khung chứa Bây giờ ta sẽ đi vào cụ thể từng loại khung chứa một
2.10 Khung chứa Panels
Panel là một khung chứa đơn giản nhất, nó chỉ dùng để chứa và nhóm
các đối tợng con khác lại với nhau Ta có thể tạo ra các khung chứa Panel
nh sau:
Panel myPanel = new Panel ( )
Nh đã nêu, lớp Applet chính là một đối tợng khung chứa đợc dẫn xuất
từ lớp Panel này và nh ta cũng đã biết một khung chứa có thể chứa cả các khung khác, chính và vậy ta có thể đa khung chứa myPanel vừa tạo vào Applet cũng tơng tự nh ta đã làm với các đối tợng khác:
add (myPanel)
Mặt khác ta cũng có thể tạo những khung chứa lồng vào nhau với bao nhiêu cũng đợc Ví dụ sau sẽ lồng 4 khung chứa vào nhau:
Panel main Panel, subPanel1, subPanel2, subPanel3;
mainPanel = new Panel ( );
subPanel1 = new Panel ( );
subPanel2 = new Panel ( );
subPanel3 = new Panel ( );
//Lồng khung chứa subPanel1, subPanel2 vào khung chứa mainPanel
mainPanel add (subPanel1);
mainPanel add (subPanel2);
//Lồng khung chứa subPanel3 vào khung chứa subPanel1
subPanel1.add(subPanel3);
Bây giờ chuyển sang một khung chứa có tính năng toàn diện hơn là khung chứa Frame
2.11.Frames
Khung chứa Frame đợc dùng để làm gì ?
Khung chứa Frame là một trong những thành phần mạnh mẽ nhất của
th viện AWT Nó giúp ta tạo ra một cửa sổ hẳn hoi nh các ứng dụng thông thờng của Windows mà bạn vẫn thờng thấy Nếu xem xét kỹ lại các ứng
Trang 35dụng trên Windows ta sẽ thấy mỗi chơng trình chẳng qua chỉ là một cửa sổ, trong mỗi cửa sổ lại chứa những đối tợng con khác nh các loại nút nhấn, hình ảnh, văn bản Một cửa sổ nh vậy đợc Java thể hiện qua khung chứa Frame Các ứng dụng Window độc lập (Standard alone) đợc thiết kế bằng ngôn ngữ Java thờng lấy đối tợng Frame này làm nền Đối với Applet ta có thể dùng đối tợng Frame để tạo nên những chơng trình chạy bên ngoài trang WEB của trình duyệt (browser), không phải ràng buộc hạn hẹp trong một phạm vi nhỏ bé của Applet.
Tạo đối tợng khung chứa Frame
Tạo đối tợng Frame cũng đơn giản nh ta đã tạo đối tợng Panel Hãy sử dụng lớp Frame và gọi phơgn thức khởi dựng của nó:
public Frame ( )
ví dụ Frame myWindow = new Frame ( )
Do khung chứa Frame là một cửa sổ hẳn hoi nên ta có thể dùng phơng thức sau để tạo ra cửa sổ với tiêu đề bên trên:
public Frame (String FrameTitle)
ví dụ Frame myWindow = new Frame( “Java application”);
2.12.Các đặc điểm của khung chứa Frame
Sau khi đã tạo đợc đối tợng Frame, muốn nó hiện hữu trên màn hình ta cần trải qua một số bớc kế tiếp sau:
Định lại kích thớc cho cửa sổ (Frame là một khung chứa nhng vì thể hiện của nó nh là một cửa sổ Windows nên ta gọi là cửa sổ cho tiện) bằng phợng thức myWindows.resize(300,100) hoặc myWindows.setSize (new Dimension(300,100))
Đa cửa sổ hiện ra màn hình: myWindow.show( )
Ta có thể tạm thời dấu cởa sổ Frame đi bằng phơng thức:
myWindow.hide( ) Nên nhớ rằng cửa sổ chỉ bị tạm ẩn đi thôi (invisible), tuy ta không thấy nhng nó vẫn còn tồn tại, nếu phơng thức show ( ) đợc gọi thì cửa sổ sẽ hiện ra trở lại Mọi tài nguyên mà đối tợng nắm giữ vẫn còn đó không bị mất đi Muốn loại bỏ toàn bộ đối tợng Frame ta gọi phơng thức:
public synchronized void dispose ( )
Để thay đổi tiêu đề cho cửa sổ ta gọi phơng thức:
public void setTitle (String newTitle)
Ngợc lại muốn lấy tiêu đề của cửa sổ ta gọi phơng thức:
public String getTitle ( )
Khi ngời dùng di chuyển chuột vào bên trong cửa sổ, muốn trạng thái con chuột thay đổi hình dạng ta gọi phơng thức:
Trang 36public void setCursor (int curType)
curType sẽ mang một trong các hằng số sau:
Để biết đợc hình dạng hiện tại của con trỏ chuột ta gọi phơng thức:
public int getCursorType ( )
Cửa sổ có thể đợc co giãn và thay đổi kích thớc Nếu nh ta không muốn
điều đó hãy áp dụng phơng thức:
public void setResizable (boolean allowResize)
allowResize = true thì cửa sổ có thể thay đổi kích thớc còn false thì không.Phơng thức sau sẽ giúp ta xác định cửa sổ đang ở tình trạng nào:
public boolean isResizable ( )
Mỗi cửa sổ có thể có một biểu tợng nhỏ (bên góc bên trái) ta có thể thay
đổi hình ảnh này bằng phơng thức:
public setIconImage (Image image)
2.13.Sử dụng cửa sổ để tạo một ứng dụng Windows độc lập
Hãy nhớ lại các phần trớc Một chơng trình độc lập khác với một Applet ở chỗ nó có một phơng thức main( ) Còn Applet thì sao? bản thân Applet chỉ là một khung chứa Panel bình thờng mà ta có thể đa các đối t-ợng con vào đó Vậy tại sao không đa nguyên cả Applet vào khung chứa Frame? Ta hoàn toàn có thể làm đợc điều này và khi đó sẽ có một chơng trình ứng dụng Windows độc lập hẳn hoi
2.14.Gắn đối t ợng trình đơn menu vào cửa sổ ứng dụng
Trình đơn mà Java cung cấp sẽ bao gồm những đối tợng sau:
Trang 37Thành phần đối tợng Java
Thanh trình đơn (menu bar) MenuBar
Trình đơn đổ xuống (popup menu) Menu
Các mục chọn (menu item) MenuItem
Trình đơn con (sub popup menu) Menu
Dùng đối tợng MenuBar ta có thể tạo một thanh trình đơn (menu bar)
và gắn nó vào cửa sổ ứng dụng (Frame) theo cách sau:
Tạo thanh trình đơn
MenuBar myMenubar = new MenuBar ( );
Gắn thanh trình đơn vừa tạo vào cửa sổ
myWindow.setMenuBar (myMenuBar);
Khi ta đã có thanh trình đơn ngang menubar, ta sẽ dùng đối tợng menu
để tạo ra các trình đơn (menu) con gắn vào đó nh sau:
Menu FileMenu = new Menu(“File”); //tạo menu con
myMenubar.add(FileMenu); // Gắn vào menu bar
Sau khi đã có menu con ta cần phải gắn các mục chọn (item) vào đó, một menu mà không có mục chọn nào cả thì thật vô nghĩa, đối tợng MenuItem sẽ giúp ta thực hiện điều đó Chẳng hạn với ta muốn đa mục chọn “Open” vào menu thì có thể thực hiện theo hai cách:
Đa trực tiếp mục chọn vào menu
FileMenu add(new MenuItem(“Open”));
Tạo riêng mục chọn rồi mới đa vào
MenuItem openItem = new MenuItem(“Open”);
FileMenu add(openItem);
Mỗi mục chọn có thể ở trạng thái đợc chọn (enabled) hay không cho phép chọn (disabled) khi mục chọn ở trạng thái disabled nó sẽ mờ, ta không thể chọn đợc nó Ví dụ để đối tợng mục chọn openItem vừa tạo có khả năng cho phép chọn hay không đợc chọn thì ta sử dụng hai phơng thức sau:
openItem.enable( )
openItem.disable( )
Khi một trình đơn có nhiều mục chọn ta có thể dùng một đờng phân cách (seperator) để tách các mục chọn ra (nhằm phân theo nhóm) Muốn tạo đờng phân cách hãy gọi phơng thức addSeperator của đối tợng Menu
Ví dụ:
FileMenu.addSeperator( );
Trang 38Để tạo một mục chọn có chứa các menu con khác (sub menu) đơn giản
ta chỉ tạo một menu bình thờng rồi đa nó vào menu đã có
Ta cũng có thể tạo một mục chọn có khả năng đánh dấu (checked Item, một dấu kiểm tra (check mark) sẽ hiện diện bên trái và sẽ tự động bật/tắt khi ta chọn mục chọn đó
Một mục chọn có khả năng đánh dấu đợc tạo ra từ lớp CheckboxMenuItem nh sau:
CheckboxMenuItem Autosave = new CheckboxMenuItem (“Autosave”);
FileMenu.add(Autosave);
Để xác định xem mục chọn save đang ở trong trạng thái nào ta sử dụng phơng thức getState ( ) Ví dụ: Autosave GetState ( ) trị trả về bằng true nếu mục chọn đang bị đánh dấu cong ngợc lại là false
Bình thờng khi đặt các menu con vào thanh trình đơn ngang menu bar, thứ tự sẽ là từ trái sang phải, tuy nhiên nếu muốn đặt menu con sang bên gọc phải (nh menu giúp đỡ Help chẳng hạn) hãy sử dụng phơng thức:
public void setHelpMenu( Menu m);
Sử dụng trình đơn Menu
Để mỗi mục chọn tơng tác và nhận đợc tình huống khi ngời dùng chọn
nó ta cần cài đặt giao tiếp ActionListener và gắn nó vào cho từng mục chọn
2.15 Khung chứa Dialog
Khung chứa tiếp theo mà ta xem xét là Dialog, khung chứa này cũng là một cửa sổ nh Frame, nhng cửa sổ này ít chức năng hơn, nó còn đợc gọi là pupop-window Ta có thể tạo ra Dialog dới hai hình thức là modal và non-modal
Modal là các cửa sổ Dialog khi hiện ra sẽ khoá chặt các cửa sổ khác lại
Ngời dùng không thể nào tơng tác đợc với các cửa sổ còn lại của chơng trình trừ khi đóng lại cửa sổ Dialog lại Những cửa sổ dạng modal này thờng yêu cầu một tác vụ nào đó cần phải hoàn thành trớc khi chuyển sang tác vụ tiếp theo Các cửa sổ mà ta thờng thấy trong những chơng trình windows nh thông báo lỗi, những cửa sổ chọn lựa thuộc loại này
Non-modal thì ngợc lại, những cửa sổ dạng này thích hợp cho các thao
tác mang tính tuỳ biến (Customize), ít ảnh hởng đến các tác vụ chính Ngời dùng vẫn có thể tơng tác với các ứng dụng chính khi cửa sổ non-modal đng hiện hữu Một ví dụ là những cửa sổ mang chức năng tìm kiếm (search dialog) chẳng hạn
Cách tạo khung chứa Dialog
Trang 39Một cửa sổ (hay khung chứa) Dialog phải đợc gắn với cửa sổ chính Frame Một Dialog không thể đợc gắn với Applet, tuy nhiên nếu trong Applet ta tạo ra đối tợng Frame và gắn cửa sổ Dialog vào đó thì vẫn đợc Ta tạo cửa sổ Dialog từ phơng thức khởi dựng cửa lớp Dialog nh sau:
public Dialog (Fram parentWindow, boolean isModal)
đối số isModal quyết định xem Dialog đợc tạo ra ở dạng nào, modal (isModal bằng true) hay non-Modal (isModal bằng false)
Một khi đã xác nhận hình thức cho Dialog khác Ví dụ sau sẽ tạo ra cửa
sổ Dialog thuộc dạng modal dành cho cửa sổ ứng dụng chính là myWindow (thuộc lớp Frame):
Dialog myDialog = new Dialog(myWindow, true)
Cũng nh đối với cửa sổ Frame, cửa sổ Dialog vẫn có một tiêu đề, ta có thể tạo ra Dialog với một tiêu đề định trớc bằng phơng thức sau:
public Dialog (Frame parentWindow, String Title, boolean isModal)
Sau khi ta đã tạo xong đối tợng Dialog việc còn lại là đa chúng ra màn hình bằng phơng thức show( ) Ví dụ myDialog show( )
Để dấu cửa sổ Dialog đi ta gọi phơng thức hide( ) Ví dụ myDialog hide( ) hoặc setVisible (boolean)
Các đặc điểm cửa khung chứa Dialog
Các đặc điểm thờng dùng của đối tợng Dialog thể hiện tơng tự nh đối ợng Frame qua các phơng thức sau:
t-//Cho phép và lấy tình trạng đợc quyền thay đổi kích thớc cho Dialog public setResizable (boolean)
boolean isResizable ( )
//Đặt và lấy tiêu đề của Dialog
void setTitle (String)
String getTitle( )
Nếu muốn xác minh một Dialog đang thuộc dạng nào ta có thể gọi phơng thức:
public boolean isModal ( )
2.16.Khung chứa ScrollPane
Khung chứa này không phải là cửa sổ, nó chỉ có tính chất nh khung chứa Panel dùng để chứa các đối tợng con mà thôi, Tuy nhiên một tính chất
đặc biệt của ScrollPane là những đối tợng con mà nó chứa quá lớn nh khung hình chẳng hạn thì ScrollPane sẽ xuất hiện thanh trợt đứng và ngang
ở hai bên viền để ta có thể xem đợc toàn bộ đối tợng mà nó chứa
2.17.Bộ quản lý cách trình bày (Layout manager)