Professional Documents
Culture Documents
Slide D y Java - Netbean
Slide D y Java - Netbean
TOMORROW
Bài Học
Giới thiệu
Ngôn ngữ lập trình java
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
❖Lịch sử ra đờ i
❖Cá c đặ c trưng điểm mạ nh củ a Java
❖Tạ i sao nên lậ p trình Java
❖JVM - Java Virtual Machine
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Lịch sử ra đời
❑ Quản lý bộ nhớ
Bài Học
❖Notepad
❖Eclipse
❖Netbean
❖Android Studio
Phần mềm học JAVA
• Netbeans
• Eclipse
• JCreator
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Notepad
❖Netbean
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Android Studio
Bài Học
❖Link tả i:
❖http://www.oracle.com/technetwork/java/
javase/downloads/index.html
❖Nơi đã cà i đặ t:
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các cách kiểm tra JDK trong máy
Bài Học
🡺chọ n Properties
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường
Bấ m Edit Text…
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các bước cài đặt biến môi trường
;%JAVA_HOME%\bin;.;
Bài Học
Bài Học
❖Và o link:
https://netbeans.apache.org/download/index.html
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo các Project
Bài Học
❖\n 🡺Xuố ng dò ng
❖\t 🡺thụ t đầ u dò ng
❖\” 🡺trích dẫ n
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các ký tự đặc biệt
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
Bài Học
Bài Học
(int)1.0🡺1
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖Phép gá n
= += -= *=, /=
❖Phép toá n toá n họ c cơ bả n
+ - * / %
❖Phép toá n so sá nh
== > < != >= <=
❖Phép toá n logic
! && ||
❖Phép toá n tă ng dầ n ++, giả m dầ n --
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phép gán
Ký hiệu Mô tả Ví dụ
= Gá n toá n tử hạ ng hai cho toá n tử hạ ng a = 1
nhấ t
+= Cộ ng hoặ c nố i chuỗ i toá n hạ ng sau và o a += 1
toá n hạ ng đầ u và gá n kết quả cho toá n a=a+1
hạ ng đầ u
-= Trừ toá n hạ ng sau khỏ i toá n hạ ng đầ u và a -= 1
gá n kết quả cho toá n hạ ng đầ u. a=a-1
*= Nhâ n toá n hạ ng sau và o toá n hạ ng đầ u và a *= 2
gá n kết quả cho toá n hạ ng đầ u a=a*2
/= Chia toá n hạ ng sau cho toá n hạ ng đầ u và a /= 2
gá n kết quả cho toá n hạ ng đầ u a=a/2
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phép toán toán học cơ bản
Toá n tử Mô tả
+ Cộ ng
- Trừ
* Nhâ n
/ Chia
% Chia lấy phầ n dư
Toá n tử Mô tả
== So sá nh bằ ng
!= So sá nh khô ng bằ ng
> So sá nh lớ n hơn
>= So sá nh lớ n hơn hoặ c bằ ng
< So sá nh nhỏ hơn
<= So sá nh nhỏ hơn hoặ c bằ ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phép toán logic
Toá n tử Mô tả
! Đú ng thà nh sai, sai thà nh đú ng.
Toá n tử Mô tả
++ Tă ng mộ t giá trị
int x=8;
int y= 2;
int k=3
int z = --k - ++x - y++ +2;
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Độ ưu tiên toán tử
Thứ tự Toá n tử
1 Cá c toá n tử đơn như: +, -, ++, --
2 Cá c toá n tử số họ c *, /, +, -
3 Cá c toá n tử quan hệ >, <, >=, <=, ==, !=
4 Cá c toá n tử luậ n lý &&, ||, ?:
5 Cá c toá n tử gá n =, *=, /=, +=, -=
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖Nhậ p Chuỗ i:
System.out.println("Mời bạn nhập tên:");
String ten=sc.nextLine();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖Cấ u trú c if
❖Cấ u trú c if else
❖Cấ u trú c 3 ngô i
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc if
if (<expression> )
{
<statement>;
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc if-else
❖Ví dụ 1
if (dtb >=5)
{
System.out.println (“Đậ u");
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc if-else
❖Ví dụ 2
if (i % 2 == 0)
{
System.out.println ("i la so chan");
}
else
{
System.out.println("i la so le");
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc if-else
❖Ví dụ 3
if ((y % 4 == 0 &&y%100!=0) || y%400==0)
{
System.out.println ("y la nă m nhuậ n");
}
else
{
System.out.println("y khô ng là nă m nhuậ n");
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc 3 ngôi
❖ Có dạ ng:
<Điều kiện> ? <Biểu thứ c 1> : <Biểu thứ c 2>
Nếu <Điều kiện> đú ng thì <Biểu thứ c 1> thự c hiện,
ngượ c lạ i <Biểu thứ c 2> thự c hiện
❖ Là dạ ng rú t gọ n củ a if…else
❖ Ví dụ
▪ string a = (i % 2 == 0) ? “so chan” : “so le”
▪ if(i%2==0)
▪ a=“so chan”;
▪ else
• a=“so le”
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖Ví dụ
switch (i)
{
case 1:
System.out.println("so 1");
break;
case 2:
System.out.println("so 2");
break;
default:
System.out.println("default");
break;
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cấu trúc switch biến thể
switch (<biến cầ n kiểm tra>) {
case <giá trị 1>:
case <giá trị 2>:
<cô ng việc X>;
break;
case <giá trị 3>:
case <giá trị 4>:
<cô ng việc Y>;
break;
…
default:
<cô ng việc nếu khô ng thuộ c trườ ng hợ p nà o ở trên>;
break;
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
Cú phá p:
while(expression)
statement;
●Ý nghĩa:
●B1: Expression đượ c định trị
●B2: Nếu kết quả là true thì
statement thự c thi và quay lạ i B1
❖Ví dụ
n = 1;
i = 1;
while (i <= 5)
{
n *= i;
i++;
}
System.out.println("5 giai thua ="+ n);
Giả sử n=5, gt=1, i=1
Lần 1: kiểm tra i<=n⬄1<=5🡺đúng🡺làm body while:
gt=gt*i=1*1=1
i++🡺i=i+1=1+1=2
Lần 2: kiểm tra i<=n⬄2<=5🡺đúng🡺làm body while:
gt=gt*i=1*2=2
i++🡺i=i+1= 2+1=3
Lần 3: kiểm tra i<=n ⬄3 <=5🡺đúng🡺làm body while:
gt=gt*i=2*3=6
i++🡺i=i+1=3+1=4
Lần 4: Kiểm tra i<=n⬄4<=5🡺đúgn🡺làm body while:
gt=gt*i=6*4=24
i++🡺i=i+1=4+1=5
Lần 5: Kiểm tra i<=n⬄5<=5🡺đúng🡺làm body while:
gt=gt*i=24*5=120
i+=🡺i=i+1=5+1=6
Lần 6: kiể mtra i<=n⬄6<=5🡺sai🡺ngừng while
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖ Cú phá p và cá ch hoạ t độ ng vò ng lặ p
do...while
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vòng lặp do…while
Cú pháp:
do {
statement;
}while(expression);
●Ý nghĩa:
−B1:Statement được thực hiện
−B2:Expression được định trị.
−Nếu expression là true thì
quay lại bước 1
−Nếu expression là false thì
thoát khỏi vòng lặp.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Vòng lặp do…while
❖Ví dụ
n = 1;
i = 1;
do
{
n *= i;
i++;
} while (i<=5);
System.out.println("5! = "+ n);
Giả sử: n=5; gt=1, i=1
Lần 1: gt=gt*i=1*1=1
i++🡺i=i+1=1+1=2
Kiểm tra i<=n ⬄2<=5🡺đúng
Lần 2: gt=gt*i=1*2=2
i++🡺i=i+1=2+1=3
Kiểm tra i<=n ⬄3<=5🡺đúng
Lần 3: gt=gt*i=2*3=6
i++🡺i=i+1=3+1=4
Kiểm tra i<=n ⬄4<=5🡺đúng
Lần 4: gt=gt*i=6*4=24
i++🡺i=i+1=4+1=5
Kiểm tra i<=n⬄5<=5🡺đúng
Lần 5: gt=gt*i=24*5=120
i++🡺i=i+1=5+1=6
Kiểm tra i<=n ⬄6<=5🡺sai🡺ngừng do while
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖Ví dụ
int i;
int n = 1;
for(i=1; i<=5; i++)
{
n *= i;
}
System.out.println("5 giai thừa ="+ n);
n=5, gt=1
Lần 1) i=1, kiểm tra i<=n⬄i<=5🡺đúng, làm body:
gt=gt*i=1*1=1
Lần 2) i++🡺i=i+1=1+1=2,
kiểm tra i<=n ⬄2<=5🡺đúng, làm body:
gt=gt*i=1*2=2
Lần 3) i++🡺i=i+1=2+1=3
kiểm tra i<=n ⬄3<=5🡺đúng, làm body:
gt=gt*i=2*3=6
Lần 4) i++🡺i=i+1=3+1=4
kiểm tra i<=n ⬄4 <=5🡺đúng, làm body:
gt=gt*i=6*4=24
Lần 5) i++🡺i=i+1=4+1=5
kiểm tra i<=n⬄5<=5🡺đúng, làm body:
gt=gt*i=24*5=120
Lần 6) i++🡺i=i+1=5+1=6
kiểm tra i<=n ⬄6<=5🡺vô lý🡺ngừng for
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖ Khá i niệm về mả ng
❖ Mụ c đích dù ng mả ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm về mảng
Mảng là một loại biến đặc biệt, bao gồm một dãy các ô nhớ có nhiều ô
nhớ con cho phép biểu diễn thông tin dạng danh sách trong thực tế
Các phần tử trong mảng có cùng kiểu dữ liệu với nhau
Ví dụ:
Chỉ số 0 1 2 3 4 5 6 7
Mảng M 5 8 1 0 3 2 7 6
Phần tử M[3]
Bài Học
Bài Học
Truy suất và
thao tác trên mảng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
❖ Cá ch lấy dữ liệu từ mả ng
❖ Cá ch thay đổ i dữ liệu trên mả ng
❖ Cá ch xuấ t dữ liệu mả ng: for, for giá trị
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách lấy dữ liệu từ mảng
Chỉ 0 1 2 3 4 5 6 7
số M[3] ?
Mảng M 5 8 1 113 3 2 7 6 M.length ?
❖ M[i]= value
❖ M[3]=113
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách xuất dữ liệu mảng: for, for giá trị
Bài Học
Bài Học
Bài Học
❖ Calendar
❖ SimpleDateFormat
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Calendar
✔ Lấy ngày thá ng nă m hiện tạ i:
Calendar cal=Calendar.getInstance();
✔ Lấy từ ng tiêu chí
cal.get(Calendar.YEAR);
cal.get(Calendar.MONTH);
cal.get(Calendar.DAY_OF_MONTH);
✔ Thay đổi tiêu chí:
cal.set(Calendar.YEAR, 1990);
✔ Lấy ngày thá ng nă m:
Date t=cal.getTime();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
SimpleDateFormat
❖SimpleDateFormat : Dù ng để định dạ ng
cá ch hiển thị ngày thá ng, chuyển chuỗ i
qua ngày thá ng
SimpleDateFormat sdf= new
SimpleDateFormat ("dd/MM/yyyy");
Calendar cal=Calendar.getInstance();
Date t=cal.getTime();
SimpleDateFormat sdf=new
SimpleDateFormat("dd/MM/yyyy");
System.out.println(sdf.format(t));
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
Bài Học
❖ Random: số nguyên
❖ Random rd=new Random();
❖int x=rd.nextInt(n);
❖Trả về số ngẫu nhiên từ [0…n-1]
❖Ví dụ:
❖[0….100]🡺rd.nextInt(101)
❖[-100 …100]🡺-100+rd.nextInt(201)
❖[-100 … -50]🡺-100+rd.nextInt(51)
❖[a…b]🡺tự làm nha….
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
❖[0…1)
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
Bài Học
❖ StringBuilder
❖ StringTokenizer
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringBuilder
❖ Lớ p StringBuilder
Quả n lý mộ t chuỗ i có thể thay đổ i kích thướ c và nộ i dung
// Phương thức
// Khởi tạo
append()
StringBuilder()
insert()
StringBuilder(int capacity)
delete()
StringBuilder(String s)
reverse()
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringBuilder
❑ Lớp StringBuilder
● Cá c hà m khở i tạ o củ a lớ p
▪StringBuilder(): Mặ c định tạ o ra mộ t đố i tượ ng
StringBuilder có thể lưu giữ đượ c 16 ký tự
▪StringBuilder(int capacity): Tạ o ra mộ t đố i tượ ng
StringBuilder có thể lưu giữ đượ c capacity ký tự
▪StringBuilder(String s): Tạ o mộ t đố i tượ ng
StringBuilder lấy thô ng tin từ chuỗ i s
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringBuilder
❑ Lớp StringBuilder
● Ví dụ :
StringBuilder sb = new StringBuilder();
sb.append(“Wellcome to ");
sb.append(“Java ”);
sb.append(“world”);
System.out.println(sb);
// Wellcome to Java world
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringTokenizer
● Các hàm khởi tạo của lớp
▪ StringTokenizer(String str): Xây dự ng mộ t chuỗ i tokenizer
cho mộ t chuỗ i cụ thể str. Sử dụ ng cá c delim mặ c định là : “\t\n\
r\f"
▪StringTokenizer(String str, String delim): Xây dự ng mộ t
chuỗ i tokenizer cho mộ t chuỗ i cụ thể str. Cá c ký tự trong delim
là ký tự để phâ n tá ch cá ch token.
▪StringTokenizer(String str, String delim,boolean
returnDelims): Xây dự ng mộ t chuỗ i tokenizer cho mộ t chuỗ i
cụ thể str. Nếu returnDelims = true thì mỗ i delim đượ c trả về là
mộ t chuỗ i có chiều dà i =1, ngượ c lạ i thì delim sẽ đượ c bỏ qua
và xem như là mộ t dấ u phâ n cá ch giữ a cá c token
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringTokenizer
● Ví dụ
String s = “Lập trình Java”;
StringTokenizer st = new StringTokenizer(s);
while (st.hasMoreTokens())
System.out.println(sr.nextToken());
s = “Lập;trình;Java”;
st = new StringTokenizer(s,”;”);
while (st.hasMoreTokens())
System.out.println(sr.nextToken());
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
StringTokenizer
● countTokens(): Tính số lượng token trong chuỗi còn lại khi sử
dụng delim mặc định
● hasMoreTokens(): Kiểm tra xem có còn token trong chuỗi các
token hay không. (*)
● nextToken(): Trả về token tiếp theo trong chuỗi các token (**)
● hasMoreElements(): Tương tự như (*), tuy nhiên nó ở trong
Enumeration<Object>
● nextElement(): Tương tự như (**), tuy nhiên giá trị trả về là
Object
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖ Cá ch khai bá o và sử dụ ng chuỗ i
❖ Cá ch thứ c quả n lý chuỗ i trong Java
❖ Kiểm tra chiều dà i chuỗ i
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách khai báo và sử dụng chuỗi
String s = "OBAMA";
O B A M A
s
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kiểm tra chiều dài chuỗi
Bài Học
❖ indexOf
❖ lastIndexOf
❖ contains
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
indexOf
Bài Học
❖ subString
String s="Xin chào Obama! Tui là Putin";
String s2=s.substring(9);
System.out.println(s2);
🡺Obama! Tui là Putin
🡺subString có 1 đối số:
lọc bên phải chuỗi
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
❖ subString
String s="Xin chào Obama! Tui là Putin";
String s3=s.substring(9, 14);
System.out.println(s3);
🡺Obama
🡺subString có 2 đối số:
lọc giữa chuỗi
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖ replace, replaceFirst
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
replace
❖ replace
String s="Xin chào Obama! Tui là Putin";
s= s.replace("Obama", "Kim Jong Un");
System.out.println(s);
❖ replaceFirst
String s="Obama Xin chào Michelle Obama";
s= s.replaceFirst("Obama", "Putin");
System.out.println(s);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖ trim
Trá nh ngườ i dù ng phá bằ ng cá ch nhậ p bừ a cá c khoả ng trắ ng
dư thừ a 2 bên
❖ Cá ch xó a khoả ng trắ ng bê n trá i chuỗ i
❖ Cá ch xó a khoả ng trắ ng bê n phả i chuỗ i
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖ compareTo, compareToIgnoreCase
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
compareTo
✔ Bằ ng 0 khi s1=s2
✔ >0 khi s1>s2
✔ <0 khi s1<s2
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
compareToIgnoreCase
✔ Bằ ng 0 khi s1=s2
✔ >0 khi s1>s2
✔ <0 khi s1<s2
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖ Cá ch Nố i chuỗ i bằ ng dấ u +
❖ Cá ch nố i chuỗ i bằ ng StringBuilder
❖ Cá ch chèn chuỗ i
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách Nối chuỗi bằng dấu +
String s="Obama";
s=s+" Putin";
System.out.println(s);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách nối chuỗi bằng StringBuilder
Bài Học
❖ Cá ch tá ch chuỗ i vớ i split
❖ Cá ch tá ch chuỗ i vớ i Stringtokenizer
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tách chuỗi với split
Obama
Putin
Kim Jong Un
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tách chuỗi với Stringtokenizer
Bài Học
❖ toUpper
❖ toLower
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
toUpper
String s="obama".toUpperCase();
System.out.println(s);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
toLower
String s="PUTIN".toLowerCase();
System.out.println(s);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
Lý do sử dụng collection
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
❖ Collection là gì?
❖ Cá ch khắ c phụ c hạ n chế củ a Mả ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Collection là gì?
Bài Học
Lớp LinkedList trong java sử dụng cấu trúc danh sách liên kết Doubly
Linked List để lưu trữ các phần tử.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Collections.sort(animals);
System.out.println(animals);
}
}
/* Outputs:
[cat, dog, snake, tiger]
*/
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
String ten=map.get(1);
if(map.containsKey(6)==false)
map.put(6, "Obama");
Collection<String>dsTen= map.values();
for(String x : dsTen)
System.out.println(x);
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
LinkedList (Danh sách liên kết) là một lớp triển khai của List
Interface trong Collections Framework nên nó sẽ có một vài đặc
điểm và phương thức tương đồng với List. Như đã nói trong bài
Tổng quan về Collection trong Java, LinkedList là 1 cấu trúc dữ
liệu lưu trữ các phần tử dưới dạng danh sách, các phần tử
trong LinkedList được sắp xếp có thứ tự và có thể có giá trị
giống nhau.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖ Ví dụ : Phâ n số
❖ Đặ c điểm
▪ Tử số
▪ Mẫ u số
❖ Thao tá c
▪ Cộ ng, trừ , nhâ n, chia
▪ Tố i giả n
▪ Nghịch đả o
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Ví dụ : xe hơi
▪ Mà u trắ ng
▪ 4 cử a
▪ 4 bá nh
▪ Hiệu Toyota
▪ Chạy tớ i
▪ Chạy lui
▪ Xe dừ ng
▪…
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Đố i tượ ng:
❖ XeHoi ❖ Tên đố i tượ ng
❖ Hiệu xe
❖ Mà u xe ❖ Thuộ c tính
❖ Số bá nh xe
❖ Số cử a
❖ Chạy tớ i
❖ Chạy lui ❖ Phương thứ c
❖ Dừ ng xe
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Cá c đố i tượ ng có cá c đặ c điểm (thuộ c tính và
phương thứ c) giố ng nhau đượ c gom nhó m thà nh
mộ t lớ p để phâ n biệt vớ i cá c đố i tượ ng khá c và dễ
quả n lý.
⇒ Mộ t lớp (class) là sự phâ n loạ i củ a cá c đố i tượ ng
hay là kiểu (type) củ a đố i tượ ng.
❖ Ví dụ :
− Cá c chiếc xe Toyota, Honda, Porsche thuộ c lớ p
xe hơi.
● Cá c con chó giữ nhà , chó să n, chó kiểng thuộ c
lớ p chó .
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Như vậy Lớp là mộ t khá i niệm trừ u tượ ng, dù ng
để chỉ mộ t tậ p hợ p cá c đố i tượ ng có mặ t trong hệ
thố ng.
❖ Lớp có thuộ c tính (property) và phương thứ c
(method):
▪ Thuộ c tính củ a lớ p tương ứ ng vớ i thuộ c tính củ a đố i
tượ ng.
▪ Phương thứ c củ a lớ p tương ứ ng vớ i cá c hà nh độ ng củ a
đố i tượ ng.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Phân biệt
Class & Object
Class chỉ một cái gì đó chung chung, object là một cái cụ thể
• Công thức làm bánh quy là một Class 🡪 bánh quy là một
Object
• Con gái là một Class 🡪 Hồng là một Object
• Con mèo là một Class 🡪 Con mèo Mimi nhà tôi là một
Object
• Bản vẽ là một Class 🡪 Ngôi nhà của tôi là một Object
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Mộ t Lớp có thể có mộ t trong cá c khả nă ng sau:
▪ Hoặ c chỉ có thuộ c tính, khô ng có phương thứ c.
▪ Hoặ c chỉ có phương thứ c, khô ng có thuộ c tính.
▪ Hoặ c có cả thuộ c tính và phương thứ c, trườ ng hợ p này
là phổ biến nhấ t.
⮚ Lớ p khô ng có thuộ c tính và phương thứ c nà o là cá c
lớ p trừ u tượ ng. Cá c lớ p này khô ng có đố i tượ ng
tương ứ ng.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Gó i (package)
▪ Mộ t nhó m cá c lớ p (classes) và giao diệ n (interfaces)
đượ c tổ chứ c thà nh mộ t đơn vị quả n lý theo hình thứ c
khô ng gian tê n gọ i là package.
▪ Lợ i ích củ a package là tổ chứ c sắ p xếp lạ i hệ thố ng thô ng
tin cá c lớ p trong dự á n mộ t cá ch khoa họ c, giú p cho việ c
theo dõ i bả o trì dự á n đượ c tố t nhấ t.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ LẬ P TRÌNH HƯỚ NG ĐỐ I TƯỢ NG CÓ 4 ĐẶ C
TRƯNG:
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Khái niệm Lớp và Đối tượng
❖ Tính trừ u tượ ng: (Abstraction)
▪ Tính trừu tượng trong Java là tính chất không thể hiện cụ
thể mà chỉ nêu tên vấn đề. Đó là một quá trình che giấu
các hoạt động bên trong và chỉ hiển thị những tính năng
thiết yếu của đối tượng tới người dùng.
▪ Ví dụ: một người sử dụng điện thoại để gửi tin nhắn thì
anh ta sẽ nhập nội dung tin nhắn, thông tin người nhận và
ấn nút gửi. Khi anh ta bắt đầu gửi tin thì anh ấy không biết
những gì diễn ra bên trong quá trình gửi mà chỉ biết được
là kết quả của tin nhắn đã được gửi đến người nhận thành
công hay chưa
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
❖ Tính đó ng gó i:
▪ Đóng gói là sự che giấu bên trong dữ liệu riêng của mỗi đối
tượng của lớp được khai báo và chỉ được truy xuất thông qua
hệ thống các phương thức có sẵn của lớp
▪ Tấ t cả mọ i thao tá c truy xuấ t và o thà nh phầ n dữ liệu từ đố i
tượ ng này qua đố i tượ ng khá c phả i đượ c thự c hiện bở i cá c
phương thứ c (method) củ a chính đố i tượ ng chứ a dữ liệu.
▪.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tính đóng gói có những đặc điểm như sau:
•Tạo ra cơ chế để ngăn ngừa việc gọi phương thức của lớp này
tác động hay truy xuất dữ liệu của đối tượng thuộc về lớp khác.
•Dữ liệu riêng (khi được khai báo là private) của mỗi đối tượng
được bảo vệ khỏi sự truy xuất không hợp lệ từ bên ngoài.
•Người lập trình có thể dựa vào cơ chế này để ngăn ngừa việc
gán giá trị không hợp lệ vào thành phần dữ liệu của mỗi đối
tượng.
•Cho phép thay đổi cấu trúc bên trong của một lớp mà không làm
ảnh hưởng đến những lớp bên ngoài có sử dụng lớp đó.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Để thể hiện tính đa hình, chúng ta cần đảm bảo 2 điều kiện
sau:
•Các lớp phải có quan hệ kế thừa với 1 lớp cha nào đó.
•Phương thức đa hình phải được ghi đè (override) ở lớp con.
Tính đa hình chỉ được thể hiện ghi đã ghi đè lên phương
thức của lớp cha.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
Overriding Method
Overloading method
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Overload và Override là gì?
Overload (nạp chồng) là hai phương thức cùng tên nhưng số
lượng tham số trong các phương thức khác nhau hoặc các loại dữ
liệu của tham số khác nhau và nằm trong một class.
Override (ghì đè) là hai phương thức có cùng tên, cùng kiểu
dữ liệu trả về, cùng phạm vi truy cập (Access Modifie) nằm
ở hai class khác nhau.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Overriding Method
Bài Học
Overloading method
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
float tryMe(int x)
{ Invocatio
return x + .375; n
} result = tryMe(25, 4.32)
✔ Ví dụ Tá i sử dụ ng Constructor:
public class SinhVien {
private String hoTen;
private double diem;
public SinhVien(String hoTen)
{
this.hoTen=hoTen;
}
public SinhVien(String hoTen,double diem)
{
this(hoTen);
this.diem=diem;
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Parameter list
Bài Học
Tham chiếu
• Đối tượng được thao tác thông qua tham
chiếu:
• Tham chiếu là con trỏ trỏ tới đối tượng
• Thao tác trực tiếp tới thuộc tính và phương
thức
• Phép gán (=) là cùng trỏ tới 1 địa chỉ
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Toán tử new
• Mọi đối tượng phải được tạo bằng toán tử
new:
• Cấp phát vùng nhớ động
• Ví dụ:
• Student a;//a chưa trỏ vào đâu a->null
• a=new Student();// a được trỏ vào bộ nhớ
được sinh ra từ từ khóa new và a trỏ vào
bộ nhớ đó
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên Lớp trong java
❖ Ví dụ :
SinhVien obama=new SinhVien();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên Constructor
❖ Ví dụ :
SinhVien obama=new SinhVien(“Obama”, 8.5);
⮚ Phương thức hủy được gọi khi đối tượng được giải
phóng.
⮚ Tuy nhiên, trong Java công việc này được làm tự
động, lập trình viên không cần quan tâm.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quy tắc đặt tên thuộc tính
Hàm main()
Đây là một hàm đặc biệt được cài đặt trong lớp được
gọi thực thi đầu tiên trong chương trình. Vì nó được
gọi khi chưa có đối tượng nào được tạo ra nên nó
luôn được khai báo là static.
Hơn nữa, việc gọi hàm main() đương nhiên là diễn ra
bên ngoài lớp nên nó cũng cần có mức độ truy cập là
public.
Hàm main() thường không trả về giá trị nào nên kiểu
giá trị trả về của nó là void.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
❖ Service method
❖ Support method
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Service method & Support Method
Bài Học
Bài Học
❖ static và ý nghĩa sử dụ ng
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
❖ Ví dụ 1- biến static:
public class Class1 {
❖ Ví dụ 1- biến static:
public static void main(String[] args) {
Class1 c1=new Class1();
c1.setValue(9);
Class1 c2=new Class1();
System.out.println(c2.getValue());
c2.setValue(100);
System.out.println(c1.getValue());
}
Kết quả:
9
100
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
❖ Ví dụ 2 – Hà m static
public class Class2 {
❖ Ví dụ 2 – Hà m static
public static void main(String[] args) {
Class2 c=new Class2();
c.fn2(113);
Class2.fn1(113);
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
⮚Kế thừa là sự liên quan giữa hai class với nhau, trong
đó có class cha (superclass) và class con (subclass).
Khi kế thừa class con được hưởng tất cả các phương
thức và thuộc tính của class cha. Tuy nhiên, nó chỉ
được truy cập các thành viên public và protected của
class cha. Nó không được phép truy cập đến thành
viên private của class cha
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kế thừa
Quan hệ kế thừa
Quan hệ IS-A, nghĩa là xem thứ này có là thứ kia hay
không.
Ví dụ: Tam giác là một hình (Triangle IS-A Shape)? Đúng. Mèo
là một động vật họ Mèo (Cat IS-A Feline)? Đúng. Xe tải là một
phương tiện giao thông (Truck IS-A
Vehicle)? Đúng. Nghĩa là, Triangle có thể là lớp con của Shape,
Cat có thể là lớp con của Feline, Truck có thể là lớp con của
Vehicle.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Quan hệ has A
Quan hệ HAS-A còn được gọi bằng một thuật
ngữ hướng đối tượng là composition. Một cách
chính thức, quan hệ composition được định nghĩa là
khả năng một đối tượng có thành viên là tham chiếu
tới đối tượng thuộc lớp khác.
Sử dụng HAS – A làm tăng tính tái sử dụng code. Khi
các bạn thấy giữa các class có các thông tin chung
giống hệt nhau thì ta nên tách nhỏ nó ra thành một
class khác bao gồm những thuộc tính chung.
HAS – A là đặt những điểm chung ra riêng một class và
import vào các class khác để sử dụng.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các kiểu kế thừa trong java
Có 3 kiểu kế thừa trong java: đơn kế thừa (single), kế thừa nhiều
cấp (multilevel), kế thừa thứ bậc (hierarchical).
Khi một class được kế thừa từ nhiều class đươc gọi là đa kế thừa.
Trong java, Java không hỗ trợ đa kế thừa. Ví dụ: nếu có đa kế thừa, 1 class A
kế thừa từ B và C, giả sử B và C đều có chung 1 hàm giống hệt nhau. Vậy từ A
gọi hàm đó sẽ gọi hàm của B hay C?.
Java hỗ trợ 1 phần nào đa kế thừa bằng các Interface.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
3 dạng kế thừa trong java chính là: kế thừa từ Class,
kế thừa từ lớp trừu tượng (Abstract class) và kế thừa
từ Interface
Khi sử dụng Interface dung từ Implement
còn sử dụng abstract class là bạn extend
Chú ý:
– Một lớp chỉ được phép kế thừa từ một và chỉ một lớp cha mà
thôi.
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
Kỹ thuật viết
Kế thừa từ Class
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Nội dung bài học
super(chuVi, dienTich);
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Abstract class
❖ Abstract(trừu tượng) là một lớp trừu tượng được xây dựng lên
như là một lớp cha cho các lớp con có cùng bản chất
❖ Lớ p Abstract là mộ t lớ p trừ u tượ ng, khô ng thể khở i tạ o nó
bằ ng toá n tử new. Vì lớp dạng abstract chỉ cho phép lớp khác
thừa kế từ nó
.
✔ Phương thứ c trừ u tượ ng là phương thứ c chỉ có định nghĩa tên
hà m, cá c đố i số (khô ng có nộ i dung hà m)
✔ Cá c lớ p con kế thừ a dù ng từ khó a extends
✔ Cá c lớ p con kế thừ a lớ p abstract thì phả i override lạ i phương
thứ c abstract
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
Kỹ thuật viết
Kế thừa từ Interface
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Định Nghĩa Interface
interface DienTich {
public abstract void sHinhVuong(float a);
public abstract void sHinhChuNhat(float a, float b);
}
interface ChuVi {
public abstract void cVHinhVuong(float a);
Bài Học
Tính đa hình
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Tính đa hình
Bài Học
package communityuni.com;
Bài Học
Bài Học
Alias
và
cơ chế gom rác tự động
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Alias và cơ chế gom rác tự động
Vù ng Vù ng
nhớ A nhớ B
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Alias và cơ chế gom rác tự động
Vù ng Vù ng
nhớ A nhớ B
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Alias và cơ chế gom rác tự động
Vù ng Vù ng
nhớ A nhớ B
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Alias và cơ chế gom rác tự động
❖ Đô i khi trong quá trình thự c hiện phầ n mềm ta có
nhu cầ u sao chép đố i tượ ng ra (tạ o thêm mộ t đố i
tượ ng giố ng y xì đố i tượ ng cũ nhưng nằ m ở ô nhớ
khá c, để ta có thể tự do thay đổ i thô ng tin trên đố i
tượ ng sao chép mà khô ng là m ả nh hưở ng tớ i đố i
tượ ng gố c). Java hỗ trợ chú ng ta hà m clone trong
interface Cloneable để sao chép đố i tượ ng.
public class PhanSo implements Cloneable {
public PhanSo copy()
throws CloneNotSupportedException
{
return (PhanSo) this.clone();
}
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Alias và cơ chế gom rác tự động
❖ Ví dụ :
PhanSo psB = new PhanSo(1,4);
psB
Vù ng
nhớ B
Sao chép toà n bộ thô ng tin trong
PhanSo psA = psB.copy(); Vù ng nhớ B và o vù ng nhớ A 🡺Tứ c là
psA ta có 2 đố i tượ ng có thô ng tin giố ng
nhau y xì nhưng nằ m trên 2 ô nhớ
hoàn toà n khá c nhau
Vù ng
nhớ A
psA thay đổ i khô ng ả nh hưở ng gì tớ i psB và ngượ c lạ i
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
⮚ Lỗ i biên dịch
⮚ Lỗ i runtime exception
⮚ Lỗ i logic exception – sai nghiệp vụ yêu cầ u
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách hành xử với lỗi
❖ Unchecked error
❖ Checked error
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
Bài Học
try
{
//lệnh
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
System.out.println("finally");
}
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
Bài Học
❖ Cá ch đặ t break point
❖ Cá ch debug từ ng dò ng
❖ Cá ch xem giá trị trong khi debug
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách đặt break point
Bài Học
Bộ nhớ ngoài
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Các loại tập tin lưu trữ
Bài Học
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kỹ thuật lưu trữ tập tin với TextFile
bw.write("Obama");
bw.newLine();
bw.write("Putin");
bw.newLine();
bw.write("Kim Jong Un");
bw.close();
osw.close();
fos.close();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kỹ thuật đọc tập tin với TextFile
FileInputStream fis=new FileInputStream("d:/data.txt");
InputStreamReader isr=new InputStreamReader(fis, "UTF-8");
BufferedReader br=new BufferedReader(isr);
String line1=br.readLine();
String line2=br.readLine();
String line3=br.readLine();
br.close();
isr.close();
fis.close();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kỹ thuật lưu trữ tập tin với Serialize
File
FileOutputStream fos=new FileOutputStream(“d:/data.dat”);
ObjectOutputStream oos=new ObjectOutputStream(fos);
KhachHang kh=new KhachHang (1,”Nguyễn Văn Tèo”);
oos.writeObject(kh);
oos.close();
fos.close();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Kỹ thuật đọc tập tin với Serialize File
FileInputStream fis=new FileInputStream(“d:/data.dat”);
ObjectInputStream ois=new ObjectInputStream(fis);
Object data=ois.readObject();
KhachHang kh=(KhachHang) data;
ois.close();
fis.close();
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Bài Học
Bài Học
❖ Cá ch tạ o Lớ p kế thừ a từ Thread
❖ Cá ch sử dụ ng đa tiến trình vớ i Thread
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo Lớp kế thừa từ Thread
⮚ Tạ o Thread từ kế thừ a lớ p Thread trong Java
Bài Học
❖ Cá ch tạ o Lớ p implements từ Runnable
❖ Cá ch sử dụ ng đa tiến trình vớ i Runnable
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Cách tạo Lớp implements từ Runnable
Bài Học
Bài Học
JAVA SWING
NỘI DUNG ĐƯỢC TRÌNH BÀY GỒM:
433
PHẦN 1
GIỚI THIỆU THIẾT KẾ
GUI TRONG JAVA
GIỚI THIỆU VỀ THIẾT KẾ GUI
435
GIỚI THIỆU AWT
436
GIỚI THIỆU AWT
437
NGUYÊN TẮC XÂY DỰNG GUI
• Lựa chọn một container: Frame, Window, Dialog,
Applet,…
• Tạo các control: (buttons, text areas, list, choice,
checkbox,...)
• Đưa các control vào vùng chứa
• Sắp xếp các control trong vùng chứa (Layout).
• Thêm các xử lý sự kiện (Listeners)
438
PHẦN 2
CÁC THÀNH PHẦN CƠ BẢN
(COMPONENTS)
CÁC COMPONENTS CỦA GUI
440
CÁC COMPONENTS CỦA GUI
Choice
Scrollbar
TextField List
TextArea
Button
Checkbox CheckboxGroup
441
NHÃN (LABEL)
• Nhãn được dùng để trình bày một chuỗi văn bản ra màn
hình
• Một số phương thức của Label:
public Label(); // tạo nhãn
public Label(String s); // tạo nhãn với nội dung s
public Label(String s, int align); // tạo và canh lề
void setText(String s); // đặt nội dung nhãn
void setAlignment(int align); // canh lề nhãn
...
442
NHÃN (LABEL)
import java.applet.Applet;
import java.awt.*;
public class DemoLabel extends Applet
{
private Label label;
public void init()
{
Font font = new Font("Courier", Font.BOLD, 20);
label = new Label("Thu nghiem voi Label");
label.setFont(font);
add(label);
}
public void paint(Graphics g)
{
showStatus("Noi dung cua Label la: “ + label.getText());
}
}
443
NHÃN (LABEL)
444
NÚT NHẤN (BUTTON)
445
NÚT NHẤN (BUTTON)
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class DemoButton extends Applet implements ActionListener
{
private Button blueButton;
private Button whiteButton;
private Button helloButton;
public void init()
{
blueButton = new Button("Blue");
whiteButton = new Button("White");
helloButton = new Button("Hello");
blueButton.addActionListener(this);
whiteButton.addActionListener(this);
helloButton.addActionListener(this);
//xem tiếp ở slide kế tiếp
446
NÚT NHẤN (BUTTON)
add(blueButton);
add(whiteButton);
add(helloButton);
}
public void actionPerformed(ActionEvent event)
{
if(event.getSource() == helloButton)
javax.swing.JOptionPane.showMessageDialog(this, "Hello !");
else{
if (event.getSource() == blueButton)
this.setBackground(Color.BLUE);
else if (event.getSource() == whiteButton)
this.setBackground(Color.WHITE);
repaint();
}
}
}
447
NÚT NHẤN (BUTTON)
448
Ô VĂN BẢN (TEXT FIELD)
• Ô văn bản cho phép nhận dữ liệu từ bàn phím trên một
dòng
• Một số phương thức
– TextField(...); // các cấu tử
– void setEditable(boolean b); // đặt/tắt chế độ nhập
– void setEchoChar(char c); // đặt kí tự hiển thị
• Đối tượng nghe cần cài đặt 2 giao tiếp
– ActionListener
– TextListener
• Cài đặt phương thức textValueChanged();
449
Ô VĂN BẢN (TEXT FIELD)
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class DemoTextField extends Applet implements ActionListener
{
private TextField txtEdit;
private TextField txtReadOnly;
private TextField txtPass;
private final StringPASSWORD = "Java";
public void init()
{
txtEdit = new TextField("Your name here");
txtPass = newTextField(12);
txtPass.setEchoChar('*');
txtPass.addActionListener(this);
txtReadOnly = newTextField("This text is read only");
txtReadOnly.setEditable(false);
// xem tiếp ở slide kế tiếp
450
Ô VĂN BẢN (TEXT FIELD)
add(txtEdit);
add(txtPass);
add(txtReadOnly);
}
public void actionPerformed(ActionEvent event)
{
if(txtPass.getText().equals(PASSWORD))
txtReadOnly.setText("Password is valid");
else
txtReadOnly.setText("Invalid password !");
}
}
451
LỰA CHỌN (CHOICE)
• Choice cung cấp khả năng lựa chọn một trong số các hạng
mục sẵn có.
• Một số phương thức
– Choice(); // cấu tử
– void addItem(String s); // thêm item là s
– String getItem(int index);// lấy item có chỉ số index
– String getSeclectedItem(); // trả về item được chọn
– int getSelectedIndex(); // trả về index của item được chọn
• Lớp nghe cài đặt giao tiếp ItemListener
– Cài đặt phương thức itemStateChanged(...)
452
LỰA CHỌN (CHOICE)
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class DemoChoice extends Applet implements ItemListener
{
private Choice choice;
private TextField txtText;
private Font font;
public void init()
{
choice = newChoice();
choice.addItem("TimesRoman");
choice.addItem("Courier");
choice.addItem("Helvetica");
choice.addItemListener(this);
// xem tiếp ở slide kế tiếp
453
LỰA CHỌN (CHOICE)
txtText = new TextField("Sample Text", 16);
txtText.setEditable(false);
font = newFont(choice.getItem(0),Font.PLAIN, 12);
txtText.setFont(font);
add(choice);
add(txtText);
}
public void itemStateChanged(ItemEvent event)
{
font = newFont(choice.getSelectedItem(), Font.PLAIN, 12);
txtText.setFont(font);
}
}
454
CHECK BOX (HỘP ĐÁNH DẤU)
Checkbox cung cấp các hộp tuỳ chọn cho người dùng
• Một số phương thức
– Checkbox(...); // các cấu tử
– void setLabel(Strings); // đặtnhãn mới
– booleangetState(); // lấy trạngtháihiệntại
• Lớp nghe cài đặt giao tiếp ItemListener
– Cài đặt phương thức itemStateChanged(...)
455
CHECK BOX (HỘP ĐÁNH DẤU)
import java.applet.Applet;
Import java.awt.*;
Import java.awt.event.*;
public classDemoCheckbox extends Applet implements ItemListener
{
private Checkbox checkBold;
private Checkbox checkItalic;
privateTextFieldtxtText;
public void init()
{
checkBold = new Checkbox("Bold");
checkItalic = new Checkbox("Italic");
checkBold.addItemListener(this);
checkItalic.addItemListener(this);
txtText = new TextField("Sample Text", 16);
Font font = new Font("Courier", Font.PLAIN, 14);
txtText.setFont(font);\
//xem tiếp ở slide kế tiếp
456
CHECK BOX (HỘP ĐÁNH DẤU)
add(txtText);
add(checkBold);
add(checkItalic);
}
public void itemStateChanged(ItemEvent event)
{
int valBold = Font.PLAIN;
int valItalic = Font.PLAIN;
if(checkBold.getState()) valBold = Font.BOLD;
if(checkItalic.getState()) valItalic = Font.ITALIC;
Font font = new Font("Courier", valBold + valItalic, 14);
txtText.setFont(font);
}
}
457
CHECK BOX GROUP & RADIO BUTTON
• Các Checkboxcó thể được đặt trong một
CheckboxGroup để tạo ra các Radio Button.
• Vídụ: Tạo 3 radio button
// Tạo 3 radio button thuộc cùng một nhóm. Ban đầu
// radio1 được chọn. Tại mỗi thời điểm chỉ có thể chọn một // trong 3
radio.
CheckboxGroupg = new CheckboxGroup();
Checkbox radio1 = new Checkbox(“Radio1”, g, true);
Checkbox radio2 = new Checkbox(“Radio2”, g, false);
Checkbox radio3 = new Checkbox(“Radio3”, g, false);
458
CHECK BOX GROUP & RADIO BUTTON
// Cac import can thiet...
public class DemoRadio extends Applet implements ItemListener
{
private Checkbox plain, bold, italic;
private CheckboxGroup group;
private TextFieldtxtText;
public void init()
{
group = new CheckboxGroup();
plain = new Checkbox("Plain", group,true);
bold = new Checkbox("Bold", group, false);
italic = new Checkbox("Italic", group, false);
txtText = new TextField("Sample Text");
txtText.setFont(new Font("Courier", Font.PLAIN, 14));
plain.addItemListener(this);
bold.addItemListener(this);
italic.addItemListener(this);
//xem tiếp ở slide tiếp theo
459
CHECK BOX GROUP & RADIO BUTTON
add(txtText);
add(plain);
add(italic);
add(bold);
}
public void itemStateChanged(ItemEvent event)
{
int mode = 0;
if(event.getSource() == plain) mode = Font.PLAIN;
if(event.getSource() == italic) mode = Font.ITALIC;
if(event.getSource() == bold) mode = Font.BOLD;
txtText.setFont(newFont("Courier", mode, 14));
}
}
460
DANH SÁCH (LIST)
461
DANH SÁCH (LIST)
// Cac import can thiet...
public class DemoList extends Applet implements ItemListener, ActionListener
{
private List colorList;
public void init()
{
colorList = newList(3, false);
colorList.add("White");
colorList.add("Black");
colorList.add("Yellow");
colorList.add("Green");
colorList.addItemListener(this);
colorList.addActionListener(this);
add(colorList);
}
//xem tiếp ở slide tiếp theo
462
DANH SÁCH (LIST)
public void itemStateChanged(ItemEvent event)
{
List list = (List) event.getSource();
showStatus("Item " + list.getSelectedIndex() + " selected");
}
public void actionPerformed(ActionEvent event)
{
List list = (List) event.getSource();
Strings = list.getSelectedItem();
if(s.equals("White")) setBackground(Color.WHITE);
if(s.equals("Black")) setBackground(Color.BLACK);
if(s.equals("Yellow")) setBackground(Color.YELLOW);
if(s.equals("Green")) setBackground(Color.GREEN);
repaint();
}
}
463
CÁC THÀNH PHẦN KHÁC
464
PHẦN 3
ĐỐI TƯỢNG KHUNG CHỨA
(CONTAINERS)
CÁC ĐỐI TƯỢNG KHUNG CHỨA
• Là các thành phần mà có thể chứa các thành phần khác, có thể vẽ và tô
màu.
• Gồm có: Frame, Applet, Panel, ScrollPane, Dialog, FileDialog.
466
CÁCH TÍNH TỌA ĐỘ
y screen
x
screen height
MyWindow height
widt
h
screen
width
467
KHUNG CHỨA FRAME
• Frame được dùng để xây dựng các ứng dụng GUI chạy
độc lập.
• Frame là một cửa sổ có thanh tiêu đề và các đường biên.
Bố cục mặc định của Frame là BorderLayout.
• Frame kế thừa từ Window, nó có thể nghe các sự kiện
xảy ra trên cửa sổ khi cài đặt giao tiếp WindowListener.
• Các ứng dụng độc lập thường tạo ra cửa sổ kế thừa từ
lớp Frame.
468
KHUNG CHỨA FRAME
import java.awt.*;
importjava.awt.event.*;
public class DemoFrame
{
public static void main(String[] args)
{
Frame frame = new Frame(“Example on Frame”);
Labellabel = newLabel("This is a label in Frame",Label.CENTER);
frame.add(label, BorderLayout.CENTER);
frame.setSize(500,500);
frame.setVisible(true);
frame.addWindowListener(newMyWindowListener());
}
}
//xem tiếp ở slide tiếp theo
469
KHUNG CHỨA FRAME
// Lop nghe doc lap (external listener)
Class MyWindowListener extendsWindowAdapter
{
public void windowClosing(WindowEvent event)
{
System.exit(0);
}
}
470
KHUNG CHỨA FRAME
import java.awt.*;
Import java.awt.event.*;
public class DemoFrame2
{ public static void main(String[] args)
{ MyFrame myFrame = new MyFrame("Example on my frame");
myFrame.setSize(250, 300);
myFrame.setVisible(true);
myFrame.addWindowListener(newWindowAdapter()
{// Lop nghe noi khong ten (anonymous inner class listener)
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}
//xem tiếp ở slide tiếp theo
471
KHUNG CHỨA FRAME
472
KHUNG CHỨA FRAME
• Chú ý:
– Frame không có các phương thức init, start… như
trong Applet.
– Các ứng dụng độc lập dùng Frame phải có hàm main
và được chạytrực tiếp bằng lệnh java.
– Cần có lệnh setSize, setVisible(true) để có thể hiển thị
Frame.
– Ở cuối chương trình nên có lệnh: System.exit(0);
473
LỚP PANEL (VÙNG CHỨA)
474
LỚP PANEL (VÙNG CHỨA)
Panel(BorderLayout
)
TextField
Button
12 Button
Panel(GridLayout
)
Frame(BorderLayout
)
475
LỚP PANEL (VÙNG CHỨA)
public void init()
{
Choice choice = new Choice();
choice.add("Red");
choice.add("Green");
choice.add("Blue");
Button ok = new Button("Ok");
Button cancel = new Button("Cancel");
Panel panel = new Panel();
panel.add(ok);
panel.add(cancel);
this.setLayout(new BorderLayout());
this.add(choice, BorderLayout.NORTH);
this.add(panel, BorderLayout.CENTER);
}
476
KHUNG CUỘN (SCROLL PANE)
• Khung cuộn là một container cho phép chứa thành phần
GUI có kích thước lớn hơn chính nó.
• Bài tập: Viết chương trình cho phép vẽ trong một canvas
có độ rộng lớn hơn kích thước của applet. Đặt canvas
vào trong một scroll pane.
477
HỘP THOẠI (DIALOG)
• Dialog cũng là một cửa sổ, thường dùng để nhập
hoặc hiển thị thông tin với người dùng.
• Hai loại hộp thoại
– Modal: Phải đóng hộp thoại trước khi chuyển
sang cửa sổ khác.
– Modaless: Có thể giữ nguyên hộp thoại và
chuyển sang cửa sổ khác.
478
HỘP THOẠI (DIALOG)
479
VÍ DỤ VỀ FRAME VÀ DIALOG
480
VÍ DỤ VỀ FRAME VÀ DIALOG
import java.awt.*;
Import java.awt.event.*;
public class DemoFrame3
{
public static void main(String[] args)
{
MyFrame myFrame = new MyFrame("Example on my frame");
myFrame.setSize(500, 400);
myFrame.setVisible(true);
myFrame.addWindowListener(newWindowAdapter()
{
public voidwindowClosing(WindowEvente){System.exit(0);
}});
}
}
481
VÍ DỤ VỀ FRAME VÀ DIALOG
Class MyFrame extends Frame implements ActionListener
{ private MenuBar menuBar;
private Menu menu;
private MenuItem circleItem, rectItem;
public MyFrame(String title)
{ super(title);
menuBar = new MenuBar();
setMenuBar(menuBar);
menu = new Menu("Draw");
menuBar.add(menu);
circleItem = new MenuItem("Circle");
rectItem = new MenuItem("Rectangle");
menu.add(circleItem); menu.add(rectItem);
circleItem.addActionListener(this);
rectItem.addActionListener(this);
}
// xem tiếp ở slide tiếp theo
482
VÍ DỤ VỀ FRAME VÀ DIALOG
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == circleItem)
{MyDialog dialog = new MyDialog(this, "Modeless Dialog: Circle", false);
}
}
}
Class MyDialog extends Dialog
{ MyDialog(Frame parent, String title, boolean isModel)
{ super(parent, title, isModel);
add(newLabel("Hi, I am a dialog"), BorderLayout.CENTER);
setSize(300, 200); setVisible(true);
addWindowListener(newMyDialogListener(this));
}
}
483
VÍ DỤ VỀ FRAME VÀ DIALOG
// Co the dat lop nay lam lop nội (inner class) cua lop MyDialog
class MyDialogListener extends WindowAdapter
{
Dialog dialog;
MyDialogListener(Dialog dia){dialog = dia;}
public void window Closing(WindowEvent e)
{
dialog.setVisible(false);
dialog.dispose();
}
}
484
PHẦN 4
BỘ QUẢN LÝ TRÌNH BÀY
(LAYOUT MANAGER)
BỘ QUẢN LÝ TRÌNH BÀY
486
FLOW LAYOUT
Đối với một container trình bày theo kiểu
FlowLayout thì:
• Các component gắn vào được sắp xếp theo thứ
tự từ trái sang phải và từ trên xuống dưới.
• Các component có kích thước như mong muốn.
• Nếu chiều rộng của Container không đủ chỗ cho
các component thì chúng tự động tạo ra một
dòng mới.
• FlowLayout thường được dùng để để sắp xếp
các button trong 1 panel.
• Chúng ta có thể điều chỉnh khoảng cách giữa
các component.
487
FLOW LAYOUT
Ví dụ:
import java.awt.*;
import java.lang.Integer;
class FlowLayoutDemo
{
public static void main(String args[])
{
Frame fr = new Frame("FlowLayout Demo");
fr.setLayout(new FlowLayout());
fr.add(new Button("Red"));
fr.add(new Button("Green"));
fr.add(new Button("Blue"));
List li = new List();
for (int i=0; i<5; i++)
{
li.add(Integer.toString(i));
}
//xem tiếp ở slide tiếp theo
488
FLOW LAYOUT
fr.add(li);
fr.add(new Checkbox("Pick me", true));
fr.add(new Label("Enter your name:"));
fr.add(new TextField(20));
// phương thức pack() được gọi sẽ làm cho cửa sổ
// hiện hành sẽ có kích thước vừa với kích thước
// trình bày bố trí những thành phần con của nó.
fr.pack();
fr.setVisible(true);
}
}
489
BORDER LAYOUT
Đối với một container trình bày theo kiểu BorderLayout thì:
▪ Bộ trình bày khung chứa được chia làm 4 vùng: NORTH,
SOUTH, WEST, EAST và CENTER. (Đông,Tây, Nam, Bắc
và trung tâm). Bộ trình bày loại này cho phép sắp xếp và
thay đổi kích thước của những components chứa trong nó
sao cho vứa với 5 vùng ĐÔNG, TÂY, NAM, BẮC, TRUNG
TÂM.
▪ Không cần phải gắn component vào cho tất cả các vùng.
▪ Các component ở vùng NORTH và SOUTH có chiều cao
tùy ý nhưng có chiều rộng đúng bằng chiều rộng vùng
chứa.
▪ Các component ở vùng EAST và WEST có chiều rộng tùy
ý nhưng có chiều cao đúng bằng chiều cao vùng chứa.
▪ Các component ở vùng CENTER có chiều cao và chiều
rộng phụ thuộc vào các vùng xung quanh.
GV: Võ Tấn
490
BORDER LAYOUT
Ví dụ:
import java.awt.*;
class BorderLayoutDemo extends Frame
{ private Button north, south, east, west, center;
public BorderLayoutDemo(String sTitle)
{ super(sTitle);
north = new Button("North");
south = new Button("South");
east = new Button("East");
west = new Button("West");
center = new Button("Center");
this.add(north, BorderLayout.NORTH);
this.add(south, BorderLayout.SOUTH);
this.add(east, BorderLayout.EAST);
this.add(west, BorderLayout.WEST);
this.add(center, BorderLayout.CENTER);
}
public static void main(String args[])
{ Frame fr = new BorderLayoutDemo ("Border Layout Demo");
fr.pack();
fr.setVisible(true);
}
}
491
BORDER LAYOUT
492
GRID LAYOUT
Đối với một container trình bày theo kiểu GridLayout thì:
• Bộ trình bày tạo một khung lưới vô hình với các ô bằng
nhau.
• Các đối tượng sẽ đặt vừa kích thước với từng ô đó. Thứ
tự sắp xếp từ trái qua phải và từ trên xuống dưới.
493
GRID LAYOUT
Ví dụ:
import java.awt.*;
public class GridLayoutDemo
{
public static void main(String arg[])
{
Frame f = new Frame("GridLayout Demo");
f.setLayout(new GridLayout(3,2));
f.add(new Button("Red"));
f.add(new Button("Green"));
f.add(new Button("Blue"));
f.add(new Checkbox("Pick me", true));
f.add(new Label("Enter name here:"));
f.add(new TextField());
f.pack();
f.setVisible(true);
}
}
494
GRIDBAG LAYOUT
Đối với một container trình bày theo kiểu
GridBagLayout thì:
• Các componets khi được đưa vào khung chứa
sẽ được trình bày trên 1 khung lưới vô hình
tương tự như GridLayout. Tuy nhiên khác với
GridLayout kích thước các đối tượng không nhất
thiết phải vừa với 1 ô trên khung lưới mà có thể
là 2, 3 ô hay nhiều hơn tùy theo các ràng buộc
mà ta chỉ định thông qua đối tượng
GridBagConstraints.
495
GRIDBAG LAYOUT
Lớp GridBagConstraints dẫn xuất từ lớp Object. Lớp
GridBagConstraints dùng để chỉ định ràng buộc cho những
components trình bày trong khung chứa container theo kiểu
GridBagLayout.
• gridx, gridy: vị trí ô của khung lưới vô hình mà ta sẽ
đưa đối tượng con vào o gridwidth, gridheight: kích
thước hay vùng trình bày cho đối tượng con.
• Insets: là một biến đối tượng thuộc lớp Inset dùng để qui
định khoảng cách biên phân cách theo 4 chiều (trên,
dưới, trái, phải).
• weightx, weighty: chỉ định khoảng cách lớn ra tương
đối của các đối tượng con với nhau
GV: Võ Tấn
496
GRIDBAG LAYOUT
Ví dụ:
import java.awt.*;
public class GridBagLayoutDemo
{
public static void main(String arg[])
{
Frame f = new Frame("GridBagLayout Demo");
// Thiet lap layout manager
// Tao doi tuong rang buoc cho cach trinh bay
// GridBagLayout.
GridBagLayout layout = new GridBagLayout();
GridBagConstraints constraints = new
GridBagConstraints();
f.setLayout(layout);
// Tao ra 9 nut nhan
String[] buttName = {"Mot", "Hai", "Ba", "Bon", "Nam", "Sau", "Bay",
"Tam", "Chin"};
Button[] buttons = new Button[9];
for(int i=0;i<9;i++)
{
buttons[i] = new Button (buttName[i]);
}
//xem tiếp ở slide tiếp theo
497
GRIDBAG LAYOUT
// Rang buoc cac nut nhan cach nhau 2 pixel
constraints.insets = new Insets(2,2,2,2);
// Qui dinh cac nut nhan se thay doi kich thuoc
// theo ca 2 chieu
constraints.fill = GridBagConstraints.BOTH;
// Rang buoc cho nut nhan thu 1
constraints.gridx = 1; constraints.gridy = 1;
constraints.gridheight = 2; constraints.gridwidth = 1;
layout.setConstraints(buttons[0], constraints);
// Rang buoc cho nut nhan thu 2
constraints.gridx = 2; constraints.gridy = 1;
constraints.gridheight = 1; constraints.gridwidth = 2;
layout.setConstraints(buttons[1], constraints);
// Rang buoc cho nut nhan thu 3
constraints.gridx = 2; constraints.gridy = 2;
constraints.gridheight = 1; constraints.gridwidth = 1;
layout.setConstraints(buttons[2], constraints);
// Rang buoc cho nut nhan thu 4
constraints.gridx = 1; constraints.gridy = 3;
constraints.gridheight = 1; constraints.gridwidth = 2;
layout.setConstraints(buttons[3], constraints);
//xem tiếp ở slide tiếp theo
498
GRIDBAG LAYOUT
// Rang buoc cho nut nhan thu 5
constraints.gridx = 3; constraints.gridy = 2;
constraints.gridheight = 2; constraints.gridwidth = 1;
layout.setConstraints(buttons[4], constraints);
// Rang buoc cho nut nhan thu 6
constraints.gridx = 4; constraints.gridy = 1;
constraints.gridheight = 3; constraints.gridwidth = 1;
layout.setConstraints(buttons[5], constraints);
// Tu nut thu 7 tro di khong can rang buoc
// thay vi doi kich thuoc
constraints.fill = GridBagConstraints.NONE;
// Rang buoc cho nut nhan thu 7
constraints.gridx = 1; constraints.gridy = 4;
constraints.gridheight = 1; constraints.gridwidth = 1;
constraints.weightx = 1.0;
layout.setConstraints(buttons[6], constraints);
// Rang buoc cho nut nhan thu 8
constraints.gridx = 2; constraints.gridy = 5;
constraints.gridheight = 1; constraints.gridwidth = 1;
constraints.weightx = 2.0;
layout.setConstraints(buttons[7], constraints);
//xem tiếp ở slide tiếp theo
499
GRIDBAG LAYOUT
// Rang buoc cho nut nhan thu 9
constraints.gridx = 3;
constraints.gridy = 6;
constraints.gridheight = 1;
constraints.gridwidth = 1;
constraints.weightx = 3.0;
layout.setConstraints(buttons[8], constraints);
// Dua cac nut nhan khung chua chuong trinh
for (int i=0;i<9;i++)
f.add(buttons[i]);
f.pack();
f.setVisible(true);
}
}
500
NULL LAYOUT
• Một khung chứa được trình bày theo kiểu Null
Layout có nghĩa là người lập trình phải tự làm tất cả
từ việc qui định kích thước của khung chứa, cũng
như kích thước và vị trí của từng đối tượng
component trong khung chứa.
• Để thiết lập cách trình bày là Null Layout cho một
container ta chỉ việc gọi phương thức
setLayout(null) với tham số là null.
501
NULL LAYOUT
Một số phương thức của lớp trừu tượng Component dùng
để định vị và qui định kích thước của component khi đưa
chúng vào khung chứa trình bày theo kiểu kiểu tự do:
- public void setLocation(Point p)
- public void setSize(Dimension p)
- public void setBounds(Rectangle r)
Ví dụ:
- MyButton.setSize(new Dimension(20, 10));
- MyButton.setLocation(new Point(10, 10));
- MyButton.setBounds(10, 10, 20, 10);
502
NULL LAYOUT
import java.awt.*;
class NullLayoutDemo
{
public static void main(String args[])
{
Frame fr = new Frame("NullLayout Demo");
fr.setLayout(null);
Button buttOk = new Button("OK");
buttOk.setBounds(100, 150, 50, 30);
Button buttCancel = new Button("Cancel");
buttCancel.setBounds(200, 150, 50, 30);
Checkbox checkBut = new Checkbox("Check box", true);
checkBut.setBounds(100, 50, 100, 20);
List li = new List();
for (int i=0; i<5; i++)
{
li.add(Integer.toString(i));
}
li.setBounds(200, 50, 50, 50);
fr.add(buttOk);
fr.add(buttCancel);
//xem tiếp ở slide tiếp theo
503
NULL LAYOUT
fr.add(checkBut);
fr.add(li);
fr.setBounds(10, 10, 400, 200);
fr.setVisible(true);
}
}
504
• 4 bước Ghi file trong Java với Form giao
diện Swing
• Bước 1: Thiết kế form, tạo giao diện bằng
Java trong
• Bước 2: Viết mã xử lý giao diện
• Bước 3: Viết mã ghi file Java
• Bước 4: Thực thi chương trình và xem kết
quả
WORKING HARD & SMART TODAY FOR A BETTER
TOMORROW
Hey!
Coding
is easy!
END