Lập trình HĐT trong Java l Các giai đoạn phát triển phần mềm nói chung l Đặc trưng của lập trình hướng đối tượng bao gói, che dấu, kế thừa, đa hình l Khái niệm về đối tượng, thuộc tính,
Trang 1Bài 1 Giới thiệu lập trình Java
1.1- Quá trình phát triển của Java
l Nguồn gốc của Java (Oak)
l Ứng dụng đầu tiên (applets) và mở rộng ngày nay
*Sun Microsystem*
James Gosling,
Bill Joy và cộng sự
Ngôn ngữOak1990
Các thiết gia đình, cầm tay,…
Ngôn ngữJava1993
Internet
Applets
J2SE
J2EE J2ME
Hiện nay
1.1- Quá trình phát triển của Java
l Giới thiệu tóm tắt về 3 công nghệ của Java: J2SE, J2ME, J2EE
l J2SE: Java 2 Platform, Standard Edition
l Phiên bản desktop của Java, cung cấp GUI, threads, networking, XML, Applets, security, database,…
l J2ME: Java 2 Platform, Micro Edition
l Phiên bản dành cho các thiết bị nhỏ, không phải là J2SE thu nhỏ, gồm hai phần cơ bản
là cấu hình (configuration) và mô tả (profile)
l J2EE: Java 2 Platform, Enterprise Edition
l Phiên bản cho các ứng dụng lớn, có phân tán, gồm rất nhiều công nghệ được tích hợp như Java Servlet, JavaServer Pages, JDBC, JMS, Java Webservice,…
l Các ưu điểm của Java
l Độc lập với thiết bị phần cứng (hệ nền)
l Độ an toàn cao
l Mức độ chuẩn hóa các phần cao
l Các nhược điểm của Java
l Tốc độ chậm
Trang 21.1- Quá trình phát triển của Java
l So sánh công nghệ Java và Microsoft.Net
l So sánh ngôn ngữ Java và C++
Ngôn ngữJava
Các công nghệ
Công nghệMicrosoft.Net
Object-Oriented Programming Structural programming
Cú pháp tốtTốc độ nhanh
1.3- Các khái niệm cơ bản
l Tên được dùng để định danh mọi thành phần trong chương trình
l Quy ước tên trong Java:
lTên lớp : chữ cái đầu từ viết hoa, còn lại viết thường (Frame, ActionEvent, …)
lTên hàm : từ đầu viết thường, các từ còn lại chữ cái đầu viết hoa (setVisible, close, getText, setDefaultCloseOperation,…)
lCác tên khác (biến, đối tượng,…) : viết chữ thường
lTên hằng : viết chữ hoa (CLOSE_ON_EXIT, YES_NO_OPTION,…)
const for package switch super while
new volatile class long finally char
static interface final
catch
void short
int extends case
try return
instanceof else
byte
throws public
import double break
throw protected
implements do
boolean
this private
if default abstract
Trang 31.3- Các khái niệm cơ bản
l Các kiểu dữ liệu nguyên thủy (int, long, float, double, char, boolean,…)
l Dữ liệu xâu ký tự (String) là kiểu lớp đối tượng
l Các hằng số viết bình thường, hằng xâu phải dùng nháy kép (“…”), hằng
ký tự dùng nháy đơn (‘…’)
l Biến nhớ chứa dữ liệu, chỉ dành cho dữ liệu đơn ( int, float, char,…)
l Tham chiếu là một biến đặc biệt (như biến trỏ) để tham chiếu (trỏ) đến các
1.3- Các khái niệm cơ bản
l Mảng được quản lý theo tham chiếu
l Mảng hai chiều, tham chiếu tương tự, mỗi chiều là một
tham chiếu
Mảng
•length
tham chiếu mảng tham chiếu
mảng tham chiếu
int[ ] a = new int[ 8 ];
int[ ][ ] b = new int[ 4 ][ 3 ];
1.3- Các khái niệm cơ bản
hằng,… cung cấp cho việc lập trình
l java.awt, java.io, javax.swing,…
l Kết thúc câu lệnh phải có dấu chấm phẩy ( ;), khối lệnh phải đóng khung
Trang 41.4- Các cấu trúc điều khiển
l Lệnh nhập/xuất dữ liệu đơn giản
lập trình chương trình chính
} }
l Tên tệp chứa phải trùng với tên lớp chính trong chương trình, có
phần mở rộng là *.java
l Lệnh nạp gói thư viện import có thể không dùng.
l Một tệp chương trình có thể nhiều lớp, nhưng chỉ một lớp chính và
có quy định public
1.5- Cách lập trình Java
l Cách thực hiện một chương trình Java
chương trình đó, thực hiện hàm main Nếu không tìm thấy
lớp hoặc không có hàm main sẽ xuất hiện một thông báo lỗi.
l Biên dịch chương trình
javac tên_tệp_ct.java
lKiểm tra và sửa lỗi nếu có
l Chạy thử chương trình
l Chú ý: phải đặt đường dẫn tự động đến thư mục cài
đặt java, hoặc chạy bên trong thư mục đó.
Trang 51.5- Cách lập trình Java
l Quy trình lập trình một chương trình java
Lập chương trình Java (*.java)
public class Vidu_1_1 {
public static void main(String[] args) {
int a,b,c;
Scanner s=new Scanner(System.in);
System.out.print("Nhap so a:"); a=s.nextInt();
System.out.print("Nhap so b:"); b=s.nextInt();
c = (a>b)?a-b:b-a;
System.out.print("\nHieu so la:"+c);
Trang 61.6- Bài tập
l Bài tập tham khảo (http://longhlk.googlepages.com)
1 Nhập một số nguyên, một số thực và tính tổng / C1_VD1.java
2 Nhập hai số nguyên, tìm USCLN của chúng / C1_VD2.java
3 Nhập một xâu, tách và hiện ra các từ trên mỗi dòng / C1_VD3.java
4 Tính tổng các số được viết trong tham số dòng lệnh, hoặc thông báo
không có tham số / C1_VD4.java
l Bài tập tự làm
1 Nhập hai điểm trên mặt phẳng, tính khoảng cách giữa chúng.
2 Nhập mảng N số nguyên, hiện ra màn hình, tìm số lớn nhất hiện ra cùng
các vị trí của nó.
3 Nhập một xâu, đếm tần suất xuất hiện của các ký tự trong xâu đó.
1 Nhập một mảng N số thực, sắp xếp mảng giảm dần và hiện ra màn
hình, tính tổng các số dương và trung bình các số âm.
Bài 2 Lập trình HĐT trong Java
l Các giai đoạn phát triển phần mềm nói chung
l Đặc trưng của lập trình hướng đối tượng (bao gói, che dấu, kế thừa, đa hình)
l Khái niệm về đối tượng, thuộc tính, phương thức, lớp,
Tìm hiểu,Khảo sátPhân tích
hệ thốngThiết kế
hệ thống Lập trình Kiểm thử
Ứng dụngBảo trì, nâng cấp
Bài toán
Lớp
Kế thừaKhắc phục
Bổ sung
Bài 2 Lập trình HĐT Java
F2.1 Khái niệm về LTHĐT
Trang 7Bài 2 Lập trình HĐT Java
F2.2 LT lớp và đối tượng
l Sự khác nhau giữa lớp và đối tượng
l Cú pháp định nghĩa lớp và các thành viên
phạm_vi class tên_lớp {
phạm_vi đặc_tính kiểu thành_viên_dữ_liệu ;
l Đối tượng và gọi phương thức
tham_chiếu = newtên_lớp;
tham_chiếu • tên_phương_thức();
l Tham chiếu this
Được định nghĩa mặc định (có sẵn) trong các
phương thức của lớp, this tham chiếu đến đối
tượng hiện đang xử lý
Ví dụ: Lập trình lớp các đối tượng Nhân_viên, nhập danh sách, in ra và tính tổng lương của các nhân viên ( Ref:C2_VD1.java )
Bài 2 Lập trình HĐT Java
F2.2 LT lớp và đối tượng
l Cách chạy phương thức qua Stack
Khi gọi một phương thức máy sẽ đẩy nó vào
một stack để chạy, xong sẽ giải phóng nó khỏi
stack
l Cơ chế truyền trị trong tham số
Mọi tham số trong phương thức đều có dạng
Có thể dùng từ khóa this để gọi thực hiện một
phương thức tạo khác từ một phương thức
tạo này
Trang 8Bài 2 Lập trình HĐT Java
F2.3 Kỹ thuật kế thừa
l Chỉ được phép kế thừa đơn
l Cách định nghĩa một lớp dẫn xuất
phạm_vi class lớp_mới extends lớp_cũ {
… định nghĩa thành viên cho lớp mới … }
l Viết đè (overriding) một phương thức
Định nghĩa một phương thức trong lớp mới hoàn toàn giống lớp cũ Khác với
nạp chồng
l Từ khóa super và final
- Từ khóa super cho phép gọi các thành viê n lớp cơ sở bên trong lớp dẫn
xuất
- Từ khóa final quy định một thành viê n là cuối cùng, không thể viết đè lại nó
trong mọi lớp dẫn xuất
l Phương thức tạo trong kế thừa
- Phương thức tạo thực hiện theo thứ tự trên xuống
- Gọi phương thức tạo lớp cơ sở bên trong lớp dẫn xuất bằng
lệnh super(…); và nằm ở lệnh đầu tiên.
Ví dụ: Lập trình hai lớp hình tròn (HT) và hình elíp (HEL) có kế thừa, tính diện tích và chu vi của hai hình được nhập ( Ref:C2_VD2.java )
Bài 2 Lập trình HĐT Java
F2.4 Kỹ thuật đa hình
l Cơ chế đa hình
l Đa hình trong tham chiếu và từ khóa instanceof
- Một tham chiếu lớp cơ sở có thể tham chiếu đến các đối tượng lớp dẫn xuất trực tiếp hoặc gián tiếp
- Từ khóa instanceof cho biết đối tượ ng đang được tham chiếu thuộc lớp nào:
tham_chiếu instanceof tên_lớp
- Để gọi phương thức trên đối tượ ng qua tham chiếu cơ sở phải ép kiểu
( ( kiểu_lớp_mới ) tham_chiếu_lớp_cũ ) • tên_phương_thức (…);
l Mọi phương thức đều mặc định có thuộc tính ảo (virtual)
Bài 2 Lập trình HĐT Java
F2.4 Kỹ thuật đa hình
l Đa hình khi chạy phương thức ảo
Khi chạy một phương thức, máy tìm nó bắt
đầu trong lớp dẫn xuất của đối tượng được
tham chiếu, nếu không thấy sẽ tìm ngược lên
các lớp cơ sở và thực hiện tại phiên bản viết
đè mới nhất
l Đa hình trong tham số
Tham số là một tham chiếu thì có thể truyền
bất kỳ một đối tượng của lớp đó hoặc các lớp
dẫn xuất từ nó
l Các lớp wrapper
Lớp wrapper được tạo để gói các dữ liệu
nguyên thủy thành đối tượng, như Integer,
Float, Double, Character, Boolean, Long,…
Trang 9Bài 2 Lập trình HĐT Java
F2.4 Kỹ thuật đa hình
l Danh sách đối tượng khác kiểu
Dùng mảng các tham chiếu cơ sở để quản
lý các đối tượng dẫn xuất khác kiểu nhau
Bài 2 Lập trình HĐT Java
F2.5 Cơ chế ảo và trừu tượng
l Phương thức ảo và sự đa hình
Một phương thức lớp cơ sở có thể gọi một phương
thức lớp dẫn xuất bằng cơ chế ảo và đa hình
l Lớp trừu tượng
- Là lớp không dùng để tạo đối tượng, quy định bằng
từ khóa abstract đầu lớp.
- Lớp trừu tượng được dùng khi nó đóng vai trò lớp
cơ sở, cấm không cho tạo đối tượng xử lý từ lớp này
l Phương thức trừu tượng
- Là phương thức không được lập trình, phải quy
định bằng từ khóa abstract.
- Một lớp chứa phương thức trừu tượng bắt buộc lớp
đó cũng phải trừu tượng
Ví dụ: Lập trình có cơ chế ảo, trừu tượng và đa hình?
Bài 2 Lập trình HĐT Java
F2.6 Lập trình gói
l Khái niệm về gói
Gói là một kỹ thuật lập trình thư viện, cho phép tổ chức các lớp theo cấu trúc phân cấp, tạo không
gian tên cho mỗi lớp
l Cách tổ chức lớp theo gói
- Các gói được tổ chức phân cấp theo cây thư mục, mỗi gói tương ứng với một thư mục chứa các lớp
trong đó
Lớp 1 Lớp 2 Lớp 3
Gói 1
Lớp 1 Lớp 2 Lớp 3 Gói 2
Trang 10Bài 2 Lập trình HĐT Java
F2.6 Lập trình gói
l Cách tạo gói cho các lớp
- Các lớp được tạo hoặc chép vào thư mục ứng với gói, trong đó mỗi tệp chương trình trong gói phải sử dụng từ câu
lệnh sau để định nghĩa gói:
package tên_gói_cấp1 •tên_gói_cấp2 • ;
l Cách sử dụng gói và không gian tên của lớp
- Để sử dụng gói trong một chươ ng trình ta sử dụng lệnh import, khi đó chương trình có thể dùng tất cả các lớp của
gói đó
- Có thể sử dụng các lớp trực tiếp với tên đầy đủ như sau:
tên_gói_cấp1•tên_gói_cấp2• tên_lớp
- Java sử dụng biến môi trườ ng CLASSPATH của Windows để xác định đường dẫn tự động tìm kiếm đến các gói và
lớp
KL
HL
abc.java myprogram.java
khali.java yourprogram.java
Bài 2 Lập trình HĐT Java
F2.6 Lập trình gói
l Sự ảnh hưởng của phạm vi truy xuất đến gói và lớp
Tức là không quy định phạm vi cho thành viên khi khai báo, chỉ được phép truy xuất từ các lớp bên trong gói
Ví dụ: Tạo 2 gói chứa hai lớp bất kỳ, sử dụng 2 gói trên tạo hai đối tượng và thử / C2_VD3
l Khái niệm giao diện
- Giao diện là một tập các phương thức trừu tượng (chỉ được khai báo, chưa được lập trình)
- Giao diện dùng để trích ra các phương thức cần thiết từ một lớp, có thể hiểu giao diện ở đây là thể hiện
giữa các lớp với người lập trình
l Định nghĩa giao diện
Trang 11- Trong giao diện chủ yếu chứa khai báo phương thức, nếu là dữ liệu thì phải quy định cảstaticvàfinal.
- Ví dụ về định nghĩa giao diện
interface myInterface { static final int count ; public void paint() ; public void run() ; }
- Một giao diện có thể kế thừa (extends) từ nhiều giao diện khác
l Sử dụng giao diện
- Giao diện được sử dụng trong xây dựng lớp, các lớp cài đặt một giao diện có nghĩa nó phải được lập
trình cho các phương thức
- Một lớp có thể cài đặt cho nhiều giao diện khác nhau
class tên_lớp implements giao_diện1 , giao_diện2 , {
1) Xây dựng lớp đối tượng nhân viên gồm họ tên, năm sinh, hệ số lương, mức lương cơ bản ở dạng
x mức lương cơ bản), một phương thức tĩnh để cập nhật mức lương cơ bản
Lập trình tạo và nhập danh sách n nhân viên, sắp xếp theo họ tên và hiện ra, tính tổng tiền lương
Nhập lại lương cơ bản và tính tổng lương mới / C2_VD1
2) Xây dựng lớp đối tượng hình tròn có tâm, bán kính, các phương thức tạo, nhập, hiện, tính chu vi,
tính diện tích, phương thức thay đổi bán kính
Kế thừa xây dựng lớp đối tượng hình elíp có thêm bán kính phụ, các phương thức tạo, nhập, hiện, tính
chu vi, diện tích
Lập trình tạo hai đối tượng hình tròn và hình elíp, chạy thử các phương thức trên hai đối tượng đó /
C2_VD2
l Các bài tập yêu cầu
Bài 2 Lập trình HĐT Java
F2.8 Bài tập
Bài 3 Lập trình GUI trong Java
Trang 123.1- Cơ chế đồ họa GUI trong Java
l Java cung cấp cơ chế lập trình đồ họa theo các đối
tượng thành phần (components)
l Hệ thống tọa độ theo pixels
Chương Trình Java
Thư viện GUI của Java
(Giao diện) (Người dùng)
3.1- Cơ chế đồ họa GUI trong Java
l Có hai mức xử lý đồ họa:
l Cơ chế giao diện theo cửa sổ (windowing)
l Phiên bản GUI đầu của Java là AWT (Abstract Window Toolkit), với
nhiệm vụ làm trong suốt giữa chương trình có giao diện cửa sổ với các
hệ nền mà chương trình đó chạy
l Tuy nhiên, các đối tượng AWT làm việc dựa trên đối tượng đồ họa của
hệ nền (native component) thông qua đối tượng trung gian (peer
object), điều này làm tăng độ phức tạp khi máy làm việc với các đối
Bài 3 Lập trình GUI trong Java
F3.2 Thư viện AWT & Swing
Trang 13Bài 3 Lập trình GUI trong Java
F3.2 Thư viện AWT & Swing
l Phiên bản Swing làm việc hoàn toàn của Java, không
phụ thuộc các đối tượng đồ họa của hệ nền, cho phép
bạn quyết định họat động của một đối tượng đồ họa
Ví dụ cho nút lệnh (button) làm việc như là một cửa sổ
(window)
l Các đối tượng swing được gọi là đối tượng
lightweight, với lý do như trên.
l Mỗi đối tượng swing có ba phần cơ bản sau:
* Contents : chứa nội dung, trạng thái của đối tượng
* Visual Appearance: quy định sự nhìn thấy của đối
tượng như màu sắc, hình dáng, kích thước,
* Behaviour : quy định những phản hồi của đối tượng
đối với các sự kiện
l Ba thành phần trên tương tác với nhau qua mô hình
MVC (Model-View-Controller) như hình bên
l Các phương thức cơ bản của JFrame
l JFrame (String title);
l setDefaultCloseOpration (int operation);
Trang 143.3- Container & Component
l Component là các đối tượng giao diện đồ họa mức
cao, như cửa sổ, nút lệnh, menu,…
l Container là đối tượng chứa, quản lý & hiển thị các đối
tượng khác (components).
l Container cũng là một Component & nó có thể được
chứa trong một Container khác, gọi là các Container
lồng nhau.
l Đặt một component vào container:
3.3- Container & Component
Component
Container Button, Canvas, Checkbox, Label, …
JComponent
Window Panel ScrollPane
Frame
JMenuBar, JToolBar, JList, JTextComponent, JLabel, JComboBox, JToolTip, JTree, JSlider, JPanel, JSplitPane, JPopupMenu, JRootPane, JScrollBar, …
JFrame java.awt.*
javax.swing.*
3.3- Container & Component
l Một số component cơ bản
Trang 153.4- Quản lý Layout
l Java cung cấp hai cách sắp các components trong
container: theo tọa độ và theo layout
l Layout: các components trong container được sắp xếp
tự động thông qua đối tượng LayoutManager.
l Cách đặt thêm một Component vào Container, sử dụng phương thức của lớp
java.awt.Container như sau:
public Component add ( Component c);
public Component add ( Component c, int index);
public Component add ( Component c, Object constraints);
với c là đối tượng cần thêm, index là chỉ số của đối tượng thêm trong Container,
constraints là ràng buộc của đối tượng được thêm vào, phương thức này trả về tham
chiếu của đối tượng thêm thành công
l Đối tượng chứa Container sử dụng cơ chế Layout quy định vị trí và kích
thước các đối tượng Component trong nó Mỗi Container có thể được thiết lập
một trong nhiều kiểu Layout bằng câu lệnh sau:
void setLayout ( LayoutManager m);
với m là một đối tượng LayoutManager (là một giao diện) gồm một trong các kiểu lớp
thể hiện sau:
Bài 3 Lập trình GUI trong Java
F3.5 Quản lý Layout
l java.awt.FlowLayout, các đối tượng được xếp từ trái sang phải, có kích thước cố định
trước, có thể xuống dòng, có khoảng cách giữa các đối tượng
Để quy định cách trình bày đối tượng theo kiểu này sử dụng các phương thức tạo như
sau:
public FlowLayout ();
public FlowLayout ( int align);
public FlowLayout ( int align, int hgap, int vgap);
với align quy định căn chỉnh các đối tượng trên dòng gồm { FlowLayout.LEFT,
FlowLayout.CENTER, FlowLayout.RIGHT}, hgap và vgap là khoảng rộng giữa các đối tượng
theo chiều ngang và dọc
Bài 3 Lập trình GUI trong Java
F3.5 Quản lý Layout
Trang 16l java.awt.BorderLayout, các đối tượng được xếp 4 phía xung quanh
{BorderLayout.EAST/WEST/NORTH/SOUTH} và ở giữa {BorderLayout.CENTER}, không cần kích
thước định trước, máy sẽ tự động
Các phương thức tạo c ủa lớp gồm:
public BorderLayout ();
public BorderLayout ( int hgap, int vgap);
Khi thêm một Component phải quy định phía cần đặt bằng cú pháp sau:
public Component add ( Component c, int quy_định_phía);
Bài 3 Lập trình GUI trong Java
F3.5 Quản lý Layout
Ví dụ: Lập trình hai cửa sổ, thêm các điều khiển JLabel để hiện thông tin của bạn và gia đình theo
hai kiểu FlowLayout, BorderLayout như trên / C3_VD3
l java.awt.GridLayout / GridBagLayout, các đối tượng được xếp theo từng hàng cột, có thể liên kết
nhiều hàng hoặc cột để xếp một đối tượng Với GridBagLayout sử dụng đối tượng GridBagConstraints
để tổ chức các đối tượng
- Các phương thức tạo của hai lớp trên gồm:
public GridLayout( int rows, int cols);
public GridLayout( int rows, int cols, int hgap, int vgap);
public GridBagLayout( );
- Khi thêm các đối tượng vào Container theo GridLayout máy sẽ tự động xuống dòng nếu hết các ô trên
dòng, theo GridBagLayout thì máy dựa vào ràng buộc (GridBagConstraints) để định vị đối tượng
l GridBagConstraints, là một lưới có liên kết giữa các ô với nhau để định vị các đối tượng trên
Container, có một số thành phần với ý nghĩa như sau:
-gridx & gridy : là vị trí cột, hàng của đối tượng
-weightx & weighty : độ rộng thêm vào theo cột, hàng
-gridwidth & gridheight : số cột và hàng một đ ối tượng chiếm giữ
-fill : quy định đ ối tượng được phủ đầy vào khoảng trống các ô chiếm giữ {BOTH / NONE / HORIZONTAL /
VERTICAL}
-anchor : căn c hỉnh đối tượng trong phần hiển thị {EAST / WEST/ CENTER}
Bài 3 Lập trình GUI trong Java
F3.5 Quản lý Layout
l Minh họa lưới GridBagConstraints như sau:
l Thêm đối tượng kiểu Layout này phải kèm nó tương ứng:
add ( Component c, Object cons traints);
l Ngoài ra có thể quản lý theo kiểu không Layout, phải đặt nulltrong thiết lập Layout, khi đó phải căn
chỉnh vị trí tọa độ cho từng đối tượng trên cửa sổ (như thiết kế giao diện trong Windows)
gridx=2, gridy=1
gridx=1, gridy=0,gridwidth=2
gridx=2, gridy=1,gridwidth=2gridx=2, gridy=1,gridheight=2
Bài 3 Lập trình GUI trong Java
F3.5 Quản lý Layout
Ví dụ: Lập trình hai cửa sổ sử dụng hai kiểu Layout là GridLayout và GridBagLayout để định vị các điều khiển đơn giản JLabel,
JTextField / C3_VD4
Trang 17l JPanel, là đối tượng Container để tổ chức và chứa các điều khiển trên cửa sổ, có một số phương
thức quan trọng sau:
-JPanel();
-setLayout( LayoutManager m);
-add( Component c, Object constraints);
l Có thể sử dụng JPanel lồng nhau, kết hợp với Layout để sắp xếp các đối tượng theo ý muốn trên cửa
sổ
Panel 1, CYAN
Panel 0, BLUE
Panel 2, MAGENTA
Bài 3 Lập trình GUI trong Java
F3.5 Quản lý Layout
Ví dụ: Lập trình sử dụng Layout với các Panel lồng nhau để lập cửa sổ trên / C3_VD5.
events
Bài 4 Lập trình GUI cơ bản
l Swing cung cấp các đối tượng GUI cơ bản, đều kế thừa từAbstractButton.
-JLabel: đối tượng văn bản tĩnh
-JTextField / JTextArea / JPasswordField: đối tượng nhập văn bản một hoặc nhiều dòng
-JButton: đối tượng nút lệnh
-JCheckBox: đối tượng ô kiểm tra
-JRadioButton: đối tượng ô lựa chọn
l Mỗi đối tượng đều có phương thức tạo để thiết lập thuộc tính văn bản hiển thị, tạo và đặt lên cửa sổ
bằng phương thức add( )
l Các bước tạo đối tượng Coponent trên Container như sau:
Bước 1) Tạo một đối tượng Component, sử dụng phương thức tạo nếu cần
tham_chiếu = new tên_lớp_component ( văn_bản , độ_rộng );
Bước 2) Sử dụng phương thức add( ) trên Container để thêm
add( tham_chiếu );
l Có thêm thực hiện trực tiếp như sau:
add ( newtên_lớp_component ( văn_bản ) );
Bài 4 Lập trình GUI cơ bản
F4.1 Các đối tượng đơn giản
Trang 18l Các phương thức xử lý cơ bản trên Component gồm:
*.getText() / setText() : lấy / đặt văn bản trong đối tượng
*.isSelected() : cho biết trạng thái chọn hay không
*.setSelected( boolean b) : đặt trạng thái chọn
*.setEnabled(booleanb) : tắt / bật trạng thái kích họat component
*.getBorder() / setBorder(Borderb) : lấy / đặt kiểu đường viền
*.getBounds(), getX(), getY(), getHeight(), getWidth() : lấy vị trí và kích thước
*.getListeners() : cho mảng các đối tượng nghe sự kiện đăng ký với component
*.setFont(Fontf) / setBackground(Colorc) / setForeground(Colorc),
*.setTooltipText(String t) / setVisible(booleanb),
*.setPreferredSize(Dimension d) : đặt kích thước cố định
*.setOpaque(booleanb) : đặt chế độ nền đặc/trong suốt của component,
Bài 4 Lập trình GUI cơ bản
F4.1 Các đối tượng đơn giản
Ví dụ: Lập trình tạo các đối tượng cơ bản trên JFrame / B4_VD1.
l Sự kiện được phát sinh từ một đối tượng nguồn (source), sau đó được xử lý bởi một đối tượng nghe (listener)
đươc gọi là mô hình delegation trong Java.
l Có ba thành phần chính:
- Nguồn sự kiện (source) : là các đối tượng GUI (component), sự kiện là một đ ối tượng trong Java được tạo ra
bởi các c omponent và chuyển tới các đ ối tượng nghe
- Nghe sự kiện (listener) : là đối tượng đ ược đ ăng ký với nguồn sự kiện để nhận và xử lý các sự kiện phát sinh
l Một đối tượng nghe có thể được đăng ký tới nhiều nguồn, một nguồn có thể đăng ký
cho nhiều đối tượng nghe
l Các sự kiện có thể được chia thành các loại sau:
- Sự kiện chuột (down, up, click, move, drag)
- Sự kiện phím (press, release, type)
- Sự kiện tác-động : chọn nút lệnh, đánh dấu ô checkbox, chọn nút radio, kéo trượt thanh cuộn,
l Các lớp đối tượng sự kiện tương ứng là ( java.awt.event.*)
-MouseEvent : đối tượng sự kiện chuột với các phương thức
+ getButton() :cho biết nút được bấm {NOBUTTON, BUTTON1/2/3}+ getPoint() / getX() / getY() : lấy tọa độ chuột
-ActionEvent : đối tượng sự kiện trên các đối tượng giao diện
+ getActionCommand() : lấy xâu chứa lệnh liên quan đến sự kiện
+ getWhen() : lấy thời điểm phát sinh sự kiệnBài 4 Lập trình GUI cơ bản
F4.2 Xử lý sự kiện
Trang 19-KeyEvent : đối tượng sự kiện bàn phím
+ getKeyChar() : lấy ký tự được gõ
+ getKeyCode() : lấy mã phím được gõ { VK_UP, VK_DOWN, VK_A, }
+ isActionKey() : cho biết có là phím điều khiển
- Ngoài ra có các sự kiện như WindowEvent, MouseWheelEvent,
l Các giao diện/ lớp để nghe và xử lý sự kiện gồm:
-MouseListener/ MouseAdapter: xử lý click c huột
-MouseMotionListener/ MouseMotionAdapter: xử lý dịch chuyển chuột
-MouseWheelListener: xử lý nút giữa chuột
-KeyListener/ KeyAdapter: xử lý bàn phím
-ActionListener: xử lý sự kiện tác động
-WindowListener/ WindowAdapter: xử lý sự kiện trên cửa sổ
-ItemListener: xử lý sự kiện thay đổi trạng thái chọn trên một số component
l Chúng ta có thể cài đặt giao diện ( Listener) hoặc sử dụng lớp ( Adapter) ở trên để tạo
các đối tượng nghe và xử lý sự kiện tương ứng
Bài 4 Lập trình GUI cơ bản
Bài 4 Lập trình GUI cơ bản
F4.3 Sự kiện Action
Ví dụ: Lập trình xử lý sự kiện Action trên JButton / B4_VD2
l Cách xử lý sự kiện MouseEvent, MouseMotionEvent
void mouseClicked( MouseEvent e) { … }
void mouseEntered( MouseEvent e) { … }
void mouseExited( MouseEvent e) { … }
void mousePressed( MouseEvent e) { … }
void mouseRelease( MouseEvent e) { … }
(Bước 2)
(Khi có sự kiện)Bài 4 Lập trình GUI cơ bản
F4.4 Sự kiện Mouse
Trang 20Bài 4 Lập trình GUI cơ bản
void windowActivated( WindowEvent e) { … }
void windowClosed( WindowEvent e) { … }
void windowClosing( WindowEvent e) { … }
void windowDeactivated( WindowEvent e) { … }
void windowDeiconified( WindowEvent e) { … }
void windowIconified( WindowEvent e) { … }
void windowOpened( WindowEvent e) { … }
e
Đăng ký
* addWindowListener (
WindowListenera );
(Bước 2)
(Bước 1)
(K
hi c ó sự kiệ
n x ảy ra)
Bài 4 Lập trình GUI cơ bản
(Bước 2)
(Bước 1)
(K
hi c ó sự kiệ
Trang 21Bài 4 Lập trình GUI cơ bản
(Frame:GridBagLayout, Panel:GridBagLayout)
Panel 3
{gridx=1, gridy=1, gridwidth=1}
Panel 2
{gridx=0,
gridy=1, gridwidth=1}
Panel 4
{gridx=0, gridy=2, gridwidth=2}
Panel 5
{gridx=0,
gridy=3, gridwidth=2}
Bài 4 Lập trình GUI cơ bản
F4.8 Bài tập
l Ví dụ 1: Tạo một nút lệnh và lập trình xử lý sự kiện chọn nút lệnh đó
JButtonbutton1=new JButton ( "Event te st" );
button1.addActionLi stener ( new ActionLi stener () {
public void actionPerformed ( ActionEvente ){
System.out.prin t( "\n Click on button1 " );
} });
l Ví dụ 2: Tạo một textfield và lập trình xử lý sự kiện gõ phím
JTextFieldtext = new JTextFie ld ( 5 );
text.addKeyLi stener ( new KeyAdapter () {
public void keyTyped ( KeyEvente) {
System.out.prin t( "\n Key char = " + e.getKeyChar() );
} });
l Ví dụ 3: Tạo một panel và lập trình xử lý sự kiện chuột
JPanelpanel = new JPanel ();
panel.addMou seMo tionLi stener ( new Mou seMotio nLi stener (){
public void mouseDragged ( Mo useEvente ){
System.out.prin t("\n Dragged : x="+e.getX()+", y="+e.getY());
}
public void mouseMoved ( MouseEvente ){ }
});
panel.addMou seLi stener ( new Mou seAdapter (){
public void mouseClicked ( Mouse Evente ){
System.ou t.print("\n Clicked button="+e.getButton());
} });
Bài 4 Lập trình GUI cơ bản
F4.9 Ví dụ về xử lý sự kiện
Trang 22Bài 5 Lập trình GUI nâng cao
l JComboBox, JList: danh sách chọn (list) hoặc có thể nhập (combobox)
- Phương thức tạo: JComboBox(), , JList(),
- Thêm mục chọn vào danh sách:
JComboBox.add Item(Object item);
JList.setListData(Object[] items);
- Xóa bỏ mục chọn trong danh sách:
JComboBox.removeItem(Object item), removeItem(int index), removeAllItems();
JList.setListData(null);
- Xác định mục đang được chọn:
JComboBox.getSelectedIndex(), getSelectedItem(), getSelectedObjects();
JList.getSelectedIndex(), getSelectedValue(), getSelectedValues();
- Xử lý sự kiện ListSelectionListener, ActionListener,
JList.addListSelectionListener(ListSelectionListener listener); (sau khi chọn)JComboBox.add ActionListener(ActionListener listener); (sau khi chọn)JComboBox.add ItemListener(ItemListener alistener);
- Một số phương thức xử lý khác:
JComboBox.setEditable(boolean b);
Bài 5 Lập trình GUI nâng cao
F5.1 Các đối tượng dạng List
Ví dụ: Tạo hai đối tượng Combo chọn tháng và List chọn ngày trong tuần / B5_VD1
l JDialog, JOptionPane, JFileChooser, JColorChooser: các hộp thoại, thông báo
- JDialog : tạo các hộp thoại, như Frame nhưng có thể đặt chế độ Modal
- JOptio nPane : hiện các thông báo với người dùng
- JFileChooser, JColorChooser : hộp thoại chọn tệp tin và màu sắc
l Một số phương thức xử lý cơ bản:
JDialog.JDialog( owner , title , modal );
void JOptionPane showMessageDialog( parent , message , title , type );
int JOptionPane showConfirmDialog( parent , message , title , type );
int JFileChooser.showOpenDialog( parent ); {CANCEL_OPTION, }
int JFileChooser.showSaveDialog( parent ); {APPROVE_OPTION, }
File JFileC hooser.getSelectedFile();
File[] JFileC hooser.getSelectedFiles();
String JFileC hooser.getName(File file);
Color JColorChooser showDialog( parent, title, color_init );
l Các phương thức đậm nghiêng là ở dạng tĩnh (static)
Bài 5 Lập trình GUI nâng cao
F5.2 Các đối tượng dạng Dialog
Ví dụ: Tạo một Dialog có nút chọn màu, chọn file, kết thúc có thông báo / B5_VD2
Trang 23l JMenu, JMenuBar, JMenuItem, JPopupMenu, JCheckBoxMenuItem, JRadioButtonMenuItem: tạo
và xử lý trên đối tượng thực đơn, thực đơn ngang, mục chọn thực đơn, thực đơn dọc
l Phương thức tạo thực đơn, mục chọn thực đơn,
JMenu(String text); JMenuBar(); JMenuItem(String text); JPo pupMenu(String text);
JCheckBoxMenuItem(String text); JRadioButtonMenuItem(String text);
l Phương thức thêm các mục chọn vào thực đơn:
JMenuBar.add(JMenumenu); (thêm một thực đơn dọc vào thực đơn ngang)
*.add(JMenuItemitem), add(Stringtext); (thêm mục chọn cho JMenu / JPopupMenu)
*.addSeparator(); (thêm dòng phân cách giữa các mục chọn)
l Phương thức xử lý sự kiện trên thực đơn (mỗi mục chọn như là một Component):
*.addActionListener(ActionListeneralistener); (cho JMenuItem)
*.addMenuListener(MenuListener mlistener); (cho JMenu )
- Trong đó, phươ ng thức của giao diện xử lý sự kiện thực đơ n gồm:
MenuListener{ menuCanceled(MenuEvent e); menuDeselected( ); menuSelected( ); }
l Đặt thực đơn lên cửa sổ (Frame/JFrame): *.setMenuBar(JMenuBarmenubar);
l Hiển thị thực đơn dọc (JPopupMenu) dạng ngữ cảnh : *.show( parent , x, y );
Bài 5 Lập trình GUI nâng cao
F5.3 Các đối tượng dạng Menu
l Sơ đồ liên quan giữa các đối tượng thực đơn và xử lý sự kiện như sau
Bài 5 Lập trình GUI nâng cao
F5.3 Các đối tượng dạng Menu
Ví dụ: Tạo thực đơn ngang, thực đơn dọc và xử lý các mục chọn tương ứng
Thực đơn dọc được hiển thị khi bấm chuột phải lên cửa sổ /B5_VD3.
l JScrollPane, JSplitPane, JTabbedPane, JOptionPane: các
đối tượng pane hoạt động như là một bảng để chứa và tổ
chức quản lý các đối tượng khác
l JScrollPane có thể cuộn các đối tượng khác trong một khung
nhìn (viewport), một số phương thức xử lý:
*.JScrollPane( Componentview ); tạo và đặt nội dung cho khung nhìn
*.setColumnHeaderView(Component tđ_cột);
*.setRowHeaderView(Component tđ_hàng);
*.setCorner(Stringgóc, Component đối_tượng );
l JSplitPane chia khung nhìn thành hai phần (theo hàng hoặc
cột), mỗi phần hiển thị một đối tượng nào đó, một số phương
thức xử lý:
*.SplitPane( int hướng_chia, Componentleft,
Componentright );
*.setDividerSize(intdsi ze), getDividerSize();
*.setDividerLocation(intdloc);
*.setLeftComponent(Componentc), get ();
Bài 5 Lập trình GUI nâng cao
F5.4 Các đối tượng dạng Panel
Trang 24l JTabbedPane chia thành các thẻ hiển thị cho mỗi panel, như hình bên, có các phương thức xử lý:
*.JTabbedPane(); tạo một tabbed panel
*.addTab( Stringtitle, Componentc); thêm một thẻ mới vào tabbed panel
*.getSelectedIndex(); lấy thẻ đang được chọn trên tabbed panel
*.getTitleAt(intindex); lấy tiêu đề tại thẻ thứ index
*.setTitleAt(intindex, String title); đặt tiêu đề cho thẻ
*.setToolTipTextAt(intindex, String title); đặt tooltip text cho thẻ
Bài 5 Lập trình GUI nâng cao
F5.4 Các đối tượng dạng Panel
JScrollPane JScrollPane
bên phải là panel
Ví dụ : Lập trình tạo ba kiểu panel như trên để thử nghiệm trên JFrame /B5_VD4.
Bài 5 Lập trình GUI nâng cao
F5.4 Các đối tượng dạng Panel
l JProgressBar, JSlider, JSpinner: các đối tượng tiến trình, thanh trượt, tăng giảm
l Các phương thức xử lý cơ bản:
JProgressBar(int orient, int min, int max);
JSlider(int orient, int min, int max, int value);
JSpinner(SpinnerModelsm);
int *.getValue();
*.addChangeListener(ChangeListenercl);
l Trong đó, các giao diện liên quan gồm:
- SpinnerModel có ba loại cơ bản SpinnerListModel, SpinnerNumberModel, SpinnerDateModel để đặt
spinner làm việc trên danh sách, số hoặc ngày tháng Mỗi model có phương thức tạo sau để thiết lập:
SpinnerListModel(Object[] values);
SpinnerNumberModel(double val, double min,
double max, double step);
SpinnerDateModel(val, start, end, calendar);
- Giao diện ChangeListener { stateChanged(ChangeE vente); }
Bài 5 Lập trình GUI nâng cao
F5.5 Các đối tượng dạng Bar
Trang 25Bài 5 Lập trình GUI nâng cao
F5.6 Các đối tượng dạng Bar
l JToolBar: tạo thanh công cụ, nó chứa tất cả các đối tượng GUI có thể như một Container, các
phương thức xử lý cơ bản trên thanh công cụ:
JToolBar(int orient); (tạo thanh công cụ mới)
JToolBar.setFloatable (boolean b); (đặt chế độ kéo thả)
JToolBar.setMargin(Insets m); (đặt độ rộng viền xung quanh)
JToolBar.add(Componentc); (thêm các đối tượng vào thanh công cụ)
JToolBar.addSeparator(), addSeparator(Dimensionsize); (thêm khoảng cách)
Ví dụ : Lập trình tạo ba đối tượng trên để thử nghiệm /B5_VD5.
l JTree: tạo cây hiển thị, nó hoạt động theo cơ chế độc lập với dữ liệu được hiển thị thông qua một
mô hình (model) để liên kết như sau:
Bài 5 Lập trình GUI nâng cao
F5.6 Các đối tượng dạng Tree
Root
Child1
Child2
Child1.1 Child1.1
addTreeModelListener(…),…
DefaultTreeModel
TreeNode MutableTreeNode
DefaultMutableTreeNode
JTree
Data
l JTree(TreeNode root); (phương thức tạo cây)
- JTree chứa các nút (Node), mỗi nút trên cây được tham chiếu bởi TreeNode, đối tượng nút có thể sử
dụng lớp DefaultMutableTreeNode.
l Các phương thức cơ bản của DefaultMutableTreeNode:
*.add(TreeNodechild); (thêm một nút con)
*.getChildCount(); (lấy số con của nút)
*.getChildAt(int index); (lấy nút con thứ index)
*.getParent(); (lấy nút mẹ)
*.isLeaf(); (kiểm tra có phải nút lá không)
l JTree.getModel(); trả về model liên kết giữa dữ liệu với cây (TreeModel)
l Xử lý sự kiện trên cây sử dụng:
*.addTreeModelListener(TreeModelListenertml);
- Với giao diện TreeModelListener gồm 4 phương thức xử lý sự kiện như sau:
TreeModelListener{
};
Bài 5 Lập trình GUI nâng cao
F5.6 Các đối tượng dạng Tree
Trang 26Bài 5 Lập trình GUI nâng cao
F5.6 Các đối tượng dạng Tree
Ví dụ : Lập trình tạo một thanh công cụ và một cây minh họa như hình trên / B5_VD6
l JTable: bảng dữ liệu, hoạt động qua mô hình bảng kết nối tới dữ liệu cần hiển thị
l Các phương thức xử lý cơ bản trên JTable:
- Phương thức tạo bảng:
JTable(Object [][] data, Object [] tên_cột); JTable(TableModel tm);
- Phương thức lựa chọn trên bảng:
clearSelection(), changeSelection(int row,int col, boolean tog, boolean ext);
getSelectedColumn(), getSelectedRow(),
Data TableModel
Bài 5 Lập trình GUI nâng cao
F5.7 Các đối tượng dạng Table
- Phương thức xác định tính chất bảng:
- Phương thức đặt lại các tham số bảng:
Bài 5 Lập trình GUI nâng cao
F5.7 Các đối tượng dạng Table
Trang 27l Các phương thức cho giao diện TableModel như sau:
getColumnCount(); xác định số cột của bảng dữ liệu
getColumnName(int idx); xác định tên các cột
getRowCount(); xác định số hàng
getValueAt( int row, int col ); xác định dữ liệu tại ô hàng row, cột col
setValueAt( Object data, int row, int col); đặt dữ liệu cho ô hàng row, cột col
fireTableChanged( TableModelEvente); thông báo có sự thay đổi dữ liệu trên bảng, với TableModelEvent mô tả sự
thay đổi qua phương thức tạo sau:
TableModelEvent( TableModeltm, int firstRow, int lastRow, int cols);
TableModel
TableModelEvent
Bài 5 Lập trình GUI nâng cao
F5.7 Các đối tượng dạng Table
l Ngoài ra, có các đối tượng lớp hỗ trợ thêm như:
Font: mô tả và xử lý phông chữ hiển thị trên Component
Color: mô tả màu nền, màu chữ, trên Component
Bài 5 Lập trình GUI nâng cao
F5.7 Các đối tượng dạng Table
Ví dụ: Lập trình tạo bảng với dữ liệu dạng tĩnh của lớp / B5_VD7
Trang 28l Java API cung cấp lập trình đồ họa phẳng Graphic2D như vẽ hình, văn bản, hình ảnh, gồm các kỹ thuật
chính như:
- Hợp nhất kỹ thuật tô màu (rendering model) trên màn hình và máy in
- Vẽ các hình hình học cơ bản
- Trộn các hình chồng lên nhau
- Quản lý cơ chế màu,
l Một số đặc tính kỹ thuật đồ họa 2D như sau:
setStroke setPaint
setComposite setTransform
setClip setFont
setRenderingHints
Bài 6 Các kỹ thuật nâng cao
F6.1 Đồ họa Graphics2D
l Cơ chế vẽ được thực hiện trong phương thức paint() của các đối tượng Component, chúng ta có thể
yêu cầu thực hiện phương thức này bằng lệnh gọi repaint(), minh họa sau:
l Cơ chế đồ họa được thực hiện trên đối tượng Graphics, có thể thay bằng đối tượng của Graphics2D,
trong gói java.awt.*;
Components
JFrame, JLabel, JTextBox, JPanel,…
Component.paint (Graphicsg) {
Xử lý đồ họa qua Graphics }
*.drawPolygon( int[] xs, int[] ys, int n);
*.drawPolyline( int[] xs, int[] ys, int n);
*.drawRect( x,y,w,h ); drawRoundRect( x,y,w,h, arcW, arcH );
l Các lệnh vẽ (draw) có thể thay bằng lệnh tô (fill) màu cho các hình vẽ
*.drawString( Strings, int x, int y); vẽ xâu ký tự tại tọa độ x,y
l Vẽ ảnh lên đối tượng đồ họa bằng lệnh sau:
*.drawImage( Imageimg, int x, int y, ImageObobs); tọa độ vẽ x,y, quan sát obs có thểnull
Bài 6 Các kỹ thuật nâng cao
F6.1 Đồ họa Graphics2D
Ví dụ: Lập trình xử lý chuột để khi kéo chuột trái vẽ các chấm tròn / B6_VD1
Trang 29l Đối tượng lớp Image để mô tả và tổ chức dữ liệu ảnh, được lấy từ phương thức:
Image getImage( Stringfilename ); hoặc getImage( URLurl );
l Lệnh getImage trên sử dụng đối tượng Toolkit, xác định bằng phương thức:
Toolkit java.awt.Toolkit.getDefaultToo lkit();
l Khi đọc ảnh vào máy, phải dùng đối tượng đồng bộ có tên MediaTracker, các phương thức cơ bản sau:
MediaTracker( Component com ); tạo với com là đối tượng để vẽ ảnh,
* addImage( Image img , int id ); thêm đối tượ ng ảnh để đồng bộ với số hiệu là id,
* waitForID( int id ); chờ đồng bộ để nạp ảnh vào máy theo số hiệu id
Bài 6 Các kỹ thuật nâng cao
F6.1 Đồ họa Graphics2D
Ví dụ: Lập trình có một nút lệnh để chọn tệp tin hình ảnh hiển thị lên cửa sổ / B6_VD2
Images (GIF, JPEG, PNG)
Toolkit
getDefaultToolkit()
ImagedrawImage Graphics
Đồng bộ bằng đối tượng MediaTracker
E
Checked exceptions Runtime exceptions Errors
Lỗi không biết trước
Lỗi có thể khắc phụcLỗi không thể khắc phục
l Có hai cách xử lý ngoại lệ ?
Exceptions try {…}
catch (…) {…}
finally {…}
throws …
l Ví dụ về xử lý ngoại lệ
int [] x = new int[5];
for (int i=0; i<6; i++) {
Trang 30l Cơ chế ngoại lệ giữa các lớp đối tượng kế thừa
Bài 6 Các kỹ thuật nâng cao
l Lớp dẫn xuất có thể: (1) không đưa ra ngoại lệ; (2) đưa ra ngoại lệ lớp cơ sở; (3) đưa ra ngoại lệ là
dẫn xuất của ngoại lệ cơ sở
l Lập trình lớp đối tượng ngoại lệ ?
l Ví dụ một lớp ngoại lệ:
classMyException extends Exception{
public voidshow() { System.out.print( “This is my exception” ); }}
Lập trình một lớp đối tượng ngoại
lệ mới kế thừa lớp trên
l Cơ chế vào ra dữ liệu theo dòng (stream)?
A
Z
l Cơ chế bao nhau của các dòng ( thấp/cao ) vào ra ?
Bài 6 Các kỹ thuật nâng cao
F6.3 Xử lý vào ra