Thực hành ngôn ngữ lập trình Java
Bạn đang xem 20 trang mẫu của tài liệu "Thực hành ngôn ngữ lập trình Java", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- thuc_hanh_ngon_ngu_lap_trinh_java.doc
Nội dung text: Thực hành ngôn ngữ lập trình Java
- 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: ax2 + 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 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. S1 = 1 + 2 + 3 + + n. n+1 b. S2 = 1 – 2 + 3 - + (-1) n. Bài 12.Dãy số Fibonacy được xác định như sau: F1 = F2 = 1 Fn = Fn-1 + Fn-2 (n>2) Nhập vào số nguyên n. Hãy tính Fn. 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); } 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. GVHD: ĐỖ NHƯ TÀI - LUT Trang 2
- Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java 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 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 " : " "; 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 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) { GridBagLayoutDemo1 gridBagLayoutDemo11 = new GridBagLayoutDemo1(); GVHD: ĐỖ NHƯ TÀI - LUT Trang 19
- Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java } } 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); this.setSize(430, 300); GVHD: ĐỖ NHƯ TÀI - LUT Trang 20
- Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java 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); this.setSize(430, 300); GVHD: ĐỖ NHƯ TÀI - LUT Trang 21
- Lập trình JAVA (10 – 2010) Ngôn ngữ lập trình Java 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