Tải bản đầy đủ (.doc) (25 trang)

THỰC HÀNH LẬP TRÌNH JAVA _NGÔN NGỮ LẬP TRÌNH JAVA pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (459.41 KB, 25 trang )

Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
THỰC HÀNH LẬP TRÌNH JAVA
Phần 1. NGÔN NGỮ LẬP TRÌNH JAVA
o0o
I. Hướng dẫn thực hành
Ví dụ mẫu: Viết chương trình nhập số nguyên / xuất số nguyên ra màn hình
package BTConsole;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class BTConsole {
public static int Nhap1So(){
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Nhap 1 so nguyen: ");
try{
int n = Integer.parseInt(br.readLine());
return n;
}
catch(Exception ee){
System.out.println("\nLoi nhap du lieu! Nhap lai!!");
int n = Nhap1So();
return n;
}
}
public static void main(String []args){
int n = Nhap1So();
System.out.println("So vua nhap: "+n);
}
}
package BTConsole;
import java.io.*;
public class BTConsole {


public static int Nhap1So(){
DataInputStream din = new DataInputStream(System.in);
System.out.print("Nhap 1 so nguyen: ");
try{
int n = Integer.parseInt(din.readLine());
return n;
}
catch(Exception ee){
System.out.println("\nLoi nhap du lieu! Nhap lai!!");
int n = Nhap1So();
return n;
}
}
public static void main(String []args){
int n = Nhap1So();
System.out.println("So vua nhap: "+n);
}
}
II. Bài tập thực hành:
Cấu trúc rẽ nhánh (if, switch)
GVHD: ĐỖ NHƯ TÀI - LUT Trang 1
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
Bài 1. Cho bốn số nguyên a,, b, c, d. Hãy tìm giá trị lớn nhất của bốn số đó.
Bài 2. Nhập điểm từ bàn phím. Viết chương trình xếp loại học viên theo điểm trung bình như sau:

10, 9 : xếp loại xuất sắc.

8, 7: xếp loại giỏi.

6, 5: xếp loại trung bình.


4, 3: xếp loại yếu.

2 , 1, 0: xếp loại kém.
Bài 3. Cho ba số a, b, c. Hãy giải phương trình bậc hai: ax
2
+ bx + c = 0.
Bài 4. Nhập vào ba số nguyên d, m, y. Hãy viết chương trình:

Kiểm tra xem d/m/y có tạo thành một ngày hợp lệ không?

Kiểm tra y có là năm nhuận không?

Tháng m có bao nhiêu ngày?

Nếu d/m/y là ngày hợp lệ, hãy cho biết:
o d/m/y là ngày thứ mấy thứ mấy tron năm?
o d/m/y là thứ mấy của tuần?
Bài 5. Cho ba số nguyên a, b, c. Hãy kiểm tra a, b, c có thể là ba cạnh của một tam giác hay không? Nếu có,
hãy cho biết đó là tam giác vuông, nhọn hay tù?
Cấu trúc lặp (while,do…while, for)
Bài 6. Viết chương trình xuất bảng cửu chương từ 2 đến 9
2x1= 2 3*1= 3 4*1= 4 9*1= 9
2x2= 4 3*2= 6 4*2= 8 9*2=18

2x9=18 3*9=27 4*9=36 9*9=81
Với mọi i= 1 đến 9
{ Với mọi j = 2 đến 9
System.print ( “” + i + ‘x’ + j + ‘=’ + ( i*j<10 ? “ “ : “”) + i*j );
Syctem.out.println(“\n”);

}
Bài 7. Xuất trị bình phương lập phương từ 1 đến 10 {Với mọi i = 1 đến 10 Xuất (i , i
2
, i
3
, xuống dòng)}
Bài 8. Cho số nguyên n. Hãy cho biết n có phải là số nguyên tố.
Bài 9. Nhập vào hai số a, b. Hãy tìm UCLN và BCNN của hai số a, b.
Bài 10.Cho số nguyên n phát sinh ngẫu nhiên (n>0). Hãy cho biết :
a. Số n có bao nhiêu chữ số.
b. Tổng các chữ số của n.
c. Chữ số có giá trị lớn nhất.
d. Chữ số có giá trị nhỏ nhất.
Bài 11.Cho số tự nhiên n. Hãy tính các biểu thức sau:
a. S
1
= 1 + 2 + 3 + … + n.
b. S
2
= 1 – 2 + 3 - … + (-1)
n+1
n.
Bài 12.Dãy số Fibonacy được xác định như sau:
F
1
= F
2
= 1
F
n

= F
n-1
+ F
n-2
(n>2)
Nhập vào số nguyên n. Hãy tính F
n
.
Bài 13.Tạo 1 mảng 10 phần tử, xuất mảng tăng dần
Cần 1 class BAIMANG
Có các hành vi:
void SapXepTang (int a[], int n)
void XuatMang (int a[], int n)
Có hàm main
{ int a[] = { 3,2,1,6,5,8,9,0,12,-4};
SapXepTang(a,10);
XuatMang(a,a0);
}
GVHD: ĐỖ NHƯ TÀI - LUT Trang 2
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
Bài 14.Sinh ngẫu nhiên một dãy số nguyên n phần tử (n nhập từ bàn phím). Viết một hàm tìm giá trị lớn
nhất và hàm tìm nhỏ nhất của dãy.
Cần 1 lớp cho bài toán
Dữ liệu int n, a[]; // số phần tử và tập trị
Hành vi : Hành vi NhapNN(int[] arr), Hành vi LonNhat (int[] arr), hành vi NhoNhat(int[] arr) , Hành vi main
Giải thuật cho hành vi NhapNN(int[] arr) // nhập mảng
{ Đã có giải thuật trên lớp
}
Giải thuật cho hành vi LonNhat(int[] arr)
{

max = giá trị phần tử đầu tiên
For I từ vị trí thứ 2 đến hết chiều dài của arr
Nếu max < arr[i]
max = arr[i]
Trả về max
}
Giải thuật cho hành vi NhoNhat(int[] arr) tự làm.
Giải thuật cho hành vi main
{ int i, n;
Khai báo mảng arr.
Cần đối tượng obj thuộc lớp này;
Nhập giá trị n từ bàn phím.
Tạo n phần tử mảng arr
obj.NhapNN(arr);
Xuất ( obj.LonNhat(arr) )
Xuất( obj.NhoNhat(arr) )
}
Bài 15.Nhập vào Họ Tên, hãy kiễm tra xem chuỗi vừa nhập có bao nhiêu ký tự, bao nhiêu từ.
Bài 16.Nhập vào một chuỗi, hãy loại bỏ tất cả các khoảng trắng dư thừa trong chuỗi.
Bài 17.Nhập vào chuỗi ký tự từ bàn phím. Hãy viết chương trình đảo chuỗi.
Bài 18.Một chuồng gồm 10 cái lồng dùng để nhốt mèo và chó (mỗi lồng chỉ nhốt nhiều nhất 1 con). Viết
chương trình quản lý việc nhốt mèo và chó trong các lồng.
các class trừu tượng gồm:
-DongVat + ten
+ abstract void conGi();
-Cho kế thừa từ DongVat
-Meo kế thừa từ DongVat
-class Chuong sẽ để quản lý việc nhốt các động vật.
- Khai báo Dong vat ->cacLong[10]
- method nhot( DongVat, chuong so?)

- method tha(chuong?)
- method baocao(); báo cáo tình hình các chuồng
Bài 19.test
GVHD: ĐỖ NHƯ TÀI - LUT Trang 3
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
III. HƯỚNG DẪN THỰC HÀNH THÊM :

Các ví dụ minh họa:
Ví dụ 1: Nhập 1 dãy số từ bàn phím. Tính tổng của dãy số đó.
package btconsole;
import java.util.*;
import java.io.*;
public class TinhTong {
public static int[] Nhap1DaySo() throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Nhap so phan tu cua mang: ");
int n = Integer.parseInt(br.readLine());
int a[] = new int[n];
for(int i=0;i<a.length;i++){
System.out.print("A["+i+"]=");
a[i] = Integer.parseInt(br.readLine());
}
return a;
}
public static void In1DaySo(int[] l) {
System.out.print("Day so: ");
for(int i=0;i<l.length;i++) {
System.out.print(l[i]+" ");
}
System.out.println(" ");

}
public static int HamTinhTong(int[] a) {
int tong = 0;
for(int i=0;i<a.length;i++){
tong+=a[i];
}
return tong;
}
public static void main(String[] args) {
try {
int[] a = null;
a = Nhap1DaySo();
In1DaySo(a);
System.out.println("Tong: "+HamTinhTong(a));
}catch(Exception ee) {
System.out.println(ee.getMessage());
}
}
}
Ví dụ 2: Nhập một dãy số nguyên từ bàn phím. Dãy số được nhập chỉ trên một dòng, cách nhau bởi khoảng
trắng, và việc nhập chỉ kết thúc khi có phần tử giá trị 0. Tính tích của dãy số đó.
package btconsole;
import java.util.*;
import java.io.*;
public class TinhTich {
public static ArrayList Nhap1DaySo() throws Exception {
// Cac phan tu cach nhau khoang trang, hay xuong dong
// Ket thuc khi nhap so 0
System.out.print("Nhap day so : ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

ArrayList lst = new ArrayList();
while(true) {
StringTokenizer tok = new StringTokenizer(br.readLine()," ");
GVHD: ĐỖ NHƯ TÀI - LUT Trang 4
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
while(tok.hasMoreElements()) {
int n = Integer.parseInt(tok.nextToken());
if(n==0) return lst;
lst.add(new Integer(n));
}
}
}
public static void In1DaySo(List l) {
System.out.print("Day so: ");
for (int i = 0; i < l.size(); i++) {
System.out.print(l.get(i).toString()+" ");
}
System.out.println();
}
public static int HamTinhTich(List l) {
Iterator it = l.iterator();
int tich = 1;
while(it.hasNext()) {
tich *= Integer.parseInt(it.next().toString());
}
return tich;
}
public static void main(String[] args) {
try {
ArrayList a = null;

a = Nhap1DaySo();
In1DaySo(a);
System.out.println("Tich: "+HamTinhTich(a));
}catch(Exception ee) {
System.out.println(ee.getMessage());
}
}
}
Ví dụ 3: Nhập một chuỗi từ bàn phím. Hãy đảo chuỗi vừa nhập.
package btconsole;
import java.io.*;
import java.util.*;
public class InWord {
public static String DaoTu(String s){
StringBuffer sbuf = new StringBuffer(s);
for(int i=0;i<sbuf.length()/2;i++){
char tmp = sbuf.charAt(i);
sbuf.setCharAt(i,sbuf.charAt(sbuf.length()-1-i));
sbuf.setCharAt(sbuf.length()-1-i,tmp);
}
return sbuf.toString();
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Nhap chuoi can dao: ");
String s = br.readLine();
s = DaoTu(s);
System.out.println("Chuoi dao: "+s);
}
}


Các lớp mảng và tập hợp:

int[], float[], …
GVHD: ĐỖ NHƯ TÀI - LUT Trang 5
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java

ArrayList

Vector

Arrays

Collections

Các lớp xử lý chuỗi:

String

StringBuffer

StringTokenizer

Các lớp tiện ích khác:

Random

Math

Các giao diện cần chú ý:


Collection

List

Enumeration
IV. BÀI TẬP THỰC HÀNH THÊM :
Mảng và tập hợp (int[], ArrayList, Vector, …)
Bài 20.Sinh ngẫu nhiên một dãy số nguyên a gồm n phần tử (n nhập từ bàn phím). Viết hàm trả về một
mảng các số nguyên tố trong dãy a.
Bài 21.Nhập một dãy số nguyên từ bàn phím. Dãy số được nhập chỉ trên một dòng, cách nhau bởi khoảng
trắng, và việc nhập chỉ kết thúc khi có phần tử giá trị 0. Hãy xóa các phần tử trùng nhau có trong mảng (chỉ
giữ lại 1 phần tử trong số các phần tử trùng).
Bài 22.Sinh ngẫu nhiên một dãy số nguyên có n phần tử (n nhập từ bàn phím). Hãy viết hàm tìm các phần tử
có chữ số tận cùng là 2, 4, 6 và đưa vào 1 mảng. In các phần tử trong mảng vừa mới đưa vào.
Bài 23.Nhập một dãy số nguyên từ bàn phím. Dãy số được nhập chỉ trên một dòng, cách nhau bởi khoảng
trắng, và việc nhập chỉ kết thúc khi có phần tử giá trị 0. Hãy sắp xếp các phần tử chẳn lên đầu dãy và tăng
dần, các phần tử lẻ xuống cuối dãy và giảm dần.
Bài 24.Sinh ngẫu nhiên một dãy số nguyên a có n phần tử (n nhập từ bàn phím). Nhập số nguyên K và số
nguyên L. Viết hàm xóa L phần tử của dãy số a bắt đầu từ K.
Bài 25.Nhập ma trận số số thực A có n dòng và m cột có giá trị phát sinh ngẫu nhiên. Hãy khai báo mảng
tongdong, tongcot lần lượt chứa tổng của các dòng, cột.
Bài 26.Nhập ma trận số nguyên A có n dòng và m cột. Hãy viết các hàm sau:

Dịch xuống và xoay vòng các hàng trong mảng.

Sắp xếp các dòng sao cho tăng dần về tổng giá trị của các phần tử cùng dòng.

Xây dựng ma trận B sao cho B[i][j] = lớn nhất của dòng I và cột J trong ma trận ban đầu.
Xử lý chuỗi (char[], String, StringBuilder, StringTokenizer, …)

Bài 27.Nhập vào chuỗi ký tự từ bàn phím. Hãy xóa các ký tự là nguyên âm.
Bài 28.Nhập vào chuỗi ký tự từ bàn phím. Hãy lấy đối xứng các từ của chuỗi. Ví dụ: “KIEN AN
CA””CA AN KIEN”.
Bài 29.Nhập một chuỗi từ bàn phím. Hãy in lần lượt các từ có 1 ký tự, 2 ký tự, 3 ký tự, …
Nhập hai chuỗi a, b. Hãy trộn các từ của a, b lần lượt từ trái sang phải và xen kẽ nhau.
Hướng đối tượng
Bài 30.Tạo đối tượng Person, Teacher, Employee. Cho 1 danh sách các nhân viên trong trường gồm Teacher
và Employee (SV hãy xem xét các thuộc tính liên quan để thiết kế cho phù hợp với thực tế).
Bài 31.Thiết kế các đối tượng hình học 2D.
Bài 32.Thiết kế lớp thư viện các hàm như: Số nguyên tố, dãy Fibonacy, hàm sort, …
GVHD: ĐỖ NHƯ TÀI - LUT Trang 6
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
BÀI TẬP LẬP TRÌNH JAVA
Phần 2: Luồng nhập/xuất
o0o
V. Hướng dẫn thực hành :
GVHD: ĐỖ NHƯ TÀI - LUT Trang 7
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
Ví dụ 1: Viết chương trình sao chép từ tập tin này sang tập tin khác.
package FileIO;
import java.io.*;
import java.util.*;
public class CopyFile {
public static void copyfile(String filesrc, String filedst){
try{
FileInputStream fi = new FileInputStream(filesrc);
FileOutputStream fo = new FileOutputStream(filedst,false);
int ch;
while((ch=fi.read())!=-1){
fo.write(ch);

}
fi.close();
fo.close();
}
catch(EOFException ee){
}
catch(FileNotFoundException ee){
System.out.println("Tap tin khong tim thay!");
}
catch(IOException ee){
System.out.println("Khong the doc file!");
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Nhap tap tin can sao chep:");
String filesrc = br.readLine();
System.out.print("Nhap tap tin de sao chep den:");
String filedst = br.readLine();
copyfile(filesrc,filedst);
}
}
Ví dụ 2: Viết chương trình liệt kê các tập tin trong thư mục.
package FileIO;
import java.io.*;
import java.util.*;
public class DirFolder {
public static void dirfolder(String strPath) throws Exception {
File fi = new File(strPath);
if(fi.exists()==false){

throw new Exception("Duong dan khong ton tai!");
}
if(fi.isDirectory()==false){
throw new Exception("Duong dan khong phai la thu muc!");
}
File[] subFile = fi.listFiles();
for(int i=0;i<subFile.length;i++){
String name = subFile[i].getName();
String type = subFile[i].isDirectory() ? "<DIR> " : "<FILE> ";
System.out.println(type+""+name);
}
}
public static void main(String[] args) throws Exception {
dirfolder("C:\\");
GVHD: ĐỖ NHƯ TÀI - LUT Trang 8
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
}
}
Ví dụ 3: Viết chương trình tạo 100 số nguyên ngẫu nhiên, ghi các số này vào một tập tin, mỗi dòng chứa tối
đa 10 số. Viết chương trình ghi các số từ tập tin ra màn hình.
package FileIO;
import java.io.*;
import java.util.*;
public class IntRandom {
public static void RandomInt2File(String filename, int numrand) throws Exception {
PrintWriter wt = new PrintWriter(new FileWriter(filename),true);
int count = 0;
while(count<numrand){
int a = (int)Math.ceil(Math.random()*(100-10+1))+10;
wt.print(a+" ");

count++;
if(count%10==0) wt.println();
}
wt.close();
}
public static void XuatRandomFile(String filename) throws Exception{
BufferedReader br = null;
try{
br = new BufferedReader(new FileReader(filename));
while (true) {
StringTokenizer tok = new StringTokenizer(br.readLine()," ");
int count = 0;
while(tok.hasMoreTokens()){
int a = Integer.parseInt(tok.nextToken());
System.out.print(a+" ");
count++;
if(count%10==0) System.out.println();
}
}
}
catch(EOFException ee){
br.close();
}
catch(Exception ee){
}
}
public static void main(String[] args) throws Exception {
RandomInt2File("C:\\rand.txt",134);
XuatRandomFile("C:\\rand.txt");
}

}
VI. Bài tập thực hành :
Bài 33.Viết chương trình xuất nội dung một tập tin văn bản ra màn hình.
Bài 34.Cho một tập tin chứa các số nguyên cách nhau bởi dấu chấm phẩy. Hãy viết chương trình tính tổng
các số nguyên đó và in kết quả ra màn hình.
Bài 35.Cho cấu trúc file như sau:
Mỗi dòng là 1 đối tượng Car, mỗi đối tượng gồm các thuộc tính: Serial, Model. Các thuộc tính cách
nhau dấu “,”.
a. Hãy viết chương trình nhập vào 1 danh sách các đối tượng từ file có cấu trúc trên.
b. Nhập vào 1 số serial, cho biết Model của xe có số serial vừa nhập.
GVHD: ĐỖ NHƯ TÀI - LUT Trang 9
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
c. Nhập vào giá trị Model, hãy xóa hết các xe nào có cùng Model trong DS.
d. Thêm 1 xe mới vào DS với các thuộc tính nhập từ bàn phím.
e. Ghi DS vào file theo cấu trúc file đã định nghĩa ở trên. (Nếu file đã tồn tại thì overwrite).
VII. Bài tập thực hành thêm :
Xử lý tập tin nhị phân
Bài 36.Nhập đường dẫn chứa tập tin. Hãy đếm dung lượng của tập tin đó.
Bài 37.Nhập đường dẫn hai tập tin. Hãy so sánh hai tập tin đó có giống nhau hay không?
Bài 38.Nhập đường dẫn tập tin cần di chuyển và vị trí di chuyển. Hãy di chuyển tập tin đó vào nơi di chuyển
đến.
Bài 39.Nhập đường dẫn tập tin từ bàn phím. Viết chương trình xóa tập tin đó.
Bài 40.Nhập đường dẫn một thư mục. Hãy liệt kê các tập tin có đuôi là .txt và ghi ra một tập tin kết quả.
Xử lý tập tin văn bản (BufferedReader, FileReader, FileWriter, …)
Bài 41.Viết chương trình tạo một tập tin từ nội dung nhập từ bàn phím. Việc nhập kết thúc khi người dùng
nhập 1 dòng chứa chữ END để thoát chương trình.
Bài 42.Cho một tập tin chứa các số nguyên cách nhau bởi dấu chấm phẩy hay xuống dòng. Hãy viết chương
trình tính tổng các số nguyên đó và in kết quả ra màn hình.
Bài 43.Viết chương trình đếm một tập tin văn bản có bao nhiêu câu. Biết các câu cách nhau bởi dấu chấm.
Viết chương trình quản lý một danh sách sinh viên từ console. Chương trình cho phép thêm sinh viên, tìm

kiếm, cập nhật, in danh sách sinh viên…Khi bắt đầu, chương trình sẽ lấy dữ liệu từ tập tin thisinh.txt (tập tin
văn bản, dữ liệu mỗi thí sinh nằm trên 1 dòng và cách nhau bởi dấu chấm phẩy). Khi kết thúc, chương trình
ghi lại danh sách sinh viên vào tập tin.
GVHD: ĐỖ NHƯ TÀI - LUT Trang 10
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
BÀI TẬP LẬP TRÌNH JAVA
Phần 3: Swing
o0o
VIII. Hướng dẫn thực hành :
• Các đối tượng xử lý:
a. JFrame
b. JCheckBox, JRadioButton, ButtonGroup
c. JTextArea, JTextField, JPasswordField
d. JPanel, JScrollPane, JEditPane
e. JList, JComboBox
• Các layout: (JFrame, JPanel)
a. FlowLayout
b. GridLayout
c. BorderLayout
d. GridBagLayout (GridBagConstraint)
• Các lớp xử lý sự kiện:
a. WindowListener  WindowAdapter
 windowClosing(WindowEvent)
 windowOpened(WindowEvent)
 windowClosed(WindowEvent)
 windowActivited(WindowEvent)
 windowDeactivited(WindowEvent)
 windowIconified(WindowEvent)
 windowDeiconified(WindowEvent)
b. ItemListener

 itemStateChanged(ItemEvent)
c. ComponentListener  ComponentAdapter
 componentHidden(ComponentEvent)
 componentShown(ComponentEvent)
 componentMoved(ComponentEvent)
 componentResized(ComponentEvent)
GVHD: ĐỖ NHƯ TÀI - LUT Trang 11
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
d. AdjustmentListener
 adjustmentValueChanged(AdjustmentEvent)
e. ActionListener
 actionPerformed(ActionEvent)
f. TextListener
 textValueChanged(TextEvent)
Ví dụ 1: Thiết kế chương trình HelloWorld có giao diện như sau:
Hãy viết chương trình thực hiện các yêu cầu sau:
a) Chữ Hello World! nằm ở chính giửa cửa sổ.
b) Màu nền cửa sổ là màu trắng.
c) Xử lý nút thoát cho cửa sổ.
package btswing;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class HelloWorld extends JFrame implements ActionListener {
public JLabel lblText;
private Container container = getContentPane();
public HelloWorld() {
// XU LY DU LIEU

// LAYOUT VA TAO DOI TUONG
container.setLayout(new FlowLayout(FlowLayout.CENTER));
container.add(lblText=new JLabel("HELLO WORLD!"));
// XU LY SU KIEN
this.addComponentListener(new ComponentAdapter(){
public void componentResized(ComponentEvent e){
lblText.setLocation((HelloWorld.this.container.getWidth()-
lblText.getWidth())/2,
(HelloWorld.this.container.getHeight()-
lblText.getHeight())/2);
}
});
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
int ret = JOptionPane.showConfirmDialog(null,"Ban co muon thoat
chuong trinh?","Thoat chuong trinh!",JOptionPane.YES_NO_OPTION);
if(ret==JOptionPane.YES_OPTION) System.exit(0);
}});
// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// HIEN THI JFRAME
this.setTitle("Hello World!");
GVHD: ĐỖ NHƯ TÀI - LUT Trang 12
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
this.setLocation(100,100);
this.setSize(430,110);
this.setVisible(true);
container.setBackground(new Color(255,255,255));
this.show();
lblText.setLocation((container.getWidth()-lblText.getWidth())/2,
(container.getHeight()-lblText.getHeight())/2);

}
public void actionPerformed(ActionEvent e){
}
public static void main(String[] args) {
HelloWorld helloWorld1 = new HelloWorld();
}
}
Ví dụ 2: Thiết kế chương trình DaySo có giao diện như sau:
Hãy viết chương trình thực hiện các yêu cầu sau:
a) Xử lý nút Thoát: có xác nhận Yes/No khi thoát.
b) Xử lý nút Ngẫu nhiên: cho nhập số phần tử từ Input Dialog. Sau đó sinh giá trị ngẫu nhiên cho dãy
số cách nhau bởi dấu phẩy.
c) Xử lý các sự kiện trên nút Tất cả, Chẵn, Lẻ, Sắp xếp: liệt kê kết quả tương ứng vào phần Kết Quả.
d) Xử lý nút “Xử lý”: lưu xuống tập tin dayso.txt nội dung phần Kết Quả.
package btswing;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DaySo extends JFrame implements ActionListener, ItemListener {
private JRadioButton radAll,radChan, radLe;
private JCheckBox chkSapXep;
private JButton btnRandom, btnXuLy, btnThoat;
private JTextField txtDaySo;
GVHD: ĐỖ NHƯ TÀI - LUT Trang 13
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
private JTextArea txtKetQua;
private Container container = getContentPane();
public DaySo() {

// XU LY DU LIEU
// TAO DOI TUONG
radAll = new JRadioButton("Tat ca",true);
radChan = new JRadioButton("Chan");
radLe = new JRadioButton("Le");
ButtonGroup btn = new ButtonGroup();
btn.add(radChan); btn.add(radLe);btn.add(radAll);
txtDaySo = new JTextField(10);
txtKetQua = new JTextArea(5,5);
chkSapXep = new JCheckBox("Sap xep");
btnRandom = new JButton("Ngau nhien");
btnXuLy = new JButton("Xu ly");
btnThoat = new JButton("Thoat");
// LAYOUT
container.setLayout(new BorderLayout());
JPanel p1 = new JPanel(new BorderLayout(5,0));
JPanel p11 = new JPanel(new GridLayout(3,1));
p11.add(new JLabel("Day so:"));
p11.add(new JLabel("Tuy chon:"));
p11.add(new JLabel("Ket qua:"));
JPanel p12 = new JPanel(new GridLayout(3,1));
JPanel p121= new JPanel(new FlowLayout(FlowLayout.LEADING));
p121.add(radAll);p121.add(radChan);p121.add(radLe);
p121.add(chkSapXep);
p12.add(txtDaySo);
p12.add(p121);
JPanel p13 = new JPanel(new GridLayout(3,1));
p13.add(btnRandom);
p1.add(p11,BorderLayout.WEST);
p1.add(p13,BorderLayout.EAST);

p1.add(p12,BorderLayout.CENTER);
container.add(p1,BorderLayout.NORTH);
container.add(new JScrollPane(txtKetQua,
JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS),
BorderLayout.CENTER
);
JPanel p2 = new JPanel(new FlowLayout(FlowLayout.CENTER));
p2.add(btnXuLy); p2.add(btnThoat);
container.add(p2,BorderLayout.SOUTH);
// XU LY SU KIEN
this.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
int ret = JOptionPane.showConfirmDialog(null,"Ban co muon thoat
chuong trinh?","Thoat chuong trinh!",JOptionPane.YES_NO_OPTION);
GVHD: ĐỖ NHƯ TÀI - LUT Trang 14
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
if(ret==JOptionPane.YES_OPTION) System.exit(0);
}});
// this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
btnRandom.addActionListener(this);
btnXuLy.addActionListener(this);
chkSapXep.addItemListener(this);
radAll.addItemListener(this);
radChan.addItemListener(this);
radLe.addItemListener(this);
btnThoat.addActionListener(this);
// HIEN THI JFRAME
this.setTitle("Day so");
this.setLocation(100,100);

this.setSize(350,300);
this.setVisible(true);
this.show();
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==btnRandom){
String txt = "";
int n = Integer.parseInt(JOptionPane.showInputDialog(this,"Nhap so luong so
can tao:"));
for(int i=0;i<n;i++){
txt+= ","+(int)(Math.ceil(Math.random()*100));
}
txt = txt.substring(1);
txtDaySo.setText(txt);
}else if(e.getSource()==btnXuLy){
try{
PrintWriter wt = new PrintWriter(new FileWriter("dayso.txt"));
wt.println(txtKetQua.getText());
wt.close();
}catch(Exception ee){
System.out.println("Ghi tap tin bi loi!");
}
}else if(e.getSource()==btnThoat){
int ret = JOptionPane.showConfirmDialog(null,"Ban co muon thoat chuong
trinh?","Thoat chuong trinh!",JOptionPane.YES_NO_OPTION);
if(ret==JOptionPane.YES_OPTION) System.exit(0);
}
}
public void itemStateChanged(ItemEvent e){
int chanle = -1;

if(radChan.isSelected()) chanle=0;
else if(radLe.isSelected()) chanle=1;
Object [] v = LayDuLieu(chanle,chkSapXep.isSelected());
String txt = "";
for(int i=0;i<v.length;i++) {
txt += v[i]+ " ";
}
txtKetQua.setText(txt);
txtKetQua.setLineWrap(true);
}
// chanle==-1 > lay tat ca
// chanle==1 > lay ra so le
// chanle==0 > lay ra so chan
public Object[] LayDuLieu(int chanle,boolean sort){
Vector v = new Vector();
StringTokenizer tok = new StringTokenizer(txtDaySo.getText(),",");
GVHD: ĐỖ NHƯ TÀI - LUT Trang 15
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
while(tok.hasMoreTokens()){
int n = Integer.parseInt(tok.nextToken());
if(n%2==chanle||chanle==-1){
v.add(new Integer(n));
}
}
Object []a_obj = v.toArray();
if(sort) Arrays.sort(a_obj);
return a_obj;
}
public static void main(String[] args) {
DaySo daySo1 = new DaySo();

}
}
IX. Bài tập thực hành :
Các đối tượng cơ bản trong Swing (JFrame, JLabel, JTextField,… )
Bài 44.Thiết kế chương trình Login có giao diện như sau:
Hãy viết chương trình thực hiện các yêu cầu sau:
a) Xử lý nút Thoát: có xác nhận Yes/No khi thoát.
b) Xử lý nút đăng nhập, sự kiện nhấn Enter trên textbox username, password: khi người dùng gõ đúng
chữ tại phần username là “Nguyen Van A”, và phần password là “NVA” thì thông báo đăng nhập
thành công, ngược lại thông báo đăng nhập thất bại.
Bài 45.Thiết kế chương trình ChangeBgColor có giao diện như sau:
Hãy viết chương trình thực hiện các yêu cầu sau:
a) Xử lý nút Thoát: có xác nhận Yes/No khi thoát.
b) Xử lý nút Red, Green, Blue: điền giá trị màu đỏ, xanh lá cây, xanh dương tương ứng với 3 thành
phần màu Red, Green, Blue vào textbox tương ứng và đổi màu nền của cửa sổ.
c) Xử lý nút Random: phát sinh màu ngẫu nhiên, cập nhật textbox tương ứng, và màu nền cửa sổ.
d) Xử lý nút Custom: căn cứ vào giá trị của Red, Green, Blue trên textbox để đặt màu nền.
e) Xử lý nút Dialog: hiển thị cửa sổ màu cho chọn màu (JFileChooser).
Bài 46.Thiết kế chương trình SoanThao có giao diện như sau:
GVHD: ĐỖ NHƯ TÀI - LUT Trang 16
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
Hãy viết chương trình thực hiện xử lý các sự kiện và lưu nội dung của phần văn bản xuống tập tin
“SoanThao.txt” khi nhấn nút Lưu tập tin.
Bài 47.Thiết kế chương trình Calculator có giao diện như sau:
Bài 48.Thiết kế chương trình LietKeSoNguyenTo có giao diện như sau:
Hãy viết chương trình thực hiện xử lý các sự kiện và lưu nội dung của phần văn bản xuống tập tin
“nguyento.txt” khi nhấn nút Tiep tuc.
GVHD: ĐỖ NHƯ TÀI - LUT Trang 17
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
X. GridBagLayout :

• Đối tượng GridBagLayout tương tự như GridLayout (quản lý các đối tượng theo ô). Tuy nhiên,
GridBagLayout có phần linh động hơn, ta có thể xác định mỗi đối tượng chiếm bao nhiêu ô, và nằm
ở vị trí nào trên ô, cách co dãn, neo của từng đối tượng.
• Cách sử dụng GridBagLayout:
o Khai báo:
private Container container = getContentPane();
private GridBagLayout gbLayout = new GridBagLayout();
private GridBagConstraints gbConstraints = new GridBagConstraints();
Trong hàm tạo của Jframe:
// LAYOUT
container.setLayout(gbLayout);
gbConstraints.insets = new Insets(5,5,5,5); // khoảng hở giữa các đối tượng
o Viết thêm hàm addComponent
// them doi tuong vao dung GridBagLayout
private void addComponent(Component component,int row, int column, int nrow,
int ncolumn, int weightrow, int weightcolumn)
{
gbConstraints.gridx = column; // vi tri cot
gbConstraints.gridy = row; // vi tri dong
gbConstraints.gridwidth = ncolumn; // so cot chiem
gbConstraints.gridheight = nrow; // so dong chiem
gbConstraints.weighty = weightrow; // ty le co dan theo dong
gbConstraints.weightx = weightcolumn; // ty le co dan theo cot
// rang buoc doi tuong
gbLayout.setConstraints( component, gbConstraints );
container.add(component); // them vao container
} // addComponent
o Thêm 1 đối tượng vào JFrame
gbConstraints.fill = GridBagConstraints.NONE; // dãn nở
gbConstraints.anchor = GridBagConstraints.CENTER; // neo

// dong 0 cột 0 chiếm 1 dòng 1 cột, so với các đối tượng khác không co dãn
addComponent(a_btn[0],0,0,1,1,0,0);
• Chú ý: 1 ô chỉ chiếm 1 đối tượng, nếu hai đối tượng nằm cùng 1 ô thì phải sử dụng JPanel.
package btswing;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
GVHD: ĐỖ NHƯ TÀI - LUT Trang 18
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
public class GridBagLayoutDemo1 extends JFrame {
private JButton [] a_btn = new JButton[6];
private JTextField txtText = new JTextField(10);
private Container container = getContentPane();
private GridBagLayout gbLayout = new GridBagLayout();
private GridBagConstraints gbConstraints = new GridBagConstraints();
public GridBagLayoutDemo1() {
// XU LY DU LIEU
for(int i=0;i<6;i++){
a_btn[i] = new JButton("Button "+i);
}
// LAYOUT
container.setLayout(gbLayout);
gbConstraints.insets = new Insets(5,5,5,5);
gbConstraints.fill = GridBagConstraints.NONE;
gbConstraints.anchor = GridBagConstraints.CENTER;
addComponent(a_btn[0],0,0,1,1,0,0);
addComponent(a_btn[1],0,1,1,1,0,0);
addComponent(a_btn[2],1,1,1,1,0,0);
gbConstraints.fill = GridBagConstraints.BOTH;
addComponent(a_btn[3],1,0,2,1,0,0);

addComponent(a_btn[4],0,2,2,1,0,0);
addComponent(a_btn[5],2,1,1,2,0,0);
addComponent(txtText,3,0,1,3,1,1);
// XU LY SU KIEN
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// HIEN THI JFRAME
this.setTitle("GridBagLayout Demo1!");
this.setLocation(100,100);
this.setSize(430,300);
this.setVisible(true);
this.show();
}
// them doi tuong vao dung GridBagLayout
private void addComponent(Component component,int row, int column, int nrow, int
ncolumn, int weightrow, int weightcolumn)
{
gbConstraints.gridx = column; // vi tri cot
gbConstraints.gridy = row; // vi tri dong
gbConstraints.gridwidth = ncolumn; // so cot chiem
gbConstraints.gridheight = nrow; // so dong chiem
gbConstraints.weighty = weightrow; // ty le co dan theo dong
gbConstraints.weightx = weightcolumn; // ty le co dan theo cot
gbLayout.setConstraints( component, gbConstraints ); // rang buoc doi tuong
container.add(component); // them vao container
} // addComponent
public static void main(String[] args) {
GVHD: ĐỖ NHƯ TÀI - LUT Trang 19
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
GridBagLayoutDemo1 gridBagLayoutDemo11 = new GridBagLayoutDemo1();
}

}
XI. ListBox và ComboBox :
Ví dụ 1:
package btswing;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class ListBoxDemo extends JFrame implements ListSelectionListener {
private JList colorJList; // list to display colors
private final String colorNames[] = { "Black", "Blue", "Cyan",
"Dark Gray", "Gray", "Green", "Light Gray", "Magenta",
"Orange", "Pink", "Red", "White", "Yellow" };
private final Color colors[] = { Color.BLACK, Color.BLUE, Color.CYAN,
Color.DARK_GRAY, Color.GRAY, Color.GREEN, Color.LIGHT_GRAY,
Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.WHITE,Color.YELLOW };
private Container container = getContentPane();
private DefaultListModel lst = new DefaultListModel();
public ListBoxDemo() {
// XU LY DU LIEU
// LAYOUT
colorJList = new JList(lst);
for(int i=0;i<colorNames.length;i++){
lst.add(i,colorNames[i]);
}
colorJList.setSelectionMode( ListSelectionModel.SINGLE_SELECTION);
container.setLayout(new FlowLayout());
container.add(new JScrollPane(colorJList));

// XU LY SU KIEN
colorJList.addListSelectionListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// HIEN THI JFRAME
this.setTitle("LixBox Demo!");
this.setLocation(100, 100);
GVHD: ĐỖ NHƯ TÀI - LUT Trang 20
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
this.setSize(430, 300);
this.setVisible(true);
this.show();
}
public void valueChanged( ListSelectionEvent event )
{
getContentPane().setBackground(colors[ colorJList.getSelectedIndex()]);
}
public static void main(String[] args) {
ListBoxDemo listBoxDemo1 = new ListBoxDemo();
}
}
Ví dụ 2:
package btswing;
import java.io.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class ComboBoxDemo extends JFrame implements ItemListener {
private JComboBox colorBox; // list to display colors

private final String colorNames[] = { "Black", "Blue", "Cyan",
"Dark Gray", "Gray", "Green", "Light Gray", "Magenta",
"Orange", "Pink", "Red", "White", "Yellow" };
private final Color colors[] = { Color.BLACK, Color.BLUE, Color.CYAN,
Color.DARK_GRAY, Color.GRAY, Color.GREEN, Color.LIGHT_GRAY,
Color.MAGENTA, Color.ORANGE, Color.PINK, Color.RED, Color.WHITE,Color.YELLOW };
private Container container = getContentPane();
private DefaultComboBoxModel lst = new DefaultComboBoxModel();
public ComboBoxDemo() {
// XU LY DU LIEU
// LAYOUT
colorBox = new JComboBox(lst);
for(int i=0;i<colorNames.length;i++){
lst.addElement(colorNames[i]);
}
container.setLayout(new FlowLayout());
container.add(new JScrollPane(colorBox));
// XU LY SU KIEN
colorBox.addItemListener(this);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// HIEN THI JFRAME
this.setTitle("ComboBox Demo!");
this.setLocation(100, 100);
GVHD: ĐỖ NHƯ TÀI - LUT Trang 21
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
this.setSize(430, 300);
this.setVisible(true);
this.show();
}
public void itemStateChanged( ItemEvent event )

{
getContentPane().setBackground(colors[ colorBox.getSelectedIndex()]);
}
public static void main(String[] args) {
ComboBoxDemo comboBoxDemo1 = new ComboBoxDemo();
}
}
XII. Bài tập thực hành :
Bài tập 1. Thiết kế giao diện QuanLySinhVien :
GVHD: ĐỖ NHƯ TÀI - LUT Trang 22
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
BÀI TẬP LẬP TRÌNH JAVA
ÔN TẬP
o0o
Thiết kế chương trình QuanLySinhVien có giao diện như sau:
Hãy viết chương trình thực hiện các chức năng sau đây:
a. Khi khung ứng dụng hiển thị, tất cả các nút đều mờ đi trừ nút Load, Exit.
b. Xử lý sự kiện Thoát: khi người dùng nhấn nút Exit hay nút Close trên thanh tiêu đề. Xác nhận coi
người dùng muốn thoát không.
c. Xử lý sự kiện nhấn nút Load:

Hiển thị hộp thoại cho người dùng chọn tập tin dữ liệu.

Nạp dữ liệu lưu trong tập tin lên các đối tượng của chương trình, biết cấu trúc tập tin dữ liệu như
sau:
a. Mỗi dòng lưu 1 sinh viên
b. Các dữ liệu các nhau bởi dấu chấm phẩy
c. Thứ tự dữ liệu trên một dòng: MaSV;HoTen;Khoa;Lop;Diem;Phai
Ví dụ:
0111438;Nguyen Van A;CNTT;TH0102;9;Nam

0111439;Tran Thi B;Toan;TT0101;8;Nu
0111440;Dinh Van C;Sinh;SH0103;7;Nam

Kích hoạt các nút còn lại của ứng dụng.
d. Xử lý các sự kiện chọn mã sinh viên trong hộp MaSV, nhấn nút Pre, nhấn nút Next, chọn sinh
viên trong danh sách.

Lưu ý:
a. Hiển thị thông tin sinh viên lên các mục tương ứng trên ứng dụng.
b. Cập nhật vị trí của sinh viên tương ứng: hộp MaSV, danh sách sinh viên, vị trí sinh viên /
tổng sinh viên.
e. Tính tổng điểm trung bình của các sinh viên.
f. Xử lý nhấn nút Add, Delete, Update. Ràng buộc nhập điểm bắt buộc phải là số.
Sự kiện nhấn nút Save: cập nhật lại tập tin ban đầu.
GVHD: ĐỖ NHƯ TÀI - LUT Trang 23
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
Bài 1. Hãy tạo khung với giao diện dưới (không được dùng công cụ để thiết kế và null layout):
• Hãy nạp dữ liệu từ tập tin dssv.txt (lưu tại thư mục của ứng dụng) vào các thành phần Ma sinh vien,
Ho ten, Gioi tinh. Tập tin có dạng: mỗi dòng lưu thông tin của sinh viên lần lượt Mã số sinh viên, Họ tên,
Giới tính (Nam/Nu) cách bởi dấu “_”.
Ví dụ: 01234_Nguyen Van A_Nam
02468_Tran Thi B_Nu
• Xử lý các sự kiện sau:
a. Thoat: khi thoát ứng dụng hay nhấn nút Thoat.
b. Chọn mã sinh viên, các thông tin khác được tự động điền tương ứng sau lựa chọn.
c. Them, Xoa: thêm, xóa thông tin đăng ký vào danh sách.
d. Cập nhật lại giá trị nhãn So SV dang ky khi thêm, xóa.
• Xử lý sự kiện nút Xuat: ghi danh sách tham gia ra tập tin danhsach.txt theo mẫu.
DANH SACH DANG KY THAM GIA TAP HUAN
Ngay cap nhat: 04 – 08 – 2006

Tong sinh vien: 2
SoTT Ma so Ho ten Gioi tinh Ghi chu

01 01234 Nguyen Van A Nam Lop 01
02 02468 Tran Thi B Nu Lop 02
Lưu ý ngày cập nhật trong tập tin là ngày hiện tại của hệ thống.
GVHD: ĐỖ NHƯ TÀI - LUT Trang 24
Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java
Bài 2. Tạo form với giao diện như sau
• Nạp dữ liệu từ file MatHang.txt cho ComboBox “Ten Hang”, và xử lý sự kiện khi chọn một mặt hàng
trong ComboBox thì chương trình sẽ tự động điền đơn giá của mặt hàng đó vào TextField “Don Gia”. “Don
gia” không cho phép nhập.
• Xử lý sự kiện cho nút “Them”:
Khi nhấn nút, chương trình sẽ:
- Thêm một dòng vào ListBox. Mỗi dòng gồm có: Ten hang, Don gia, So luong, Thanh tien, trong đó
“Thanh tien” = “So Luong” x “Don gia” (các thành phần được nối cách nhau bằng dấu chấm phẩy).
- Cập nhật lại giá trị của Label “Tong cong” (bằng tổng tất cả “Thanh tien” của các mặt hàng được thêm
vào ListBox)
• Xử lý sự kiện cho nút “Thoat” (dừng chương trình).
• Xử lý sự kiện cho nút “Ghi hoa don”: Ghi trên List xuống file HoaDon.txt theo mẫu sau (đường
ngang là các dấu “_” ):
HOA DON BAN LE
Ten KH: Nguyen Van Teo
Dia chi: 123 Tran Hung Dao - Q5
_____________________________________
CPU Intel 3.0G_115.0$_2_230.0$
MB Asus 845_76.0$_3_228.0$
HDD SG 200G_120.0$_5_600.0$
FDD Mitsumi_6.5$_10_65.0$
DDRAM 256M_22.5$_6_135.0$

_____________________________________
Tong cong: 1258.0$
o0o
(Hết)
GVHD: ĐỖ NHƯ TÀI - LUT Trang 25

×