Professional Documents
Culture Documents
Slide D y Java - Netbean
Slide D y Java - Netbean
Bài Học
Giới thiệu
Ngôn ngữ lập trình java
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Lịch sử ra đời
C++
Lịch sử ra đời
Release Year
JDK Beta 1994
JDK 1.0 1996
JDK 1.1 1997
J2SE 1.2 1998
J2SE 1.3 2000
J2SE 1.4 2002
J2SE 5.0 2005
Java SE 6 2006
Java SE 7 2011
Java SE 8 2014
JDK 9, 21 tháng 9 năm 2017
JDK 10, 20 tháng 3 năm 2018
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Quản lý bộ nhớ
Bài Học
Notepad
Eclipse
Netbean
Android Studio
Phần mềm học JAVA
• Netbeans
• Eclipse
• JCreator
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Notepad
Eclipse
Netbean
Netbean
RKING 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:
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
chọ n Properties
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bấ m Edit Text…
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
;%JAVA_HOME%\bin;.;
Bài Học
Bài Học
Và o link:
https://netbeans.apache.org/download/index.html
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
\n Xuố ng dò ng
\t thụ t đầ u dò ng
\” trích dẫ n
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Bài Học
short
Kiểu cơ sở
Kiểu số nguyên
int
long
Kiểu số
float
Kiểu số thực
double
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Wrapper Class
Wrapper Class
Bài Học
Ép kiểu rộng
Ép kiểu hẹp
(int)1.01
RKING 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 --
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
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;
RKING 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 =, *=, /=, +=, -=
RKING 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();
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Cấu trúc if
if (<expression> )
{
<statement>;
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Ví dụ 2
if (i % 2 == 0)
{
System.out.println ("i la so chan");
}
else
{
System.out.println("i la so le");
}
RKING 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;
}
RKING 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
Bài Học
Cú phá p và cá ch hoạ t độ ng vò ng lặ p
do...while
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
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<=n5<=5đúng
Lần 5: gt=gt*i=24*5=120
i++i=i+1=5+1=6
Kiểm tra i<=n 6<=5saingừng do while
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
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<=ni<=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<=n5<=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<=5vô lýngừng for
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Chỉ số 0 1 2 3 4 5 6 7
M[3] ?
Mảng M 5 8 1 113 3 2 7 6 M.length ?
M[3]=113
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Bài Học
Bài Học
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();
RKING 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));
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Bài Học
[0…1)
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
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()
RKING 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
RKING 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
RKING 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
RKING 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());
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
String s = "OBAMA";
O B A M A
s
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
String s = "OBAMA";
Bài Học
indexOf
Trả về vị trí đầ u tiên tìm thấy, khô ng tìm thấy trả về -1
String s = "Hello everybody !";
int i = 0;
// Trả về i = 1
i = s.indexOf("e");
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
lastIndexOf
lastIndexOf trả về vị trí cuố i cù ng tìm thấy
String s = "Hello everybody !";
int i = 0;
// Trả về i = 8
i = s.lastIndexOf("e");
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
contains
Contains Kiểm tra chuỗ i con có nằ m trong chuỗ i s?
String s = "Hello everybody !";
if(s.contains(“body”))
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Bài Học
replace
replace
String s="Xin chào Obama! Tui là Putin";
s= s.replace("Obama", "Kim Jong Un");
System.out.println(s);
replaceFirst
replaceFirst
String s="Obama Xin chào Michelle Obama";
s= s.replaceFirst("Obama", "Putin");
System.out.println(s);
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Bài Học
compareTo
So sá nh có phâ n biệt HOA – thườ ng.
String s1="Hạnh phúc";
String s2="Giải thoát";
int x=s1.compareTo(s2);
Bằ ng 0 khi s1=s2
>0 khi s1>s2
<0 khi s1<s2
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
compareToIgnoreCase
So sá nh khô ng phâ n biệt HOA – thườ ng.
String s1="Hạnh phúc";
String s2="Hạnh PHÚC";
int x=s1.compareToIgnoreCase(s2);
Bằ ng 0 khi s1=s2
>0 khi s1>s2
<0 khi s1<s2
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
String s="Obama";
s=s+" Putin";
System.out.println(s);
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Obama
Putin
Kim Jong Un
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
toUpper
String s="obama".toUpperCase();
System.out.println(s);
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
toLower
String s="PUTIN".toLowerCase();
System.out.println(s);
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Lý do sử dụng collection
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Collection là gì?
Bài Học
LinkedList: Danh sách có kết nối ( Linked List) là một trong các cách
quản lý danh sách dữ liệu khắc phục được các nhược điểm của mảng.
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ử.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
import java.util.Collections;
import java.util.ArrayList;;;
Collections.sort(animals);
System.out.println(animals);
}
}
/* Outputs:
[cat, dog, snake, tiger]
*/
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
HashMap
HashMap
HashMap
HashMap
HashMap<Integer, String>map=
new HashMap<Integer, String>();
map.put(1, "Trần huy hanh");
map.put(2, "Nguyễn Văn Hùng");
map.put(3, "Đỗ Công Thành");
map.put(4, "Nguyễn Cẩm Hương");
map.put(5, "Phạm Thị Xuân Diệu");
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);
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Đó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.
.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
•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 đó.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Ví dụ: Khi bạn ở trong trường học là sinh viên thì bạn có nhiệm vụ học,
nghe giảng,..., nhưng khi bạn ở nhà thì bạn lại đóng vai trò là thành viên
trong gia đình và bạn có nhiệm vụ phải làm việc nhà, rồi khi bạn vào siêu
thị thì bạn đóng vai trò là khách hàng đi mua hàng. Vì vậy, chúng ta có thể
hiểu đa hình của đối tượng là trong từng trường hợp, hoàn cảnh khác nhau
thì đối tượng có khả năng thực hiện các công việc khác nhau.
Để 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Overriding Method
Overloading method
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Overriding Method
Overriding Method
Bài Học
Overloading method
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Overloading Method
Overloading Method
float tryMe(int x)
{
Invocation
return x + .375;
} result = tryMe(25, 4.32)
Overloading Method
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;
}
}
RKING 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ỉ
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
RKING 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ớ đó
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Getter/ setter
Getter/ setter
Ta cầ n xây dự ng cá c getter/setter để truy suấ t giá trị
cá c thuộ c tính:
Set: truyền giá trị và o cho biến
Get: lấy giá trị củ a biến
public class SinhVien {
private String hoTen;
private double diem;
public void setHoTen(String hoTen)
{
this.hoTen=hoTen;
}
public String getHoTen() Tương tự cho thuộc tính diem
{
return this.hoTen;
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Ví dụ:
public class TamGiac {
private double canhA;
private double canhB;
private int canhC;
public double chuVi()
{
return canhA+canhB+canhC;
}
private double nuaChuVi()
{
return chuVi()/2;
}
public double dienTich()
{
double p=nuaChuVi();
return Math.sqrt(p*(p-canhA)*(p-canhB)*(p-canhC));
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
this là gì?
Biến this là biến đố i tượ ng củ a lớ p tồ n tạ i ngầ m trong mỗ i lớ P
(hay nó i cá ch khá c tham chiếu this giữ địa chỉ củ a chính đố i
tượ ng đang gọ i tớ i)
Thườ ng dù ng biến this để truy cậ p đến cá c thuộ c tính củ a lớ p bị
khai bá o trù ng trong phạ m vi cá c phương thứ c củ a lớ p.
Bài Học
Class2.fn1(113);
}
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Kế thừa
Tạ o ra cá c lớ p mớ i từ việc sử dụ ng lạ i nhữ ng thà nh
phầ n củ a lớ p đã có
Lợ i ích
Nhấ t quá n
Thuậ n tiện
Tá i sử dụ ng code
RKING 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.
RKING 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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
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.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Kỹ thuật viết
Kế thừa từ Class
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Constructor
Constructor khô ng đượ c kế thừ a
Lớ p con truy cậ p bằ ng từ khó a super
class HinhHoc
{
…
public HinhHoc(double chuVi, double dienTich)
{
ChuVi = chuVi;
DienTich = dienTich;
}
}
class HinhTron extends HinhHoc
{
…
public HinhTron(double chuVi, double dienTich) {
super(chuVi, dienTich);
}
}
RKING 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
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Abstract class
abstract class A{
abstract void method_1();
}
public class B extends A{
@Override
public void method_1(){
// cà i đặ t chi tiết cho phương thứ c method_1
// trong lớ p con B.
}
}
public class C extends A{
@Override
public void method_1(){
// cà i đặ t chi tiết cho phương thứ c method_1
// trong lớ p con C.
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Kỹ thuật viết
Kế thừa từ Interface
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
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);
interface
class CongThucTinh implements CongThuc {
@Override
public void sHinhVuong(float a) {
System.out.println("Diện tích hình vuô ng là : " + a * a);
}
@Override
public void sHinhChuNhat(float a, float b) {
System.out.println("Diện tích hình chữ nhậ t là : " + a * b);
}
@Override
public void cVHinhVuong(float a) {
System.out.println("Chu vi hình vuô ng là : " + 4 * a);
}
@Override
public void cVHinhChuNhat(float a, float b) {
System.out.println("Chu vi hình chữ nhậ t là : " + 2 * (a + b));
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
interface
public class JavaAndroidVn {
public static void main(String[] args) {
CongThucTinh x = new CongThucTinh();
x.sHinhVuong(5.0f);
x.cVHinhVuong(5.0f);
x.sHinhChuNhat(5.5f, 10.0f);
x.cVHinhChuNhat(5.5f, 10.0f);
}
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Tính đa hình
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Tính đa hình
Khá i niệm về đa hình
Đa hình từ kế thừ a lớ p
Đa hình từ kế thừ a interface
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Tính đa hình
Đa hình là tạ i từ ng thờ i điểm đố i tượ ng sẽ có cá c hình
thá i khá c nhau trong nhữ ng hoà n cả nh khá c nhau.
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
package communityuni.com;
Bài Học
Bài Học
Alias
và
cơ chế gom rác tự động
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Vù ng Vù ng
nhớ A nhớ B
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Vù ng Vù ng
nhớ A nhớ B
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Vù ng Vù ng
nhớ A nhớ B
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Vù ng
nhớ A
psA thay đổ i khô ng ả nh hưở ng gì tớ i psB và ngượ c lạ i
RKING 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
RKING 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");
}
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Bài Học
Bài Học
Bộ nhớ ngoài
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Luồng (Stream)
Tất cả những hoạt động nhập/xuất dữ liệu (nhập dữ liệu từ bàn phím, lấy
dữ liệu từ mạng về, ghi dữ liệu ra đĩa, xuất dữ liệu ra màn hình, máy in,
…) đều đƣợc quy về một khái niệm gọi là luồng (stream).
Trong Java có hai loại luồng: luồng byte và luồng ký tự. Luồng byte
(hay luồng dựa trên byte) hỗ trợ việc xuất nhập dữ liệu trên byte,
thƣờng đƣợc dùng khi đọc ghi dữ liệu nhị phân.
Luồng ký tự đƣợc thiết kế hỗ trợ việc xuất nhập dữ liệu kiểu ký tự
(Unicode).
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
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;
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
bw.write("Obama");
bw.newLine();
bw.write("Putin");
bw.newLine();
bw.write("Kim Jong Un");
bw.close();
osw.close();
fos.close();
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
String line1=br.readLine();
String line2=br.readLine();
String line3=br.readLine();
br.close();
isr.close();
fis.close();
RKING 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;
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Bài Học
Bài Học
Bài Học
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
AWTEvent Container Panel Applet
TextArea
Graphics List
Component Choice
CheckBox
LayoutManager CheckBoxGroup
Canvas
MenuBar
Scrollbar
437
NGUYÊN TẮC XÂY DỰNG GUI
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
Button Checkbox
Label
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
458
CHECK BOX GROUP & RADIO BUTTON
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)
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
screen
x
screen height
MyWindow
MyWindow height
width
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
Panel(BorderLayout
))
TextField
TextField
Button
Button
12
12 Button
Button
Panel(GridLayout
Panel(GridLayout
))
Frame(BorderLayout
Frame(BorderLayout
))
475
LỚP PANEL (VÙNG CHỨA)
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)
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
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
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
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ả
RKING HARD & SMART TODAY FOR A BETTER TOMORROW
Hey!
Coding
is easy!
END