Bài giảng Lập trình Java - Lê Đình Thanh

pdf 136 trang Gia Huy 17/05/2022 1980
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Lập trình Java - Lê Đình Thanh", để 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:

  • pdfbai_giang_lap_trinh_java_le_dinh_thanh.pdf

Nội dung text: Bài giảng Lập trình Java - Lê Đình Thanh

  1. Bài gi ng LP TRÌNH JAVA Lê ðình Thanh B mơn Mng và Truy n thơng Máy tính Khoa Cơng ngh Thơng tin Tr ưng ði hc Cơng ngh , ðHQGHN Lê ðình Thanh, Cơ bn v Java Bài 1 Cơ bn v Java Lê ðình Thanh, Cơ bn v Java
  2. Ni dung •Lp trình vi Java • Mơi tr ưng • Các phiên bn • Ki u d li u • Bi n, mng • Tốn t • Kh i lnh Lê ðình Thanh, Cơ bn v Java Lp trình vi Java Text Byte code Binary Java là ngơn ng lp trình hưng đi tưng đưc phát tri n bi Sun, nay thu c Oracle •Mnh m •Phân tán •ða lu ng •ðc lp nn •Kh chuy n •An ninh cao •Hi u năng cao Lê ðình Thanh, Cơ bn v Java
  3. Mơi tr ưng • JRE (Java Runtime Environment) bao gm • MáyJava o (JVM – Java Virtual Machine), • Th ư vi n các lp th c thi •B kh i đng ng dng Java cn thi t đ ch y ng dng vi t bng java. Lê ðình Thanh, Cơ bn v Java Mơi tr ưng • JDK (Java Development Kit) bao gm • Các cơng c đ phát tri n ng dng Java nh ư cơng c biên dch, g li, ch y ng dng hay cơng c vi t tài li u, cơng c tri u gi t xa, • JRE • Th ư vi n cn cho các cơngc phát tri n • Các tp tiêu đ C (.h) đ lp trình mã native • Các ch ươ ng trình mu s dng Java API • Các applet và ng dng mu • Mã ngu n ca JDK Lê ðình Thanh, Cơ bn v Java
  4. Mơi tr ưng • IDE (Integrated Development Environment) • Là mơi tr ưng tích hp cho phép lp trình, dch, g li, ki m th các ng dng • Liên kt s dng JDK • Cung cp trình so n th o, cơng c thi t k tr c quan, cơng c qu n lý mã ngu n, tích hp CSDL, Lê ðình Thanh, Cơ bn v Java Các phiên bn Java SE : cho phát tri n ng dng Desktop Java EE : cho phát tri n ng dng phía Server Java ME : cho phát tri n ng dng trên thi t b di đng, cm tay JavaFX : cho phát tri n ng dng web Lê ðình Thanh, Cơ bn v Java
  5. Ki u d li u • byte : nguyên cĩ du, 8-bit • short : nguyên cĩ du, 16-bit • int : nguyên cĩ du, 32-bit • long : nguyên cĩ du, 64-bit • float : th c, 32-bit • fouble : th c, 64-bit • char : 16-bit Unicode • boolean : true/false • String : xâu ký t (lp) Lê ðình Thanh, Cơ bn v Java Bi n • Bi n th hi n: Tr ưng khơng tĩnh • Bi n lp: Tr ưng tĩnh (static) • Bi n cc b: ðưc khai báo, s dng trong ph ươ ng th c • Tham s: ðu vào ca ph ươ ng th c • Tên: bao gm ch cái, s, _, $, khơng bt đu bng s, phân bi t ch hoa-th ưng. • Khai báo: Ki u_d _li u Tên_bi n [= Giá_tr ] [, ] ; Lê ðình Thanh, Cơ bn v Java
  6. Mng • Khai báo: Ki u[] tên_m ng; Ki u[] tên_m ng = new Ki u[s _ph n_t ]; • Truy cp ph n t: Tên_m ng[ch _s ]; • Ví d: int[] a, float b[] = float[100]; a = int[500]; Lê ðình Thanh, Cơ bn v Java Tốn t Tốn t Cú pháp Hu t expr ++ expr Mt ngơi ++ expr expr +expr -expr ~ ! Nhân, chia, dư * / % Cng tr + - Dch bit > >>> Quan h = instanceof Bng nhau == != Và bít & Ho c lo i tr (XOR) ^ bít Ho c bít | Và logic && Ho c logic || Ba ngơi ? : Gán = += -= *= /= %= &= ^= |= >= >>>= Lê ðình Thanh, Cơ bn v Java
  7. Ghi chú • // ghichútrênmt dịng • /* ghi chú • trên • nhi u dịng */ Lê ðình Thanh, Cơ bn v Java Kh i lnh •Tp các lnh đưc đt gi a { và } • Ví d: Lê ðình Thanh, Cơ bn v Java
  8. Cu trúc điu khi n • Tu n t: lnh vi t tr ưc đưc th c hi n tr ưc •R nhánh: • if • switch •Lp: • for • while, do-while Lê ðình Thanh, Cơ bn v Java if if ( điu_ki n) lnh/kh i_l nh [else lnh_khác/kh i_l nh_khác] Ví d: if (testscore >= 90) { grade = 'A'; } else if (testscore >= 80) { grade = 'B'; } else if (testscore >= 70) { grade = 'C'; } else if (testscore >= 60) { grade = 'D'; } else { grade = 'F'; } Lê ðình Thanh, Cơ bn v Java
  9. switch switch (bi u_th c) { case giá_tr _1: các lnh 1 case giá_tr _2: các lnh 2 [default: các lnh] } • Bi u th c và các giá tr cĩ ki u byte, short, int ho c char •Lnh break s đư a ch ươ ng trình thốt kh i switch Lê ðình Thanh, Cơ bn v Java switch switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: numDays = 31; break; case 4: case 6: case 9: case 11: numDays = 30; break; case 2: if ( ((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0) ) numDays = 29; else numDays = 28; break; default: System.out.println("Invalid month."); break; } Lê ðình Thanh, Cơ bn v Java
  10. while while ( điu_ki n) lnh/kh i_l nh Ví d: int count = 1; while (count < 11) { System.out.println("Count is: " + count); count++; } Chú ý: các lnh ca while cn đư a điu_ki n dn chuy n thành false nu khơng vịng lp s khơng dng. Lê ðình Thanh, Cơ bn v Java do-while do lnh/kh i_l nh while ( điu_ki n); Ví d: int count = 1; do { System.out.println("Count is: " + count); count++; } while (count <= 11); Chú ý: các lnh ca do-while cn đư a điu_ki n dn chuy n thành false nu khơng vịng lp s khơng dng. Lê ðình Thanh, Cơ bn v Java
  11. for for (kh i_t o; điu_ki n; lnh) lnh/kh i lnh for(int i=1; i<11; i++) { System.out.println("Count is: " + i); } Chú ý: lnh sau điu_ki n th ưng đưc dùng đ đư a điu_ki n dn chuy n thành false Kh i_t o hay lnh sau điu_ki n cĩ th là dãy các lnh cách nhau bi du ph y (,) Lê ðình Thanh, Cơ bn v Java Thay đi ho t đng lp Trong các cu trúc lp (for, while, do-while), s dng break đ kt thúc lp continue đ b qua vịng lp hi n ti Ví d: int i; boolean foundIt = false; for (i = 0; i < arrayOfInts.length; i++) { if (arrayOfInts[i] == searchfor) { foundIt = true; break; } } String searchMe = "peter piper picked a peck of pickled peppers"; int max = searchMe.length(); int numPs = 0; for (int i = 0; i < max; i++) {if (searchMe.charAt(i) != 'p') continue ; numPs++; } System.out.println("Found " + numPs + " p's in the string."); Lê ðình Thanh, Cơ bn v Java
  12. Mt s ví d • Xem mt s ch ươ ng trình mu Lê ðình Thanh, Cơ bn v Java Th c hành • Cài đt JDK, NetBeans IDE Lê ðình Thanh, Cơ bn v Java
  13. Ti p theo Lp và đi tưng Lê ðình Thanh, Cơ bn v Java
  14. Bài gi ng LP TRÌNH JAVA Lê ðình Thanh B mơn Mng và Truy n thơng Máy tính Khoa Cơng ngh Thơng tin Tr ưng ði hc Cơng ngh , ðHQGHN Lê ðình Thanh, Lp và đi tưng trong Java Bài 2 Lp và đi tưng Lê ðình Thanh, Lp và đi tưng trong Java
  15. Ni dung • Khai báo lp • Khai báo tr ưng • Khai báo ph ươ ng th c – Ch ng ph ươ ng th c – Ph ươ ng th c to – Tham s • Khai báo đi tưng •S dng đi tưng • ði tưng this •Lp lng nhau • Gĩi lp • Ph m vi truy cp • Ki u li t kê Lê ðình Thanh, Lp và đi tưng trong Java Khai báo lp [public/private] class TênL ớp { //các tr ưng (field), //ph ươ ng th c to (constructor) //ph ươ ng th c khác (method) } Lê ðình Thanh, Lp và đi tưng trong Java
  16. Khai báo tr ưng Ph m_vi_truy_c p Ki u tên_trưng; public class Bicycle { private int cadence; private int gear; private int speed; } Ph m vi truy cp cĩ th là: public/private/ Lê ðình Thanh, Lp và đi tưng trong Java Khai báo ph ươ ng th c Ph m_vi_truy_c p Ki u tên_pt (danh_sách_tham_s ) { các lnh return bi u_th c nu Ki u khác void } public class Bicycle { public int speedUp(int increment) { speed += increment; return speed; } } Ph m vi truy cp cĩ th là: public/private/ Lê ðình Thanh, Lp và đi tưng trong Java
  17. Ch ng ph ươ ng th c Mt lp cĩ th cĩ nhi u ph ươ ng th c cùng (ch ng - overload) tên - Các ph ươ ng th c ch ng nhau ph i khác nhau v s lưng/ki u tham s. public class DataArtist { public void draw(String s) { } public void draw(int i) { } public void draw(double f) { } public void draw(int i, double f) { } } Lê ðình Thanh, Lp và đi tưng trong Java Ph ươ ng th c to Ph ươ ng th c to là mt ph ươ ng th c đc bi t - Cĩ tên trùng tên lp - Khơng cĩ ki u (ng m đnh ki u là lp) - ðưc gi ng m đnh khi đi tưng ca lp đưc to public class Bicycle { public int cadence; public int gear; public int speed; public Bicycle(int sCadence, int sSpeed, int sGear) { gear = sGear; cadence = sCadence; speed = sSpeed; } Lê ðình Thanh, Lp và đi tưng trong Java
  18. Tham s ca ph ươ ng th c Mt ph ươ ng th c cĩ th cĩ 0, 1 ho c nhi u tham s Tham s ca ph ươ ng th c cĩ th là bi n ho c mng public void moveCircle(Circle circle, int deltaX, int deltaY) { } public Polygon polygonFrom(Point [] corners) { } public Polygon polygonFrom(Point corners) { int numberOfSides = corners.length; } Lê ðình Thanh, Lp và đi tưng trong Java Khai báo đi tưng TênL p tên_đi_tưng = new Ph ươ ng_th c_t o(tham_s ) Point originOne = new Point(23, 94); Rectangle rectOne = new Rectangle(originOne, 100, 200); Rectangle rectTwo; //rectTwo == null rectTwo = new Rectangle(50, 100); //rectTwo != null Chú ý: Khi ch ưa gi ph ươ ng th c to và gán kt qu cho đi tưng, đi tưng ch mi cĩ tên và đang bng null Lê ðình Thanh, Lp và đi tưng trong Java
  19. S dng đi tưng Vi tr ưng và ph ươ ng th c thu c ph m vi truy cp • objectReference.fieldName; • objectReference.methodName(argumentList); Bicycle b = new Bicycle(12, 5, 6); b.speedUp(5) ; Lê ðình Thanh, Lp và đi tưng trong Java this Trong ph ươ ng th c ca lp, t khĩa this cĩ ngh ĩa “đi tưng hi n ti” ho c ph ươ ng th c to public Rectangle() { this(0, 0, 0, 0); } public Rectangle(int width, int height) { this(0, 0, width, height); } public Rectangle(int x, int y, int width, int height) { this.x = x; this.y = y; this.width = width; this.height = height; } Lê ðình Thanh, Lp và đi tưng trong Java
  20. Nhĩm các lp theo gĩi package p package p package q package s package q class A class C class A class B class B class D package s Các lp đưc t ch c qu n lý thành các gĩi (package) class C Gi a các gĩi cĩ quan h “ch a”: Gĩi p ch a gĩi q Gi a gĩi và lp cĩ quan h “ch a”: Gĩi p ch a lp C class D Quan h “ch a” gi a các gĩi và gi a gĩi vi lp to thành cây Lê ðình Thanh, Lp và đi tưng trong Java Tên gĩi và tên lp • Tên gĩi = Tên_gĩi_cha.Tên_gĩi_con package p • Tên lp = Tên_gĩi.Tên_l p package q p.q //gĩi q class A p.D //lớp D p.q.A //lớp A class B package s Khi khơng cĩ s nh p nh ng, cĩ th khơng class C cn dùng Tên_gĩi. tr ưc tên lp D tươ ng đươ ng p.D class D Lê ðình Thanh, Lp và đi tưng trong Java
  21. Tên gĩi và tên lp Các gĩi cùng gĩi cha, các l p cùng gĩi package p khơng đưc trùng tên nhau Các gĩi khác gĩi cha, các lp khác gĩi cĩ package q th trùng tên class A p.q.A khác p.A class B package s class B class A Lê ðình Thanh, Lp và đi tưng trong Java S dng lp trong gĩi • import TenGoi.TenLop; • import TenGoi.*; //tt c các lp trong gĩi • TenGoi.TenLop tenDoituong = new TenGoi.TenLop(); Lê ðình Thanh, Lp và đi tưng trong Java
  22. Ph m vi truy cp/tính kh ki n • Các lp và nh ng tr ưng, ph ươ ng th c ca lp đưc bo v tr ưc truy cp trái phép. • Ph m vi truy cp lp: • public : cĩ th đưc truy cp bi lp bt kỳ khác • private : ch cĩ th truy cp bi các lp cùng gĩi (mc đnh) • Ph m vi truy cp ph ươ ng th c và tr ưng: • public : cĩ th truy cp t lp bt kỳ thu c ph m vi truy cp ca lp ch a • private : khơng đưc truy cp t bt kỳ lp nào khác • protected : cĩ th truy cp bi các lp cùng gĩi và các lp con Lê ðình Thanh, Lp và đi tưng trong Java Các lp lng nhau •Mt lp cĩ th đưc ch a trong/thành viên ca mt lp khác •Lp trong, vi tư cách thành viên ca lp ch a, cĩ th truy cp mi thành ph n khác ca lp ch a, đưc che bi lp ch a •Lp trong cĩ th tĩnh (static) ho c khơng •Tĩnh: OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass(); • Khơng tĩnh: OuterClass.InnerClass innerObject = outerObject.new InnerClass(); class OuterClass { class InnerClass { } } Lê ðình Thanh, Lp và đi tưng trong Java
  23. Các lp lng nhau-Ví d public class EvenArray { private final static int SIZE = 15; private int[] arrayOfInts = new int[SIZE]; public EvenArray() { for (int i = 0; i < SIZE; i++) { arrayOfInts[i] = i; } } public void printEven() { InnerEvenIterator iterator = this.new InnerEvenIterator(); while (iterator.hasNext()) { System.out.println(iterator.getNext() + " "); } } private class InnerEvenIterator { private int next = 0; public boolean hasNext() {return (next <= SIZE - 1); } public int getNext() { int retValue = arrayOfInts[next]; next += 2; return retValue; } } public static void main(String s[]) { EvenArray ds = new EvenArray(); ds.printEven(); } } Lê ðình Thanh, Lp và đi tưng trong Java Ki u li t kê • Li t kê là mt ki u d li u ch bao gm hu hn các giá tr hng public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY } Day day; switch (day) { case MONDAY: System.out.println("Mondays are bad."); break; } •Tt c ki u li t kê đưc ng m đnh k th a t java.lang.Enum. Lê ðình Thanh, Lp và đi tưng trong Java
  24. Ti ếp theo Giao di n và k th a Lê ðình Thanh, Lp và đi tưng trong Java
  25. Bài gi ng LP TRÌNH JAVA Lê ðình Thanh B mơn Mng và Truy n thơng Máy tính Khoa Cơng ngh Thơng tin Tr ưng ði hc Cơng ngh , ðHQGHN Lê ðình Thanh, Giao di n và k th a Bài 3 Giao di n, k th a Lê ðình Thanh, Giao di n và k th a
  26. Ni dung • Giaodi n •K th a • ða hình •Lp o, ph ươ ng th c o Lê ðình Thanh, Giao di n và k th a Giao di n • Giao di n là ph ươ ng ti n đ giao ti p • ð “lp ghép” các mơ đun ph n mm đưc vi nhau, các mơ đun ph i “kh p” vi nhau v giao di n. •Ti sao cn giao di n? •Mi nhĩm phát tri n mt s mơ đun, khơng ph i quan tâm đn mã bên trong ca các mơ đun do nhĩm khác phát tri n, ch cn các nhĩm thơng nh t vi nhau v giao di n • Phát tri n các mơ đun x lý chuyên nghi p và bán cho các nhà phát tri n ph n mm, ví d th ư vi n đ ha. Lê ðình Thanh, Giao di n và k th a
  27. Giao di n trong Java • ðưc đnh ngh ĩa tươ ng t lp, nh ưng ch bao gm các hng s và ch ký ph ươ ng th c. KHƠNG cĩ thân ph ươ ng th c. • Khơngcĩth hi n. • Ch đưc cài đt và m rng. public interface OperateCar { // khai báo hng, nu cĩ // ch ký các ph ươ ng th c int turn(Direction direction, double radius, double startSpeed, double endSpeed); int signalTurn(Direction direction, boolean signalOn); } Lê ðình Thanh, Giao di n và k th a Cài đt giao di n •Mt lp cĩ th cài đt nhi u giao di n public class OperateBMW760i implements OperateCar { // cài đt thân các ph ươ ng th c int signalTurn(Direction direction, boolean signalOn) { //bt/t t đèn trái //bt/t t đèn ph i } // các ph ươ ng th c khác khơng cài đt ph ươ ng th c ca giao di n } Lê ðình Thanh, Giao di n và k th a
  28. M rng giao di n •Mt giao di n cĩ th m rng nhi u giao di n khác public interface GroupedInterface extends Interface1, Interface2, Interface3 { double E = 2.718282; void doSomething (int i, double x); int doSomethingElse(String s); } Lê ðình Thanh, Giao di n và k th a S dng giao di n • Giao di n đưc s dng nh ư mt ki u • Các đi tưng gán cho bi n giao di n ph i thu c lp cài đt giao di n public interface I {} public class A implements I {} public class B {} A a = new A(); B b = new B(); I i = (I) a; // đúng I i2 = (I) b; //sai Lê ðình Thanh, Giao di n và k th a
  29. K th a •Mt lp cĩ th đưc dn xu t (derived) t lp khác, và do vy k th a (inherit) mi tr ưng và ph ươ ng th c ca lp đĩ •Lp đưc k th a đưc gi là lp cha (superclass, parent class) ho c lp cơ s (base class) •Lp k th a đưc gi là lp con (subclass, child class) ho c lp dn xu t (derived class) ho c lp m rng (extended class) •Trong java, tt c các lp đu đưc dn xu t t Object. Quan h k th a to thành cây hay cu trúc phân cp. Lê ðình Thanh, Giao di n và k th a K th a và tính kh ki n •K th a và tính kh ki n •Nu lp cha và lp con trong cùng gĩi, lp con k th a MI tr ưng/phươ ng th c public, protected và package-private ca lp cha •Nu lp cha và lp con các gĩi khác nhau, lp con k th a các tr ưng/phươ ng th c public và protected. •Lp con khơng k th a các tr ưng/phươ ng th c private t lp cha Lê ðình Thanh, Giao di n và k th a
  30. Ch ng/che tr ưng/phươ ng th c • Tr ưng lp con cùng tên tr ưng ca lp cha s che tr ưng ca lp cha. • Ph ươ ng th c tĩnh ca lp con cĩ ch ký trùng ph ươ ng th c tĩnh ca lp cha s che ph ươ ng th c lp cha • Ph ươ ng th c khơng tĩnh ca lp con cĩ ch ký trùng ph ươ ng th c khơng tĩnh ca lp cha s ch ng ph ươ ng th c lp cha Lê ðình Thanh, Giao di n và k th a Chuy n ki u trong s dng đi tưng • Cĩ th s dng đi tưng lp cha đ tham chi u đn mt đi tưng lp con (chuy n ki u ng m đnh) • Object obj = new MountainBike(); • Bicycle byc = new MountainBike(); • Khơng đưc s dng đi tưng lp con đ tham chi u đn đi tưng lp cha • MountainBike mbike = new Bicycle(); //sai •Nu mu n s dng đi tưng lp con đ tham chi u đn đi tưng lp cha đang tham chi u đn đi tưng lp con, ph i cĩ lnh chuy n ki u rõ ràng • MountainBike mbike2 = byc; //li • MountainBike mbike3 = (MountainBike) byc; //ok nu byc đang tham chi u đn đi tưng MountainBike. Lê ðình Thanh, Giao di n và k th a
  31. Ki m tra ki u ca mt đi tưng • if (obj instanceof Class) if (obj instanceof MountainBike) { MountainBike myBike = (MountainBike) obj; } Lê ðình Thanh, Giao di n và k th a ða hình • ða hình (polymorphism): Nhi u dng/ki u khác nhau ca mt đi tưng. • Ch ng ph ươ ng th c, chuy n ki u ng m đnh là cơ s ca đa hình • ff Bicycle bike01, bike02, bike03; bike01 = new Bicycle(20, 10, 1); bike02 = new MountainBike(20, 10, 5, "Dual"); bike03 = new RoadBike(40, 20, 8, 23); bike01.printDescription(); bike02.printDescription(); bike03.printDescription(); Lê ðình Thanh, Giao di n và k th a
  32. super – ði di n ca lp cha •T khĩa super đưc s dng trong cài đt lp con đ th c hi n các vi c sau: • Truy cp các ph ươ ng th c ca lp cha đã b ch ng • Truy cp các tr ưng ca lp cha đã b che • Thaychoph ươ ng th c to lp cha public class Superclass { public void printMethod() { System.out.println("Printed in Superclass."); } } public class Subclass extends Superclass { public void printMethod() { super .printMethod(); System.out.println("Printed in Subclass"); }} public class SubSubClass extends Subclass { public void printMethod() { //Hi: Gi printMethod() ca Superclass nh ư th nào? } Lê ðình Thanh, Giao di n và k th a super – ði di n ca lp cha •T khĩa super đưc s dng trong cài đt lp con đ th c hi n các vi c sau: • Truy cp các ph ươ ng th c ca lp cha đã b ch ng • Truy cp các tr ưng ca lp cha đã b che • Thay cho ph ươ ng th c to lp cha public MountainBike(int startHeight, int startCadence, int startSpeed, int startGear) { super (startCadence, startSpeed, startGear); seatHeight = startHeight; } Nu ph ươ ng th c to ca lp con khơng gi ph ươ ng th c to ca lp cha mt cách rõ ràng thì ph ươ ng th c to khơng đi super() ca lp cha đưc gi ng m đnh. Lê ðình Thanh, Giao di n và k th a
  33. final – Ng ăn vi c k th a và ch ng • ð ch đnh mt ph ươ ng th c khơng th b ch ng lp con, s dng t khĩa final tr ưc ch ký ph ươ ng th c •Cn thi t cho ph ươ ng th c khơng nên thay đi mã đ đm bo tính nh t quán • ð ch mt lp khơng th k th a, s dng t khĩa final tr ưc đnh ngh ĩa lp •Cn đ to các lp bt bi n, ví d String class ChessAlgorithm { enum ChessPlayer { WHITE, BLACK } final ChessPlayer getFirstPlayer() { return ChessPlayer.WHITE; } } Lê ðình Thanh, Giao di n và k th a Lp o, ph ươ ng th c o •Lp o là lp đưc đnh ngh ĩa vi t khĩa abstract. Lp o khơng cĩ th hi n. •S dng làm lp cha • Ph ươ ng th c o là ph ươ ng th c đưc đnh ngh ĩa vi t khĩa abstract và khơng cĩ cài đt • Cài đt ph ươ ng th c o đưc th c hi n lp con vi ph ươ ng th c ch ng •Nu lp con vn khơng cài đt thì ph ươ ng th c ch ng cũng ph i là o •Lp ch a ph ươ ng th c o ph i là lp o Lê ðình Thanh, Giao di n và k th a
  34. S dng lp o • Khi cĩ nhi u lp gi ng nhau mt s tr ưng và ph ươ ng th c (c ch ký và thân), và cĩ mt s ph ươ ng th c cùng ch ký nh ưng nh ưng khác nhau v thân •To lp cơ s o vi • Các tr ưng và ph ươ ng th c chung đưc đnh ngh ĩa bình th ưng • Các ph ươ ng th c gi ng nhau ch ký nh ưng khác thân là các ph ươ ng th c o Lê ðình Thanh, Giao di n và k th a Lp o, ph ươ ng th c o – Ví d abstract class GraphicObject { int x, y; void moveTo(int newX, int newY) {x = newX; y = newY; } abstract void draw(); abstract void resize(); } class Circle extends GraphicObject { void draw() { } void resize() { } } class Rectangle extends GraphicObject { void draw() { } void resize() { } } Lê ðình Thanh, Giao di n và k th a
  35. Câu hi ki m tra public class ClassA { public void methodOne(int i) { } public void methodTwo(int i) { } public static void methodThree(int i) { } public static void methodFour(int i) { } } public class ClassB extends ClassA { public static void methodOne(int i) { } public void methodTwo(int i) { } public void methodThree(int i) { } public static void methodFour(int i) { } } • Ph ươ ng th c nào ch ng ph ươ ng th c lp cha? • Ph ươ ng th c nào che ph ươ ng th c lp cha? •Vn đ gì vi các ph ươ ng th c khác? Lê ðình Thanh, Giao di n và k th a Ti ếp theo S và xâu Lê ðình Thanh, Giao di n và k th a
  36. Bài gi ng LP TRÌNH JAVA Lê ðình Thanh B mơn Mng và Truy n thơng Máy tính Khoa Cơng ngh Thơng tin Tr ưng ði hc Cơng ngh , ðHQGHN Lê ðình Thanh, S và xâu Bài 4 S và xâu Lê ðình Thanh, S và xâu
  37. Ni dung • Các lp s •Lp Math •Lp String •Lp StringBuilder Lê ðình Thanh, S và xâu Các lp s • Java cungcp các lp bao các ki u d li u s nguyên th y vi nh ng ph ươ ng th c x lý s mt cách ti n li, hi u qu • Boxes : bao giá tr s nguyên th y vào đi tưng Integer x, y; x = 12; y = 15; • Unboxes : ly giá tr s nguyên th y t đi tưng System.out.println(x+y); Lê ðình Thanh, S và xâu
  38. Lp Math • java.lang.Math cungcp hai hng s E và PI cùng hàng lo t các ph ươ ng th c tĩnh là các hàm s hc nh ư sin, cos, sqrt, log, pow, •S dng: import java.lang.Math; Math.cos(angle); ho c import static java.lang.Math; cos(angle); Lê ðình Thanh, S và xâu Character • Character là lp bao ca ki u d li u ký t, cung cp các ph ươ ng th c x lý ký t hi u qu : boolean isLetter (char ch) - Là ch cái boolean isDigit (char ch) – Là ch s boolean isWhitespace (char ch) – Là du cách boolean isUpperCase (char ch) – Là ch hoa boolean isLowerCase (char ch) – Là ch th ưng char toUpperCase (char ch) – Chuy n thành ch hoa char toLowerCase (char ch) – Chuy n thành ch th ưng String toString (char ch) – Chuy n thành xâu ký t Lê ðình Thanh, S và xâu
  39. Các ký t đc bi t • \t Tab • \b Du cách • \n Xu ng dịng • \r carriage return • \f formfeed. • \‘ Nháy đơ n • \“ Nháy kép • \\ Chéotrái. Lê ðình Thanh, S và xâu String • Xâu ký t: dãy các ký t đưc đt trong cp nháy kép • Ví d: "Hello world!" • Java cungcp lp String đ x lý xâu • String greeting = "Hello world!"; //boxed • System.out.print(greeting); //unboxed • int len = greeting.length(); // đ dài • greeting. concat (“ My name is ”); //ni xâu • == “Hello world!” + “ My name is ” • String String. format (fmt, ); //tươ ng t System.out.print, ch khác “thi t b ra” là mt đi tưng String Lê ðình Thanh, S và xâu
  40. Chuy n đi xâu và s • Xâu thành s n = XXX.parseXXX(s); //XXX là tên lp s nh ư Integer, Float •S thành xâu s = n.toString(); Lê ðình Thanh, S và xâu X lý xâu • String anotherPalindrome = "Niagara. O roar again!"; • char aChar = anotherPalindrome. charAt (9); // O • String substring (int beginIndex, [int endIndex]) Lê ðình Thanh, S và xâu
  41. X lý xâu • String[] split(String regex) String[] split(String regex, int limit) • CharSequence subSequence(int beginIndex, int endIndex) • String trim() • String toLowerCase() • String toUpperCase() Lê ðình Thanh, S và xâu Tìm ki m trong xâu • int indexOf(int ch) • int lastIndexOf(int ch) • int indexOf(int ch, int fromIndex) • int lastIndexOf(int ch, int fromIndex) • int indexOf(String str) • int lastIndexOf(String str) • int indexOf(String str, int fromIndex) • int lastIndexOf(String str, int fromIndex) • boolean contains(CharSequence s) Lê ðình Thanh, S và xâu
  42. Sa đi xâu • String replace(char oldChar, char newChar) • String replace(CharSequence target, CharSequence replacement) • String replaceAll(String regex, String replacement) • String replaceFirst(String regex, String replacement) Lê ðình Thanh, S và xâu So sánh xâu • boolean endsWith(String suffix) • boolean startsWith(String prefix) • boolean startsWith(String prefix, int offset) • int compareTo(String anotherString) • int compareToIgnoreCase(String str) • boolean equals(Object anObject) • boolean equalsIgnoreCase(String anotherString) • boolean regionMatches(int toffset, String other, int ooffset, int len) • boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) • boolean matches(String regex) Lê ðình Thanh, S và xâu
  43. StringBuilder (*) •X lýcácxâu kýt vi vi c lưu tr xâu nh ư mt mng các ký t • Cung cp các ph ươ ng th c x lý xâu hi u qu • append( ) • insert( ) • delete( ) • replace( ) • reverse( ) • setCharAt( ) • capacity() • StringBuilder(CharSequence cs) • StringBuilder(int initCapacity) • StringBuilder(String s) Lê ðình Thanh, S và xâu (*) T hc Ti ếp theo Ki u chung Lê ðình Thanh, S và xâu
  44. Bài gi ng LP TRÌNH JAVA Lê ðình Thanh B mơn Mng và Truy n thơng Máy tính Khoa Cơng ngh Thơng tin Tr ưng ði hc Cơng ngh , ðHQGHN Lê ðình Thanh, Ki u chung Bài 5 Ki u chung Lê ðình Thanh, Ki u chung
  45. Ni dung • Các li lp trình • Ki u chung • Ph ươ ng th c chung Lê ðình Thanh, Ki u chung Li lp trình •Li lp trình (bug), th ưng xuyên gp trong quá trình phát tri n ph n mm, đưc chia làm hai lo i: •Li khi dch (compile-time bugs): Các trình dch cĩ th ch ra các li này và lp trình viên ph i sa (debug) tr ưc khi ph n mm ch y đưc. •Li khi ch y (runtime bugs): Li khơng th phát hi n đưc khi dch mà ch đưc phát hi n khi ch y. •Mt trong nh ng nguyên nhân gây li khi ch y là s dng SAI KI U. • Ki u tng quát đưc đư a vào java nh m phát hi n các li s dng sai ki u ngay khi dch. Lê ðình Thanh, Ki u chung
  46. Ví d v li khi ch y public class Box { private Object object; public void add(Object object) { this.object = object; } public Object get() { return object; } } public class BoxDemo1 { public static void main(String[] args) { Box abox = new Box(); abox.add("10"); Integer anotherbox = (Integer) abox.get(); System.out.println( anotherbox ); } Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer at } BoxDemo1.main(BoxDemo1.java:6) Lê ðình Thanh, Ki u chung Ki u chung – Generic Type public class Box { private T object; public void add( T object) { this.object = object; } public T get() { return object; } } public class BoxDemo2 { public static void main(String[] args) { Box abox = new Box (); abox.add(new Integer(10)); Integer anotherbox = abox.get(); System.out.println(anotherbox); } } Lê ðình Thanh, Ki u chung
  47. Ki u chung • Ki u đưc s dng nh ư mt tham s public class Box { } Box abox = new Box (); Lê ðình Thanh, Ki u chung Phát hi n li nh ki u chung public class Box { private T object; public void add( T object) { this.object = object; } public T get() { return object; } } public class BoxDemo3 { public static void main(String[] args) { Box abox = new Box (); abox.add("10"); Integer anotherbox = (Integer) abox.get(); System.out.println(anotherbox); } BoxDemo3.java:5: add(java.lang.Integer) in Box cannot be applied to } (java.lang.String) abox.add("10"); Lê ðình Thanh, Ki u chung ^ 1 error
  48. Ph ươ ng th c chung • Là ph ươ ng th c cĩ tham s ki u chung public void inspect(U u){ System.out.println("U: " + u.getClass().getName()); } public static void fillBoxes(U u, List > boxes) { for (Box box : boxes) { box.add(u); } } Crayon red = ; List > crayonBoxes = ; Box. fillBoxes(red, crayonBoxes); //ho c Box.fillBoxes(red, crayonBoxes); Lê ðình Thanh, Ki u chung Tham s ki u đưc gi i hn • Là ph ươ ng th c cĩ tham s ki u chung public void inspect(U u){ System.out.println("U: " + u.getClass().getName()); } abox.inspect("some text"); Box.java:21: inspect(U) in Box cannot be applied to (java.lang.String) abox.inspect(“some text"); ^ 1 error Lê ðình Thanh, Ki u chung
  49. Ti ếp theo Các lp thi t yu Lê ðình Thanh, Ki u chung
  50. Bài gi ng LP TRÌNH JAVA Lê ðình Thanh B mơn Mng và Truy n thơng Máy tính Khoa Cơng ngh Thơng tin Tr ưng ði hc Cơng ngh , ðHQGHN Lê ðình Thanh, Các lp thi t yu trong Java Bài 6 Các lp thi t yu Lê ðình Thanh, Các lp thi t yu trong Java
  51. Ni dung •X lý ngo i l • Vào, ra cơ bn •X lý đng th i • Mơi tr ưng • Bi u th c chính quy Lê ðình Thanh, Các lp thi t yu trong Java Ngo i l • Ngo i l (exception hay exceptional event) là s ki n xy ra trong khi th c thi ch ươ ng trình và phá v lu ng điu khi n ca ch ươ ng trình. • Khi li xu t hi n • Ph ươ ng th c xu t hi n li to đi tưng ngo i l (exception object) ch a thơng tin v li và gi cho h th ng th c thi (runtime system). Vi c to và gi đi tưng ngo i l cho h th ng th c thi đưc gi là ném (throw) ngo i l. •H th ng th c thi tìm ng ưc chu i tri u gi (call stack) ph ươ ng th c đ tìm ra ph ươ ng th c ch a đon mã x lý ngo i l (exception handler) • ðon mã x lý ngo i l bt (catch ) ngo i l và x lý Lê ðình Thanh, Các lp thi t yu trong Java
  52. X lý ngo i l Call Stack Searching the call stack for the exception handler Lê ðình Thanh, Các lp thi t yu trong Java Bt và x lý ngo i l try { //mã ch ươ ng trình x lý nghi p v } catch (ExceptionType1 e) { //mã x lý ngo i l nu ngo i l thu c ki u ExceptionType1 } [catch (ExceptionType2 e) { //mã x lý ngo i l nu ngo i l thu c ki u ExceptionType2 } finally { //mã th c thi bt k ngo i l xy ra hay khơng }] Lê ðình Thanh, Các lp thi t yu trong Java
  53. Bt và x lý ngo i l Mã đưc th c thi Kt qu in ra màn hình Entering try statement Closing PrintWriter Lê ðình Thanh, Các lp thi t yu trong Java Bt và x lý ngo i l Mã đưc th c thi Kt qu in ra màn hình Entering try statement Caught IOException: OutFile.txt PrintWriter not open Lê ðình Thanh, Các lp thi t yu trong Java
  54. Bt và x lý ngo i l FileWriter Ném FileWriter Tìm handler Chuy n PrintWriter ti p PrintWriter Tìm handler writeList Bt writeList main main Call Stack Lê ðình Thanh, Các lp thi t yu trong Java Ném ngo i l •Mi ngo i l đu ph i đưc phát sinh mt ph ươ ng th c tr ưc khi đưc chuy n ti p và bt các ph ươ ng th c tri u gi •Mt ph ươ ng th c cĩ th phát sinh ngo i l và ph ươ ng th c tri u gi cĩ th bt và x lý • Áp dng khi vi t gĩi, ví d gĩi x lý danh sách. • ð ng ưi vi t ng dng cĩ th x lý theo ý ca h public Object pop() { Object obj; if (size == 0) { throw new EmptyStackException(); } obj = objectAt(size - 1); setObjectAt(size - 1, null); size ; return obj; Lê} ðình Thanh, Các lp thi t yu trong Java
  55. Chuy n ti p ngo i l •Mt ph ươ ng th c cĩ th khơng bt và x lý ngo i l mà chuy n ti p cho ph ươ ng th c đã tri u gi nĩ (ph ươ ng th c li n tr ưc trong chu i tri u gi) • Áp dng khi vi t gĩi, ví d gĩi x danh sách. • ð ng ưi vi t ng dng cĩ th x lý theo ý ca h public void writeList() throws IOException, ArrayIndexOutOfBoundsException { PrintWriter out = new PrintWriter(new FileWriter("OutFile.txt")); for (int i = 0; i < SIZE; i++) { out.println("Value at: " + i + " = " + vector.elementAt(i)); } out.close(); } Lê ðình Thanh, Các lp thi t yu trong Java Các lp ném đưc • Các lp Error đnh ngh ĩa các s c nghiêm tr ng, thu c JVM. Các ng dng th ưng khơng ném và bt Error • Các lp Exception đnh ngh ĩa các ngo i l khi vi t gĩi Lê ðình Thanh, Các lp thi t yu trong Java
  56. ðnh ngh ĩa lp ngo i l • ðnh ngh ĩa lp ngo i l ng vi các ngo i l phát sinh trong lp đưc đnh ngh ĩa •K th a t lp Exception Ví d, lp LinkedList vi các ph ươ ng th c objectAt(int n) —Ly đi tưng v trí th n – Ném ngo i l InvalidIndexException nu n = size. firstObject() —Ly đi tưng đu tiên – Ném ngo i l EmptyListException khi danh sách rng. indexOf(Object o) — Tìm đi tưng – Ném ngo i l ObjectNotFoundException nu khơng tìm th y. Lê ðình Thanh, Các lp thi t yu trong Java Li ích ca s dng ngo i l • Tách mã x lý li vi các mã x lý nghi p v • Chuy n ti p li lên các ph ươ ng th c trên • Phânnhĩmcácli Lê ðình Thanh, Các lp thi t yu trong Java
  57. Vào/ra cơ bn • Các dịng vào/ra (I/O Streams) • Vào/ra vi tp (File I/O) Lê ðình Thanh, Các lp thi t yu trong Java Các dịng vào/ra •Mt dịng vào/ra (I/O stream) bi u di n mt ngu n vào/đích ra d li u • Cĩth bi u di n nhi u ngu n/đích khác nhau: b đm, tp, thi t b, ch ươ ng trình khác. •H tr nhi u ki u d li u khác nhau: byte, d li u nguyên th y, đi tưng • Ph ươ ng th c cơ bn: read()/write(data) Lê ðình Thanh, Các lp thi t yu trong Java
  58. Byte streams • Bi u di n dịng d li u gm các bytes liên ti p • Dịng vào: XXX InputStream , ph ươ ng th c đc byte read() • Dịng ra: XXX OutputStream , ph ươ ng th c ghi write(byte) FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("xanadu.txt"); out = new FileOutputStream("outagain.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } Lê ðình Thanh, Các lp thi t yu trong Java Character Streams • Bi u di n dịngcác kýt liên ti p •T đng chuy n đi các mã thành Unicode • Dịng vào: XXX InputReader , ph ươ ng th c đc int read() • Dịng ra: XXX OutputWriter , ph ươ ng th c ghi write( int ) • Mã ký t đưc lưu 16 bit th p ca int FileReader in = null; FileWriter out = null; try { in = new FileReader("xanadu.txt"); out = new FileWriter("outagain.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } Lê ðình Thanh, Các lp thi t yu trong Java
  59. ðc/ghi theo dịng • Character stream th ưng ch a ni dung ca c văn bn: gm nhi u dịng (lines) văn bn •Mt line là mt chu i ký t kt thúc bng ký t xu ng dịng: ‘\r\n’, ‘\n’ ho c ‘\r’. • ðc/ghi c dịng văn bn là ph ươ ng pháp hi u qu hơn đc tng ký t BufferedReader in = null; PrintWriter out = null; try { in = new BufferedReader(new FileReader("xanadu.txt")); out = new PrintWriter(new FileWriter("outagain.txt")); String l; while ((l = in. readLine ()) != -1) { out. println (l); } } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } Lê ðình Thanh,} Các lp thi t yu trong Java Buffered Streams • Cácdịngkhơng đm (unbuffered) nh ư FileInputStream, FileReader, làm vi c tr c ti p viHðH , các thao tác đc ghi đưc qu n lý tr c ti p biHðH • Thao tác đc: đc t thi t b • Thao tác ghi: ghi ngay ra thi t b • Khơnghi u qu vì nhi u ln ph i truy cp đĩa, mng, • Gi i pháp: S dng dịng đm (buffered) đ đc/ghi c kh i => ít ln truy cp ph n cng • ðc: Khi vùng đm rng, đc t ngu n vào đy đm • Ghi: Khi vùng đm đy, ghi tt c vào đích •Nu cn ch đng ghi ra đích khi ch ưa đy đm: Gi flush() • Các lp: BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter Lê ðình Thanh, Các lp thi t yu trong Java
  60. Scanner • Cung cp các ph ươ ng th c đ đc tng t t (token) trong character stream, phân lo i t t (s nguyên, s th p phân, ) •T t đơ n thu n là xâu ký t. Character stream là dãy liên ti p các t t và các t phân cách (separator/delimiter). Gi a hai t phân cách liên ti p là mt t t. Gi a hai t t cĩ th cĩ nhi u t phân cách. •Mc đnh, du tr ng (blank, tab, du câu, ) đưc dùng làm t phân cách. • ð ki m tra mt ký t cĩ ph i là du tr ng hay khơng Character.isWhitespace . • Mu n s dng t phân cách khác, s dng ph ươ ng th c useDelimiter(",\\s*") Lê ðình Thanh, Các lp thi t yu trong Java Scanner • ðc các t t import java.io.*; import java.util.Scanner; Scanner s = null; try { s = new Scanner(new BufferedReader(new FileReader("xanadu.txt"))); while (s. hasNext ()) { System.out.println(s. next ()); } } finally { if (s != null) { s.close(); } } Lê ðình Thanh, Các lp thi t yu trong Java
  61. Scanner • ðc t t đưc phân lo i s.useLocale(Locale.US); while (s.hasNext()) { if (s.hasNextDouble()) { sum += s.nextDouble(); } else { s.next(); } } Lê ðình Thanh, Các lp thi t yu trong Java Printing and Formatting • Hai lp cơ s th c cung cp ph ươ ng th c print, println và format là • PrintWriter: mt chacracter stream • PrintSteam: mt byte stream • print và println • Cĩ mt tham s cĩ ki u nguyên th y • Bi n đi mt giá tr thành xâu và in xâu int i = 2; double r = Math.sqrt(i); System.out.print("The square root of "); System.out.print(i); System.out.print(" is "); System.out.print(r); System.out.println("The square root of " + i + " is " + r + "."); Lê ðình Thanh, Các lp thi t yu trong Java
  62. Printing and Formatting • format • Cĩ mt ho c nhi u tham s bt kỳ • Tham s đu tiênlà xâu ký t cĩ th ch a ký t đnh dng (%d, %f, %s, ) • Các tham s ti p theo cĩ ki u nguyên th y • Thay ký t đnh dng th i trong xâu tham s th nh t bng bi u di n giá tr tham s th i+1 theo đnh dng đưc xác đnh bi ký t đnh dng th i. Tr v xâu tham s th nh t đã đưc thaycác kýt đnh dng bng giá tr tham s phía sau. int i = 2; double r = Math.sqrt(i); System.out.format("The square root of %d is %f.%n", i, r); Lê ðình Thanh, Các lp thi t yu trong Java Vào/ra vi dịng lnh • Dịngvàochu n • System.in – là mt byte stream. ð dùng nh ư mt character stream, s dng lp bao InputStreamReader InputStreamReader cin = new InputStreamReader(System.in); • Dịngrachu n • System.out và System.err – là các byte streams nh ưng cĩ th mơ ph ng character stream • Bàngiaoti p • Console - s dng thay th cho các dịng vào/ra chu n vi các ph ươ ng th c thu n ti n hơn: readLine, readPassword, format, Lê ðình Thanh, Các lp thi t yu trong Java
  63. Data Stream • Cácdịngvào/rachocácki u d li u nguyên th y • Hai lp hay dùng là DataInputStream vi các ph ươ ng th c readTTT, và DataOutputStream vi các ph ươ ng th c writeTTT, trong đĩ TTT là tên ki u d li u nguyên th y out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile))); out.writeDouble(price); out.writeInt(unit); out.writeUTF(desc); in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile))); price = in.readDouble(); unit = in.readInt(); desc = in.readUTF(); Lê ðình Thanh, Các lp thi t yu trong Java Object Stream • Dịngvào/racho đi tưng • Các đi tưng cĩ th ghi vào/đc t dịng ph i thu c lp cài đt giao di n Serializable. • Hai lp hay dùng là ObjectInputStream vi ph ươ ng th c readObject() và ObjectOutputStream vi ph ươ ng th c writeObject(obj) • Khighivào/đc ra mt đi tưng, các đi tưng đưc tham chi u cũng đưc ghi/đc theo Lê ðình Thanh, Các lp thi t yu trong Java
  64. Object Stream •Mt dịng ch lưu đi tưng duy nh t mt ln, nu ghi nhi u ln thì nhi u tham chi u đưc ghi •Nu ghi mt đi tưng vào hai dịng khác nhau thì khi đc ra đưc 2 đi tưng khác nhau Lê ðình Thanh, Các lp thi t yu trong Java Mơi tr ưng nn • Mơi tr ưng nn (platform environment) = h điu hành, máy o Java, th ư vi n các lp, d li u cu hình. • CácAPI đ cu hình mơi tr ưng nn: • Cácti n ích cu hình • Thơng s cu hình • Tham s dịng lnh • Bi n mơi tr ưng • Cácti n ích h th ng • Thơng s h th ng • Qu n lý an ninh (t đc) •Mt s ph ươ ng th c h th ng (t đc) • CLASS và CLASSPATH (t đc) Lê ðình Thanh, Các lp thi t yu trong Java
  65. Thơng s cu hình •Mt thơng s cu hình là mt cp xâu ký t khĩa/giá tr ị, ví d LastBrowsedTabs =“ ” • Các thơng s cu hình đưc lưu mt tp cu hình (th ưng dng văn bn), đưc ch ươ ng trình đc vào khi kh i đng và lưu li tr ưc khi kt thúc • Trong th i gian th c thi, ch ươ ng trình s dng đi tưng Properties đ thao tác vi các thơng s cu hình Properties Tp cu hình k1 v1 k2 v2 k1 v1 k2 v2 . FileInputStream load(is) FileOutputStream store(os) Lê ðình Thanh, Các lp thi t yu trong Java Thơng s cu hình • ðc cu hình t tp Properties applicationProps = new Properties(); FileInputStream in = new FileInputStream("appProperties.config"); applicationProps.load(in); in.close(); • Ghi cu hình ra tp FileOutputStream out = new FileOutputStream(" appProperties.config "); applicationProps.store(out, " Comments "); out.close(); Lê ðình Thanh, Các lp thi t yu trong Java
  66. Thơng s cu hình • Properties cungcp hàng lo t các ph ươ ng th c đ đc và cp nh t thơng s getProperty(String key) getProperty(String key, String default) setProperty(String key, String value) contains(Object value) containsKey(Object key) list(PrintStream s) Properties k th a list(PrintWriter w) Hashtable cài đt elements() mt bng băm nên keys() propertyNames() các thao tác tìm theo stringPropertyNames() khĩa rt hi u qu size() remove(Object key) Lê ðình Thanh, Các lp thi t yu trong Java Tham s dịng lnh • Khi gi mt ch ươ ng trình bng lnh java TenCT, chúng ta cĩ th cung cp các tham s cho ch ươ ng trình • Các tham s này đưc truy n cho agrs ca hàm main public class SomeClass { public static void main ( String[] args ) { for (String s: args) { System.out.println(s); } } } java SomeClass “A sunny day” “We go out” A sunny day We go out Lê ðình Thanh, Các lp thi t yu trong Java
  67. Bi n mơi tr ưng • Java cungcp ph ươ ng th c ddocj các biên mơi tr ưng import java.util.Map; public class EnvMap { public static void main (String[] args) { Map env = System.getenv(); for (String envName : env.keySet()) { System.out.format("%s=%s%n", envName, env.get(envName)); } } } //String value = System.getenv(env); Lê ðình Thanh, Các lp thi t yu trong Java Thơng s h th ng •Lp System ch a mt đi tưng Properties đ qu n lý các thơng s h th ng nh ư tên h điu hành, th ư mc cài đt JRE, • ðc thơng s h th ng Properties System.getProperties() String System.getProperty(tenTS); • Thay đi thơng s h th ng System.setProperties(Properties p); •Hi: Làm nh ư th nào đ thay đi mt thơng s h th ng? Lê ðình Thanh, Các lp thi t yu trong Java
  68. Thơng s h th ng •Lp System ch a mt đi tưng Properties đ qu n lý các thơng s h th ng nh ư tên h điu hành, th ư mc cài đt JRE, • ðc thơng s h th ng Properties System.getProperties() String System.getProperty(tenTS); • Thay đi thơng s h th ng System.setProperties(Properties p); •Hi: Làm nh ư th nào đ thay đi mt thơng s h th ng? Lê ðình Thanh, Các lp thi t yu trong Java Ti ếp theo ng dng CSDL Lê ðình Thanh, Các lp thi t yu trong Java
  69. Bài gi ng LP TRÌNH JAVA Lê ðình Thanh B mơn Mng và Truy n thơng Máy tính Khoa Cơng ngh Thơng tin Tr ưng ði hc Cơng ngh , ðHQGHN 1 Lê ðình Thanh, ng dng CSDL Bài 7 ng dng CSDL 2 Lê ðình Thanh, ng dng CSDL
  70. Ni dung • Mơ hình ng dng CSDL •S dng JavaDB 3 Lê ðình Thanh, ng dng CSDL Mơ hình ng dng CSDL • JDBC (Java Database Connectivity) cung cp các đi tưng logic: k t ni, lnh, và ng dng Java kt qu truy vn; đưc thi t k đ ch y đc lp vi HQT CSDL JDBC • Connector nh n lnh ca JDBC, dch thành lnh ca DB Connector/ HQT CSDL và truy n (qua mng) cho HQT CSDL; nh n Driver kt qu t HQT CSDL và truy n cho JDBC • HQT CSDL khác nhau v cách ti p nh n và x lý lnh, cũng H qu n tr CSDL nh ư tr kt qu . Vì vy, ng vi mi HQT CSDL, các driver/connector tươ ng ng ph i đưc s dng 4 Lê ðình Thanh, ng dng CSDL
  71. Các bưc • Nh p gĩi sql • Ch n driver •Kt ni CSDL • Thao tác CSDL –To đi tưng lnh – Th c hi n cp nh t –To đi tưng kt qu – Th c hi n truy vn –S dng kt qu truy vn • ðĩng kt ni 5 Lê ðình Thanh, ng dng CSDL Nh p gĩi sql • Gĩi java.sql bao gm các lp cho thao tác CSDL, vì vy cn nh p các lp trong gĩi này vào ng dng CSDL import java.sql.*; //nh p tt c các lp //ho c ch nh p các lp đưc dùng import java.sql.DriverManager; import java.sql.Connection; import java.sql.Statement; import java.sql.ResultSet; 6 Lê ðình Thanh, ng dng CSDL
  72. Ch n driver • Class.forName(driverName); HQT CSDL driverName MySQL com.mysql.jdbc.Driver SQL Server com.microsoft.sqlserver.jdbc.SQLServerDriver Derby org.apache.derby.jdbc.EmbeddedDriver JavaDB org.apache.derby.jdbc.EmbeddedDriver Oracle sql.oracle.OracleDriver ODBC sun.jdbc.odbc.JdbcOdbcDriver PostgreSQL org.postgresql.Driver 7 Lê ðình Thanh, ng dng CSDL Ch n driver •Nu driver đưc cung cp dng th ư vi n (.jar), chúng ta ph i nh p th ư vi n này vào ch ươ ng trình. – Trong ca s Projects , bm ph i chu t vào Libraries ca d án đang phát tri n, ch n Add JAR/Folder , ch n tp .jar c n nh p ri ch n Open . • Ví d, nu s dng JavaDB, chúng ta cn derby driver, do vy ph i nh p derby.jar hay derbyclient.jar trong th ư mc Program Files\Sun\JavaDB\lib 8 Lê ðình Thanh, ng dng CSDL
  73. Kt ni CSDL • Connection conn = DriverManager.getConnection(dburl, username, password); trong đĩ dburl là đa ch và tên CSDL, cĩ dng “jdbc:xxx://IP:port//db”, xxx ph thu c vào HQT CSDL, db là tên CSDL HQT CSDL xxx MySQL mysql Derby, JavaDB derby 9 Lê ðình Thanh, ng dng CSDL Cp nh t d li u • Statement stmt = conn.createStatement(); • int nor = stmt.executeUpdate(sql); sql là lnh update, insert, delete, alter, ca SQL Hàm tr v s bn ghi đưc cp nh t. Ví d: stmt.executeUpdate(“update Sinhvien set hoten=\‘Tr n Nguyên\’ where masv=\’1\’”); 10 Lê ðình Thanh, ng dng CSDL
  74. Truy vn d li u • Statement stmt = conn.createStatement(); • ResultSet rs = stmt.executeQuery(“select ”); Ví d: ResultSet rs = stmt.executeQuery(“select * from Sinhvien where gioitinh=\’M\’”); 11 Lê ðình Thanh, ng dng CSDL Truy vn d li u (ti p) • ResultSet – lưu kt qu truy vn dưi dng danh sách các bn ghi vi mt con tr di chuy n đưc ban đu tr v đu danh sách (tr ưc bn ghi đu tiên) – cung cp các ph ươ ng th c đ duy t danh sách – di chuy n con tr • next () – chuy n sang bn ghi k ti p và tr v true nu cịn bn ghi phía sau, ng ưc li tr v false • previous(), fist(), last(), beforeFirst(), afterLast(). 1 2 97 next Tr n Nguyên Tân Th Trang Tr nh Tn beforeFirst afterLast M F M first last con tr cho bi t Bn ghi hi n ti 12 Lê ðình Thanh, ng dng CSDL
  75. Truy vn d li u (ti p) • ResultSet – và các ph ươ ng th c getXXX(tên_trưng) đc giá tr tng tr ưng ca bn ghi hi n ti – đang đưc tr bi con tr , vi XXX là ki u d li u ca tr ưng. – Ví d • rs.getInt(“masv”) => 2 • rs.getString(“hoten”) => “Tân Th Trang” • rs.getChar(“gioitinh”) => ‘F’ 1 2 97 next Tr n Nguyên Tân Th Trang Tr nh Tn beforeFirst afterLast M F M first last con tr cho bi t Bn ghi hi n ti 13 Lê ðình Thanh, ng dng CSDL Truy vn d li u (ti p) try { Statement stmt = conn.createStatement(); Các lnh thao ResultSet rs = stmt.executeQuery(“select ”); tác CSDL cĩ while (rs.next()) th gây ngo i { l, vì vy cn int ma = rs.getInt(“masv”); String ht = rs.getString(“hoten”); đưc bt và Char gt = rs.getChar(“gioitinh”); x lý System.out.println(ma + “\t” + ht + “\t” + gt); } }catch(Exception excp) { System.out.println(“Loi truy van”); } 14 Lê ðình Thanh, ng dng CSDL
  76. Lnh đưc chu n b tr ưc • PreparedStatement đưc dùng thay Statement đ tăng tc đ x lý –Cu trúc lnh sql đưc cung cp tr ưc cho PreparedStatement nh ư mt hàm đưc dch tr ưc – Cung cp các tham s cho PreparedStatement tr ưc khi th c thi nh ư gi hàm PreparedStatement pstmt = con.preparedStatement("UPDATE Sinhvien SET hoten = ? WHERE masv= ? "); pstmt.setStringt(1, “Tơn Nh t ði”); pstmt .setString(2, 14); pstmt.executeUpdate(); 15 Lê ðình Thanh, ng dng CSDL S dng stored procedure • CallableStatement là lp k th a PreparedStatement dùng đ tri u gi các stored procedure ca CSDL nh m tăng tc đ x lý c DB Server và ch ươ ng trình CallableStatement cs = conn.prepareCall("{call ALL_STUDENT}"); ResultSet rs = cs.executeQuery(); 16 Lê ðình Thanh, ng dng CSDL
  77. S dng giao tác • Giao tác (transaction) đưc s dng đ đm bo tính tồn vn ca d li u –Mt giao tác th ưng bao gm nhi u lnh – Khi giao tác đưc xác nh n (commit), tt c các lnh thu c giao tác cĩ hi u lc –Nu giao tác b hy b (rollback), tt c các lnh đu khơng đưc th c hi n – Giao tác = tp các lnh ho c cùng đưc th c hi n ho c cùng khơng đưc th c hi n •Hi: Vì sao giao tác đ đm bo tính tồn vn ca d li u? Cho ví d. 17 Lê ðình Thanh, ng dng CSDL S dng giao tác conn.setAutoCommit(false); PreparedStatement updateSales = con.prepareStatement("UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?"); updateSales.setInt(1, 50); updateSales.setString(2, "Colombian"); updateSales.executeUpdate(); PreparedStatement updateTotal = con.prepareStatement("UPDATE COFFEES SET TOTAL = TOTAL + ? WHERE COF_NAME LIKE ?"); updateTotal.setInt(1, 50); updateTotal.setString(2, "Colombian"); updateTotal.executeUpdate(); conn.commit(); conn.setAutoCommit(true); Hi: Cơ ch th c hi n giao tác? 18 Lê ðình Thanh, ng dng CSDL
  78. S dng giao tác con.setAutoCommit(false); Statement stmt = conn.createStatement(); int rows = stmt.executeUpdate("INSERT INTO TAB1 (COL1) VALUES " + "(?FIRST?)"); Savepoint svpt1 = conn.setSavepoint("SAVEPOINT_1"); rows = stmt.executeUpdate("INSERT INTO TAB1 (COL1) " + "VALUES (?SECOND?)"); conn.rollback(svpt1); . con.commit(); con.setAutoCommit(true); 19 Lê ðình Thanh, ng dng CSDL To CSDL JavaDB 20 Lê ðình Thanh, ng dng CSDL
  79. To CSDL JavaDB (ti p) 21 Lê ðình Thanh, ng dng CSDL Kt ni CSDL JavaDB 22 Lê ðình Thanh, ng dng CSDL
  80. To bng 23 Lê ðình Thanh, ng dng CSDL To bng (ti p) 24 Lê ðình Thanh, ng dng CSDL
  81. Ch y lnh SQL 25 Lê ðình Thanh, ng dng CSDL Ch y lnh SQL (ti p) 26 Lê ðình Thanh, ng dng CSDL
  82. Ch y lnh SQL (ti p) 27 Lê ðình Thanh, ng dng CSDL To view 28 Lê ðình Thanh, ng dng CSDL
  83. To view (ti p) 29 Lê ðình Thanh, ng dng CSDL Ti ếp theo To giao di n đ ha 30 Lê ðình Thanh, ng dng CSDL
  84. Bài gi ng LP TRÌNH JAVA Lê ðình Thanh B mơn Mng và Truy n thơng Máy tính Khoa Cơng ngh Thơng tin Tr ưng ði hc Cơng ngh , ðHQGHN 1 Lê ðình Thanh, To giao di n đ ha Bài 8 To giao di n đ ha 2 Lê ðình Thanh, To giao di n đ ha
  85. Ni dung • Java Foundation Classes • Swing 3 Lê ðình Thanh, To giao di n đ ha Java Foundation Classes (JFC) 4 Lê ðình Thanh, To giao di n đ ha
  86. JFC • Các lp nn tng ca Java (JFC) bao gm các lp thành ph n đ xây dng giao di n ng ưi dùng, đưc chia thành các nhĩm sau: • Swing : các thành ph n nh ư nút bm, hp ch n, hp so n th o, danh sách, cây, đ phát tri n giao di n đ ha • Look-and-Feel : Tùy bi n theme • Java 2D : đ đ ha 2 chi u • Internationalization : thay đi ngơn ng cho ng ưi dùng s dng ngơn ng khác nhau • Accessibility : cung các các cơng ngh h tr truy cp khác nh ư đc màn hình, 5 Lê ðình Thanh, To giao di n đ ha Swing 6 Lê ðình Thanh, To giao di n đ ha
  87. Các bưc to ng dng swing import javax.swing.*; //Nh p các lp swing public class HelloWorldSwing { private static void main(String[] args) { //To và thi t lp ca s/đi tưng ch a. JFrame frame = new JFrame("HelloWorldSwing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //Thêm các thành ph n vào ca s. JLabel label = new JLabel("Hello World"); frame.getContentPane().add(label); //Thêm s ki n và mã x lý cho các thành ph n trên ca s //Hi n th ca s frame.pack(); frame.setVisible(true); } 7 Lê} ðình Thanh, To giao di n đ ha To ng dng swing bng NetBeens •To và thi t lp ca s/đi tưng ch a • Thêm các thành ph n vào ca s • Thêm s ki n và mã x lý cho các thành ph n trên ca s • Hi n th ca s 8 Lê ðình Thanh, To giao di n đ ha
  88. To ng dng swing bng NetBeens 9 Lê ðình Thanh, To giao di n đ ha To ng dng swing bng NetBeens 10 Lê ðình Thanh, To giao di n đ ha
  89. To ng dng swing bng NetBeens 11 Lê ðình Thanh, To giao di n đ ha To ng dng swing bng NetBeens •To và thi t lp ca s/đi tưng ch a • Thêm các thành ph n vào ca s • Thêm s ki n và mã x lý cho các thành ph n trên ca s • Hi n th ca s 12 Lê ðình Thanh, To giao di n đ ha
  90. To ng dng swing bng NetBeens •To và thi t lp ca s/đi tưng ch a • Thêm các thành ph n vào ca s • Thêm s ki n và mã x lý cho các thành ph n trên ca s • Hi n th ca s 13 Lê ðình Thanh, To giao di n đ ha To ng dng swing bng NetBeens •To và thi t lp ca s/đi tưng ch a • Thêm các thành ph n vào ca s • Thêm s ki n và mã x lý cho các thành ph n trên ca s • Hi n th ca s 14 Lê ðình Thanh, To giao di n đ ha
  91. To ng dng swing bng NetBeens •To và thi t lp ca s/đi tưng ch a • Thêm các thành ph n vào ca s • Thêm s ki n và mã x lý cho các thành ph n trên ca s • Hi n th ca s 15 Lê ðình Thanh, To giao di n đ ha To ng dng swing bng NetBeens •To và thi t lp ca s/đi tưng ch a • Thêm các thành ph n vào ca s • Thêm s ki n và mã x lý cho các thành ph n trên ca s • Hi n th ca s 16 Lê ðình Thanh, To giao di n đ ha
  92. To ng dng swing bng NetBeens •To và thi t lp ca s/đi tưng ch a • Thêm các thành ph n vào ca s • Thêm s ki n và mã x lý cho các thành ph n trên ca s • Hi n th ca s 17 Lê ðình Thanh, To giao di n đ ha To ng dng swing bng NetBeens •To và thi t lp ca s/đi tưng ch a • Thêm các thành ph n vào ca s • Thêm s ki n và mã x lý cho các thành ph n trên ca s • Hi n th ca s 18 Lê ðình Thanh, To giao di n đ ha
  93. To ng dng swing bng NetBeens •To và thi t lp ca s/đi tưng ch a • Thêm các thành ph n vào ca s • Thêm s ki n và mã x lý cho các thành ph n trên ca s • Hi n th ca s 19 Lê ðình Thanh, To giao di n đ ha Mt vài lưu ý • Cĩ 03 lo i ca s là khung (JFrame) (ca s chính), hp tho i (JDialog) và JApplet (applet). Ch c năng chính ca ca s là đ ch a các thành ph n giao di n khác •Ca s khơng th ch a ca s khác (top-level) • Các thành ph n khác mu n hi n th đưc ph i đưc đt trên ca s •Mt s thành ph n cĩ th làm vt ch a, ví d mt toolbar ch a các button, textbox, •Mt thành ph n (tr ca s) đưc ch a trong và menu1 ch trong mt thành ph n khác menu2 • Quan h gi a các thành ph n trên mt giao di n to thành mt cây • Các thành ph n đu đưc k th a t JComponent 20 Lê ðình Thanh, To giao di n đ ha
  94. S dng frame • Frame là ca s chính. Mt ng dng GUI th ưng cĩ ít nh t mt frame. • Frame cĩ thanh tiêu đ (title) và vi n (border) cùng mt s nút thay đi kích th ưc, đĩng ca s. Mm trong vi n và dưi thanh tiêu đ là vùng ni dung. Các đi tưng giao di n nh ư nút bm, ơ văn bn, nút ch n, đưc đt vào vùng ni dung 21 Lê ðình Thanh, To giao di n đ ha Các thành ph n giao di n •Mi thành ph n giao di n • đưc đnh ngh ĩa bi mt lp • cĩ các ph ươ ng th c đ thi t lp/đc giá tr các thu c tính • cĩ các s ki n liên quan bàn phím, chu t • Ghichú: Cáchàmx lý s ki n cho các điu khi n đưc thêm bng cách kích chu t ph i vào điu khi n, ch n Events ri ch n s ki n. 22 Lê ðình Thanh, To giao di n đ ha
  95. JLabel • Ch c năng: Hi n th văn bn • Các ph ươ ng th c chính • setText(String t): ðt ni dung cho nhãn • String getText(): ðc ni dung nhãn 23 Lê ðình Thanh, To giao di n đ ha JTextField • Ch c năng: Nh p mt dịng văn bn • Các ph ươ ng th c chính • setText(String t): ðt ni dung cho ơ ch • String getText(): ðc ni dung ơ ch •S ki n chính • keyReleased: nh phím • focusLost: ht focus 24 Lê ðình Thanh, To giao di n đ ha
  96. JPassword • Ch c năng: Nh p mt kh u • Các ph ươ ng th c chính • char [] pwd.getPassword(): ðt ni dung password •S ki n chính • keyReleased: nh phím • focusLost: ht focus 25 Lê ðình Thanh, To giao di n đ ha JTextArea • Ch c năng: Nh p nhi u dịng văn bn • Các ph ươ ng th c chính • setText(String): ðt ni dung văn bn • String getText(): ðc ni dung văn bn • setLineWrap(boolean): Cho phép hi n th mt dịng văn bn trên nhi u hàng (gp hàng) • setWrapStyleWord(boolean): Cĩ đưc b t khi gp hàng hay khơng •S ki n chính • keyReleased: nh phím 26 Lê ðình Thanh, To giao di n đ ha
  97. JTextPane • Ch c năng: Hi n th ni dung văn bn cĩ đnh dng và cho nh p nhi u dịng văn bn • Ch a bên trong đi tưng StyledDocument • getStyledDocument(): tr li đi tưng StyledDocument đưc ch a bên trong • StyledDocument • Ch a danh sách các styles • Ch a ni dung. N dung đưc chia thành nhi u đon, mi đon áp dng mt style • 27 Lê ðình Thanh, To giao di n đ ha JTextPane • StyledDocument • •Ly ki u mc đnh: • Style kmd = StyleContext.getDefaultStyleContext(). getStyle(StyleContext.DEFAULT_STYLE); • Thêm ki u: • Style k1 = doc.addStyle("kieu1", kmc); • Style k2 = doc.addStyle("kieu2", k1); • Xác đnh thu c tính tng ki u: • StyleConstants.setFontFamily(k1, "SansSerif"); • StyleConstants.setItalic(k1, true); • StyleConstants.setFontSize(k2, 30); • Chèn ni dung cĩ ki u • doc.insertString(doc.getLength(), “Văn bn cĩ ki u 1", doc.getStyle("kieu1")); • doc.insertString(doc.getLength(), “Văn bn cĩ ki u 2", doc.getStyle("kieu2")); 28 Lê ðình Thanh, To giao di n đ ha
  98. JEditorPane • Ch c năng: Hi n th ni dung mt tài li u HTML và cho nh p nhi u dịng văn bn • Ph ươ ng th c: • setText(String): ðt ni dung văn bn • String getText(): ðc ni dung văn bn • setPage(URL): Load tài li u HTML java.net.URL url = APPView.class.getResource("thu.html"); try { jEditorPane1.setPage(url); } catch (Exception e) { System.err.println("Attempted to read a bad URL: " + helpURL); } 29 Lê ðình Thanh, To giao di n đ ha JCheckBox • Các ph ươ ng th c chính • boolean isSelected(): Ki m tra nút đưc tích hay khơng •S ki n chính • mouseClicked: kích chu t, thay đi tr ng thái tích 30 Lê ðình Thanh, To giao di n đ ha
  99. JRadioButton •Cn to nhĩm cho các radio button đ ch đưc ch n mt trong c nhĩm •To JGroupButton ri đt thu c tính groupButton cho JRadioButton • Các ph ươ ng th c chính • boolean isSelected(): Ki m tra nút đưc tích hay khơng •S ki n chính • mouseClicked: kích chu t, thay đi tr ng thái tích 31 Lê ðình Thanh, To giao di n đ ha JComboBox • Cho ch n mt ph n t trong danh sách th xu ng • Các ph ươ ng th c chính • JComboBox(String []): To đi tưng combo vi danh sách các mc ch n trong String[] • setSelectedIndex(i): Ch n mc i • int getSelectedIndex(): Tr li ch mc ca mc đưc ch n • Object getSelectedValue(): Tr li mc đưc ch n • setEditable(boolean): Cho biên so n hay khơng • setModel(Model): ðt model • getModel(): Ly model •S ki n chính 32 Lê ðình• Thanh, actionPerformed: To giao di n đ ha thay đi mc ch n
  100. JList • Cho mt ho c nhi u ph n t trong danh sách • Các ph ươ ng th c chính • JList(DefaultListModel): To đi tưng list vi danh sách các mc ch n trong model • setLayoutOrientation(JList.___): ðt hưng sp xp danh sách • setVisibleRowCount(int): ðt s hàng nhìn th y • setSelectedIndex(i): Ch n mc I • setSelectedIndices(int[]): Ch n các mc • setSelectionInterval(index, size): Ch n các mc liên tc trong kho ng • ensureIndexIsVisible(i): ðiu ch nh hi n th đ mc I đưc nhìn th y • setSelectionMode(ListSelectionModel.MODE): ðt ki u ch n các mc • int getSelectedIndex(): Tr v ch mc ca mc đưc ch n • int[] getSelectedIndices(); Tr v ch mc ca các mc đưc ch n • Object getSelectedValue(): Tr v giá tr ca mc đưc ch n • Object[] getSelectedValues(): Tr v giá tr ca các mc đưc ch n • ListModel: • addElement(obj), add(index, obj): Thêm mc • remove(index): Xĩa mc •S ki n chính • actionPerformed: thay đi mc ch n • mouseClicked: Kíchchu t 33 Lê ðình Thanh, To giao di n đ ha JTable • Trình bày d li u theo bng •Ni dung ca bng đưc qu n lý bi TableModel. TableModel bao gm •Mt mng String[] ch a tiêu đ ca các ct •Mt mng Object[][] ch a các đi tưng là ni dung ca các ơ. S ct ca mng hai chi u này ph i bng s ct (s ph n t ca mng ch a tiêu đ) • Các ph ươ ng th c đ ly s hàng, s ct, tên ct, đi tưng mt ơ, xác đnh các ơ cĩ th biên tp đưc • ð to bng •To TableModel •To đi tưng JTable s dng TableModel đã to • JTable to hàng tiêu đ vi s ơ bng s ph n t ca mng tiêu đ và ln lưt cĩ các tiêu đ ca mng tiêu đ •Vi mi ph n t [i][j] trong mng đi tưng • JTable s dng Renderer đ hi n th đi tưng ti ơ (i, j) • JTable s dng Editor đ cp nh t đi tưng 34 Lê ðình Thanh, To giao di n đ ha
  101. TableModel và JTable class MyTableModel extends AbstractTableModel { private String[] a = {"First Name", "Last Name", "Sport", "# of Years", "Vegetarian",}; private Object[][] data2 = { {"Kathy", "Smith", "Snowboarding", new Integer(5), new Boolean(false)}, {"John", "Doe", "Rowing", new Integer(3), new Boolean(true)}, {"Sue", "Black", "Knitting", new Integer(2), new Boolean(false)}, {"Jane", "White", “Speed reading", new Integer(20), new Boolean(true)}, {"Joe", "Brown", "Pool", new Integer(10), new Boolean(false)} }; Renderer cho String Renderer cho Integer Renderer cho Boolean } Editor cho String Editor cho Integer Editor cho Boolean 35 Lê ðình Thanh, To giao di n đ ha Renderer và Editor mc đnh class MyTableModel extends AbstractTableModel { public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); } } JTable s s dng các Renderer/Editor mc đnh cho tng lp Renderer cho String Renderer cho Integer Renderer cho Boolean Editor cho String Editor cho Integer Editor cho Boolean 36 Lê ðình Thanh, To giao di n đ ha
  102. ðnh ngh ĩa và s dng Renderer ðnh ngh ĩa DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); renderer.setBackground(Color.red); ho c public class MyRenderer implements TableCellRenderer {} MyRenderer renderer = new MyRenderer(); renderer.set___(); S dng cho tng ct table.getColumnModel().getColumn(3).setCellRenderer(renderer); ho c cho c bng table.setDefaultRenderer(Class.class, renderer); 37 Lê ðình Thanh, To giao di n đ ha Ví d s dng Renderer DefaultTableCellRenderer renderer = new DefaultTableCellRenderer(); renderer.setForeground(Color.red); table.getColumnModel().getColumn(1).setCellRenderer(re nderer); 38 Lê ðình Thanh, To giao di n đ ha
  103. Ví d s dng Renderer table.setDefaultRenderer(Color.class, new ColorRenderer()); public class ColorRenderer extends JLabel implements TableCellRenderer { public ColorRenderer() { setOpaque(true); } public Component getTableCellRendererComponent( JTable table, Object obj, boolean isSelected, boolean hasFocus, int row, int column) { setBackground((Color)obj); return this; } 39 Lê}ðình Thanh, To giao di n đ ha ðnh ngh ĩa và s dng Editor ðnh ngh ĩa DefaultTableCellEditor editor = new DefaultTableCellEditor(object); ho c public class MyEditor extends AbstractCellEditor implements TableCellEditor {} MyEditor editor = new MyEditor(); S dng cho tng ct table.getColumnModel().getColumn(3).setCellEditor(editor); ho c cho c bng table.setDefaultEditor(Class.class, editor); 40 Lê ðình Thanh, To giao di n đ ha
  104. Ví d s dng Editor JComboBox comboBox = new JComboBox(); comboBox.addItem("1"); comboBox.addItem("2"); comboBox.addItem("3"); comboBox.addItem("4"); DefaultCellEditor editor = new DefaultCellEditor(comboBox); table.getColumnModel().getColumn(1).setCellEditor(edito r); 41 Lê ðình Thanh, To giao di n đ ha Ví d s dng Editor table.setDefaultEditor(Color.class, new ColorEditor()); public class ColorEditor extends AbstractCellEditor implements TableCellEditor, ActionListener { public Object getCellEditorValue() { return currentColor; } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { currentColor = (Color)value; return button; } } 42 Lê ðình Thanh, To giao di n đ ha
  105. Cp nh t ơ class MyTableModel extends AbstractTableModel { public boolean isCellEditable(int row, int col) { } } Biên tp đưc đi tưng trong ơ (row, col) hay khơng tùy thu c vào isCellEditable(int row, int col) tr v true hay false 43 Lê ðình Thanh, To giao di n đ ha Cp nh t ơ class MyTableModel extends AbstractTableModel { public void setValueAt(Object value, int row, int col) { data[row][col] = value; fireTableCellUpdated(row, col); } } Lưu cp nh t đưc nu ph ươ ng th c setValueAt đưc cài đt 44 Lê ðình Thanh, To giao di n đ ha
  106. Sp xp các hàng theo giá tr ct table.setAutoCreateRowSorter(true); 45 Lê ðình Thanh, To giao di n đ ha To b lc //To bng cĩ sorter. MyTableModel model = new MyTableModel(); sorter = new TableRowSorter (model); table.setRowSorter(sorter); // ðt b lc RowFilter rf = null; //If current expression doesn't parse, don't update. try { rf = RowFilter.regexFilter(“xâu con”, col); } catch (java.util.regex.PatternSyntaxException e) { return; } sorter.setRowFilter(rf); 46 Lê ðình Thanh, To giao di n đ ha
  107. ðt ch đ ch n ơ Ch đ ch n table.setSelectionMode(mode); Ch n mt mc ListSelectionModel.SINGLE_SELECTION Mt kho ng ListSelectionModel.SINGLE_INTERVAL_SELECTION Nhi u kho ng ListSelectionModel.MULTIPLE_INTERVAL_SELECTION Mc ch n C hàng table.setRowSelectionAllowed(true); table.setColumnSelectionAllowed(false); C ct table.setRowSelectionAllowed(false); table.setColumnSelectionAllowed(true); Tng ơ table.setCellSelectionEnabled(true); Ghi chú: Nu ch n hành thì khơng đưc ch n ct. Ch n ơ ch KHƠNG áp dng cho nhi u kho ng 47 Lê ðình Thanh, To giao di n đ ha Mt s ph ươ ng th c khác class MyTableModel extends AbstractTableModel { public int getColumnCount() { return a.length; } public int getRowCount() { return data2.length; } public String getColumnName(int col) { return a[col]; } public Object getValueAt(int row, int col) { return data2[row][col]; } } 48 Lê ðình Thanh, To giao di n đ ha
  108. JFrame và JDialog • ðt look and feel: JFrame.setDefaultLookAndFeelDecorated(true); JDialog.setDefaultLookAndFeelDecorated(true); • Hi n th hp tho i JOptionPane.showConfirmDialog(parent, text, title, JOptionPane.___OPTION ); Các hp tho i hi n th modal và tr v giá tr nút đưc bm 49 Lê ðình Thanh, To giao di n đ ha JMenu • JMenuBar–Thanhmenu đ ch a các menu • JMenu–Th c đơ n (đưc đt trong JMenuBar) • Cáckho n th c đơ n (đưc đt trong JMenu) • JMenuItem–Mt kho n th ưng • JRadioButtonMenuItem – Mt kho n cĩ nút radio • JCheckBoxMenuItem – Mt kho n cĩ nút check • Separator – Phân cách các kho n • Memu ch a menu con •S ki n trên các kho n th c đơ n • actionPerformed • Ki m tra radio hay checkbox đưc ch n trên menu item • bool isSelected() 50 Lê ðình Thanh, To giao di n đ ha
  109. JPopupMenu • Menu đưc hi n th khi kích chu t ph i, cịn gi là menu ng cnh •Cn x lý các s ki n MousePressed và MouseReleased trên đi tưng hi n th popup menu private void mainPanelMousePressed(java.awt.event.MouseEvent evt ) { maybeShowPopup(evt); } private void mainPanelMouseReleased(java.awt.event.MouseEvent evt ) { maybeShowPopup(evt); } private void maybeShowPopup(java.awt.event.MouseEvent e) { if (e.isPopupTrigger()) { jPopupMenu1.show(e.getComponent(), e.getX(), e.getY()); } } 51 Lê ðình Thanh, To giao di n đ ha JPopupMenu • Thêm actionPerformed cho các kho n ca popup menu menuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } }); private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { } 52 Lê ðình Thanh, To giao di n đ ha
  110. Ti ếp theo Lp trình socket 53 Lê ðình Thanh, To giao di n đ ha
  111. Bài gi ng LP TRÌNH JAVA Lê ðình Thanh B mơn Mng và Truy n thơng Máy tính Khoa Cơng ngh Thơng tin Tr ưng ði hc Cơng ngh , ðHQGHN 1 Lê ðình Thanh, Lp trình socket Bài 9 Lp trình socket 2 Lê ðình Thanh, Lp trình socket
  112. Ni dung • Truy n thơng gi a các ng dng • Socket •Lp trình socket • ða lu ng 3 Lê ðình Thanh, Lp trình socket Truy n thơng gi a các ng dng ng dng A1 ng dng B1 Chào B1. Tơi là A1. Bn cn nĩi chuy n khơng Chào A1. Tơi sn sàng Tơi cn ðây là th bn cn Cm ơn nhi u nhé. Hn gp li Ok. Hn gp li Máy A Máy B 4 Lê ðình Thanh, Lp trình socket
  113. Truy n thơng gi a các ng dng •Mt ng dng (B1) ph i ch y tr ưc, ch xem cĩ ng dng khác cn giao ti p khơng • ng dng cn giao ti p (A1) thi t lp kt ni đn ng dng lng nghe (B1) • Hai bên bàn th o v mt vi c gì đĩ (theo giao th c) • A1/B1 mu n kt thúc s chào tm bi t tr ưc, B1/A1 s tm bi t li 5 Lê ðình Thanh, Lp trình socket Truy n thơng gi a các ng dng ng dng A1 ng dng B1 Chào B1. Tơi là A1. Bn cn nĩi chuy n khơng ng dng A2 ng dng B2 Chào A1. Tơi sn sàng Chào B2. Tơi là A2. Bn cn nĩi chuy n khơng Tơi cn Chào A2. Tơi sn sàng ðây là th bn cn Tơi cn Cmðơnây nhi là thu nhé.bn H cn gp li Ok. Hn gp li Cm ơn nhi u nhé. Hn gp li Máy A Máy B Ok. Hn gp li 6 Lê ðình Thanh, Lp trình socket
  114. Truy n thơng gi a các ng dng • Nhi u ng dng cĩ th ch y đng th i trên mt máy, s dng cùng đa ch IP → Làm th nào đ phân bi t đưc gĩi tin đn gi cho ng dng nào? • Gi i pháp: Mi ng dng s dng mt mã riêng bi t là mt s nguyên khơng âm đưc gi là cng (port). • Khi ng dng bên ngồi cn gi cho ng dng B1, nĩ ph i gi c IP ca máy B và mã nh n di n ca B1 trong gĩi d li u. • Khi ng dng bên ngồi cn gi cho ng dng B2, nĩ ph i gi c IP ca máy B và mã nh n di n ca B2 trong gĩi d li u. • • IP:port - ða ch /đnh danh/socket ca ng dng 7 Lê ðình Thanh, Lp trình socket Socket • IP:port - ða ch /đnh danh/socket ca ng dng • Khi ng dng s dng cng nào, nĩ s đă ng ký vi h điu hành •Nu cng đã đưc s dng, h điu hành s báo là khơng th s dng đưc, ng dng s dng ch y ho c xin cng khác. • Trong lp trình java: • ng dng lng nghe s dng ServerSocket và Socket • ng dng kh i đng kt ni s dng Socket 8 Lê ðình Thanh, Lp trình socket
  115. Lp trình socket 9 Lê ðình Thanh, Lp trình socket ði tưng Socket •Mi đi tưng Socket cĩ: •Mt dịng ra: lưu d li u s gi cho đi tác nh ưng ch ưa đưc gi • Các ph ươ ng th c gi d li u = đư a d li u ra dịng ra, đy d li u cho tng giao vn (gi) •Mt dịng vào: lưu d li u do đi tác gi đn • Các ph ươ ng th c nh n d li u = đc d li u t dịng vào Output Input Sream Stream Socket TCP/UDP Socket Input Output Stream Sream Network 10 Lê ðình Thanh, Lp trình socket
  116. ServerSocket //To server socket lng nghe trên cng 8080 ServerSocket ssoc = new ServerSocket(8080); //Ch p nh n kt ni Socket soc = ssoc.accept(); 11 Lê ðình Thanh, Lp trình socket Socket //To kt ni đn server socket lng nghe trên cng 8080 máy cĩ IP 113.202.99.8 Socket soc = new Socket(“113.202.99.8”, 8080); //Tham chi u đn dịng vào và dịng ra ca socket InputStream sin = soc.getInputStream(); OutputStream sout = soc.getOutputStream(); DataInputStream in = new DataInputStream(sin); DataOutputStream out = new DataOutputStream(sout); //Gi d li u cho đi tác out.writeUTF(“Ni dung”); out.flush(); // ðc d li u do đi tác gi đn String text = in.readUTF(); 12 Lê ðình Thanh, Lp trình socket
  117. Giao th c tng ng dng •Mt ng dng (B1) ph i ch y tr ưc, ch xem cĩ ng dng khác cn giao ti p khơng • ng dng cn giao ti p (A1) thi t lp kt ni đn ng dng lng nghe (B1) • Hai bên bàn th o v mt vi c gì đĩ (theo giao th c) • A1/B1 cn kt thúc s chào tm bi t tr ưc, B1/A1 s tm bi t li • Giao th c cho ng dng cho bi t th t, ki u ni dung các bưc gi/nh n ca mi bên 13 Lê ðình Thanh, Lp trình socket Ví d: Giao th c xưng danh • B ch ng ưi đn • A xu t hi n • Vuilịngchobi t tên ca bn • Tên tơi là A • Ghi nh n tên • Vuilịngchobi t ngày sinh ca bn • Tơi sinh ngày 25/12/1990 • Ghi nh n ngày sinh • XinchàoA, sinhngày 25/12/1990. • Nh n li chào •Kt thúc •Kt thúc 14 Lê ðình Thanh, Lp trình socket
  118. Phía ghi danh (B) //lang nghe tren cong 8080 ServerSocket ssoc = new ServerSocket(8080); System.out.print("Running"); //chap nhan ket noi Socket soc = ssoc.accept(); //tham chieu den cac dong vao va dong ra InputStream sin = soc.getInputStream(); OutputStream sout = soc.getOutputStream(); DataInputStream in = new DataInputStream(sin); DataOutputStream out = new DataOutputStream(sout); //////////////////////////////// thuc hien giao thuc xung danh //////////////////////////////// //yeu cau cho biet ten out.writeUTF("Your name: "); out.flush(); //ghi nhan ten String name = in.readUTF(); //yeu cau cho biet ngay sinh out.writeUTF("Your DOB: "); out.flush(); //ghi nhan ngay sinh String dob = in.readUTF(); //thong bao da ghi nhan xong out.writeUTF("Welcome " + name + " whose DOB is " + dob + "\n"); out.flush(); //ket thuc in.close(); out.close(); soc.close(); 15 Lê ðình Thanh, Lp trình socket Phía xưng danh (A) //thiet lap ket noi Socket soc = new Socket("127.0.0.1", 8080); //tham chieu den cac dong vao va dong ra InputStream sin = soc.getInputStream(); OutputStream sout = soc.getOutputStream(); DataInputStream in = new DataInputStream(sin); DataOutputStream out = new DataOutputStream(sout); //////////////////////////////// thuc hien giao thuc xung danh /////////////////////////////////// //doc yeu cau (cho biet ten) String text = in.readUTF(); System.out.print(text); //mo mot input stream cho ban phim Scanner scanner = new Scanner(new BufferedReader(new InputStreamReader(System.in))); scanner.useDelimiter("\n"); //nhap ten tu ban phim String name = scanner.next(); //gui ten out.writeUTF(name); out.flush(); //doc yeu cau nhap ngay sinh text = in.readUTF(); System.out.print(text); //nhap ngay sinh tu ban phim String dob = scanner.next(); //gui ngay sinh out.writeUTF(dob); out.flush(); //doc thong bao da ghi nhan text = in.readUTF(); 16 System.out.print(text); Lê ðình//ket Thanh, thuc Lp trình socket in.close ();
  119. ða lu ng (Multi-threading) 17 Lê ðình Thanh, Lp trình socket ða lu ng •Mt server cĩ th ph i giao ti p đng th i vi nhi u clients •Vi mi client, server ph i ch p nh n mt kt ni và th c hi n giao th c ng dng trên mt lu ng • → server ph i tao nhi u lu ng x lý đng th i, mi lu ng th c hi n mt kt ni đn mt client 18 Lê ðình Thanh, Lp trình socket
  120. Phía ghi danh – To lu ng public class MyThread extends Thread { private Socket soc; public MyThread(Socket socket) { super("MyThread"); this.soc = socket; } 19 Lê ðình Thanh, Lp trình socket Phía ghi danh – To lu ng public void run() { try { //tham chieu den cac dong vao va dong ra InputStream sin = soc.getInputStream(); OutputStream sout = soc.getOutputStream(); DataInputStream in = new DataInputStream(sin); DataOutputStream out = new DataOutputStream(sout); ////////////// thuc hien giao thuc xung danh /////////////////////// //yeu cau cho biet ten out.writeUTF("Your name: "); out.flush(); //ghi nhan ten String name = in.readUTF(); //yeu cau cho biet ngay sinh out.writeUTF("Your DOB: "); out.flush(); //ghi nhan ngay sinh String dob = in.readUTF(); //thong bao da ghi nhan xong out.writeUTF("Welcome " + name + " whose DOB is " + dob + "\n"); out.flush(); //ket thuc in.close(); out.close(); 20 soc.close(); Lê ðình Thanh, Lp trình socket }
  121. Phía ghi danh – Ch ươ ng trình chính public static void main(String[] args) { try { java.net.ServerSocket ssoc = new ServerSocket(8080); System.out.print("Running"); int count = 0; while (true) { Socket soc = ssoc.accept(); MyThread newthread = new MyThread(soc); newthread.start(); count ++; System.out.println("\nClient: " + count); } } catch(Exception e) { System.out.print(e); } 21 Lê ð}ình Thanh, Lp trình socket Ti ếp theo Tri n khai ng dng 22 Lê ðình Thanh, Lp trình socket
  122. Bài gi ng LP TRÌNH JAVA Lê ðình Thanh B mơn Mng và Truy n thơng Máy tính Khoa Cơng ngh Thơng tin Tr ưng ði hc Cơng ngh , ðHQGHN 1 Lê ðình Thanh, Tri n khai ng dng Java Bài 9 Tri n khai ng dng 2 Lê ðình Thanh, Tri n khai ng dng Java
  123. Ni dung •Tp jar • Java Network Launch Protocol (JNLP) • Java Web Start • Applet 3 Lê ðình Thanh, Tri n khai ng dng Java Tp jar 4 Lê ðình Thanh, Tri n khai ng dng Java
  124. ðĩng gĩi ch ươ ng trình vi tp jar • ð tri n khai ng dng đưc vi t bng java, ng ưi ta th ưng đĩng gĩi các tp ch ươ ng trình (.class) cùng các tp tài nguyên cn cho ch ươ ng trình dưi dng tp JAR (Java Archive) • Ch ươ ng trình jar.exe trong jdk/bin cung cp các ch c năng to lp tp jar •To tp jar: jar cf jar-file input-file(s) • Xem ni dung tp jar: jar tf jar-file • Gi i nén tp jar: jar xf jar-file • Gi i nén mt vài tp trong tp jar: jar xf jar-file archived-file(s) 5 Lê ðình Thanh, Tri n khai ng dng Java Ch y ch ươ ng trình vi tp jar • Dịng lnh (cn Main-class manifest) java -jar app.jar •S dng Java Web Start • Ch y applet 6 Lê ðình Thanh, Tri n khai ng dng Java
  125. jar manifest •Tp manifest là mt tp văn bn mơ t v các tp đưc đĩng gĩi trong tp jar • Khi tp tp jar, tp manifest đưc to t đng và gĩi vào jar vi ni dung Manifest-Version: 1.0 Created-By: 1.6.0 (Sun Microsystems Inc.) •Sa ni dung tp manifest jar cf m jar-file manifest-addition-file input-file(s) trong đĩ manifest-addition-file là tp văn bn ch a ni dung đưc đư a thêm vào manifest 7 Lê ðình Thanh, Tri n khai ng dng Java Thi t lp Main-class manifest •Sa ni dung tp manifest jar cf m jar-file manifest-addition-file input-file(s) trong đĩ manifest-addition-file là tp văn bn ch a ni dung Main-Class: MyPackage.MyClass 8 Lê ðình Thanh, Tri n khai ng dng Java
  126. Thi t lp thơng tin phiên bn •Sa ni dung tp manifest jar cf m jar-file manifest-addition-file input-file(s) trong đĩ manifest-addition-file là tp văn bn ch a ni dung v Name: Specification-Title: Specification-Version: Specification-Vendor: Implementation-Title: Implementation-Version: Implementation-Vendor: 9 Lê ðình Thanh, Tri n khai ng dng Java Java Network Launch Protocol (JNLP) 10 Lê ðình Thanh, Tri n khai ng dng Java
  127. JNLP • ð tri n khai ng dng qua mng, java s dng JNLP • Các bưc tri n khai •To tp.jnlp (dng XML) mơ t v tp .jar ch a mã ch ươ ng trình và các tài nguyên cn thi t •To liên kt trên trên trang web tr ti tp .jnlp, Java Web Start s download và ch y ch ươ ng trình đưc mơ t trong tp .jnlp •S dng applet vi mơ t .jnlp 11 Lê ðình Thanh, Tri n khai ng dng Java Ni dung tp jnlp cho ng dng Some Title Some Team 12 Lê ðình Thanh, Tri n khai ng dng Java
  128. Ni dung tp jnlp cho applet Dynamic Tree Demo Dynamic Team 13 Lê Tri n khai ng dng Java Java Web Start 14 Lê ðình Thanh, Tri n khai ng dng Java
  129. Java Web Start • Java Web Start cungcp kh năng tri n khai ng dng java mt cách đơ n gi n, hi u qu bng cách download và ch y • Client: Cn cài J2SE • Server: Cn cho application/x-java-jnlp-file JNLP trong MIME type. 15 Lê ðình Thanh, Tri n khai ng dng Java Ch y ng dng Java Web Start •S dng ti n ích tri n khai ng dng var dir = location.href.substring(0, location.href.lastIndexOf('/')+1); var url = dir + "webstart-desc.jnlp"; deployJava.launchButtonPNG = “button.gif”; deployJava.createWebStartLaunchButton(url, '1.6.0'); • Ho c to link đn tp jnlp Cĩ th download deployJava.js đ tri n khai ti máy ch ca mình 16 Lê ðình Thanh, Tri n khai ng dng Java
  130. Applet 17 Lê ðình Thanh, Tri n khai ng dng Java Applet • Applet là ng dng java cĩ th nhúng vào trang web và hi n th trên trình duy t •Mt applet ch ch a mt lp đưc k th a t java.applet.Applet ho c javax.swing.JApplet vi các ph ươ ng th c init() – đưc gi khi applet đưc load lên trang web start() – bt đu ch y stop() – khơng ch y na destroy() – đưc gi tr ưc khi applet đưc unload 18 Lê ðình Thanh, Tri n khai ng dng Java
  131. To applet import javax.swing.JApplet; import javax.swing.SwingUtilities; import javax.swing.JLabel; public class HelloWorld extends JApplet { public void init() { try { SwingUtilities.invokeAndWait( new Runnable() { public void run() { JLabel lbl = new JLabel("Hello World"); add(lbl); } } ); } catch (Exception e) { System.err.println("createGUI didn't complete 19 Lê ðình Thanh,successfully"); Tri n khai ng dng } Java } } Nhúng applet vào trang web • Applets cĩth đưc chúng vào trang web và tươ ng tác vi các đi tưng tài li u ca trang web thơng qua javascript • ð applet ch y đưc, trình duy t ph i đưc cài Java Plug- in • Browser gi đon mã nhúng applet cho Java Plug-in. Java Plug-in ch u trách nhi m gi và th c thi applet 20 Lê ðình Thanh, Tri n khai ng dng Java
  132. Nhúng applet vào trang web •S dng th ho ặc •S dng ti n ích nhúng applet var attributes = { code:'AppletName', width:300, height:300} ; var parameters = {jnlp_href: ‘applet-desc.jnlp'} ; deployJava.runApplet(attributes, parameters, '1.6')21 ; Lê ðình Thanh, Tri n khai ng dng Java Url ca applet • getCodeBase() - URL ca applet • getDocumentBase() – url ca trang web ch a applet • Ví d: Image image = getImage(getCodeBase(), "imgDir/a.gif"); 22 Lê ðình Thanh, Tri n khai ng dng Java
  133. S dng tham s vi applet • Truy n tham s • Tri n khai bng th applet • Tri n khai bng jnlp và var parameters = {jnlp_href: 'applettakesparams.jnlp', paramOutsideJNLPFile: 'fooOutsideJNLP'} ; deployJava.runApplet(attributes, parameters , 1.4); • Nh n và x lý tham s trong applet paramValue = getParameter("paramName"); 23 Lê ðình Thanh, Tri n khai ng dng Java Hi n th tr ng thái và m trang web • Hi n th tr ng thái showStatus(“Ni dung hi n th trên thanh tr ng thái”); •M trang web AppletContext appletContext = getAppletContext() ; appletContext.showDocument(java.net.URL url ); appletContext.showDocument(java.net.URL url , String targetWindow ); 24 Lê ðình Thanh, Tri n khai ng dng Java
  134. Truy cp mã javascript t applet •Ly đi tưng window JSObject window = JSObject.getWindow(this); • Truy cp bi n javascript userName = window.getMember("userName"); •Cp nh t bi n javascript window.setMember("userName", userName); •Gi hàm javascript Number age = (Number) window.eval("getAge()"); window.call("writeSummary", new Object[] {summary}) ; 25 Lê ðình Thanh, Tri n khai ng dng Java Truy cp th ành viên ca applet bng javascript • Quy tc: đnh danh ca applet đưc dùng nh ư mt tham chi u đn đi tưng applet • var attributes = { id:'mathApplet', code:'jstojava.MathApplet', width:1, height:1} ; var parameters = {jnlp_href: 'math-applet.jnlp'} ; deployJava.runApplet(attributes, parameters, '1.6'); • mathApplet.userName = "John Doe"; mathApplet.getGreeting(); 26 Lê ðình Thanh, Tri n khai ng dng Java
  135. Duy t DOM public void start() { try { Class c = Class.forName("com.sun.java.browser.plugin2.DOM"); Method m = c.getMethod("getDocument", new Class[] { java.applet.Applet.class }); HTMLDocument doc = (HTMLDocument) m.invoke(null, new Object[] { this }); HTMLBodyElement body = (HTMLBodyElement) doc.getBody(); dump(body, INDENT); } catch (Exception e) { System.out.println("New Java Plug-In not available");} } 27 Lê ðình Thanh, Tri n khai ng dng Java Duy t DOM private void dump(Node root, String prefix) { if (root instanceof Element) { System.out.println(prefix + ((Element) root).getTagName() + " / " + root.getClass().getName()); } else if (root instanceof CharacterData) { String data = ((CharacterData) root).getData().trim(); if (!data.equals("")) { System.out.println(prefix + "CharacterData: " + data); } } else { System.out.println(prefix + root.getClass().getName()); } NamedNodeMap attrs = root.getAttributes(); if (attrs != null) { int len = attrs.getLength(); for (int i = 0; i < len; i++) { Node attr = attrs.item(i); System.out.print(prefix + HALF_INDENT + "attribute " + i + ": " + attr.getNodeName()); if (attr instanceof Attr) { System.out.print(" = " + ((Attr) attr).getValue()); } System.out.println(); } } if (root.hasChildNodes()) { NodeList children = root.getChildNodes(); if (children != null) { int len = children.getLength(); for (int i = 0; i < len; i++) { dump(children.item(i), prefix + INDENT); } } } } 28 Lê ðình Thanh, Tri n khai ng dng Java
  136. Giao ti p gi a các applets • Cácapplets cĩ th giao ti p vi nhau thơng qua javascript • Applet1  javascript  Applet2 29 Lê ðình Thanh, Tri n khai ng dng Java