Applet là một chương trình Java có thể chạy trong trình duyệt web. Tất cả các applet đều là các lớp con của lớp ‘Applet’. Lớp Applet thuộc package ‘java.applet’. Lớp Applet bao gồm nhiều phương thức để điều khiển quá trình thực thi củaApplet là một chương trình Java có thể chạy trong trình duyệt web. Tất cả các applet đều là các lớp con của lớp ‘Applet’. Lớp Applet thuộc package ‘java.applet’. Lớp Applet bao gồm nhiều phương thức để điều khiển quá trình thực thi củaApplet là một chương trình Java có thể chạy trong trình duyệt web. Tất cả các applet đều là các lớp con của lớp ‘Applet’. Lớp Applet thuộc package ‘java.applet’. Lớp Applet bao gồm nhiều phương thức để điều khiển quá trình thực thi của
Chương APPLETS Sau học xong chương này, bạn nắm nội dung sau: Hiểu Applet Java Phân biệt applet ứng dụng application Tìm hiểu chu trình sống cuả applet Tạo applet Hiển thị hình ảnh sử dụng applet Truyền tham số cho applet Tìm hiểu ứng dụng applet GUI 6.1 Java Applet Applet chương trình Java chạy trình duyệt web Tất applet lớp lớp ‘Applet’ Lớp Applet thuộc package ‘java.applet’ Lớp Applet bao gồm nhiều phương thức để điều khiển trình thực thi applet Để tạo applet, bạn cần import hai gói sau: java.applet java.awt 6.2 Cấu trúc Applet Một Applet định nghĩa cấu trúc từ kiện xảy suốt trình thực thi Đối với kiện, phương thức gọi cách tự động Các phương thức minh hoạ bảng 6.1 Điều quan trọng lúc applet ban đầu Mà vị trí q trình thực thi trước Ngồi phương thức này, có phương thức ‘paint()’ ‘repaint()’ Phương thức paint() dùng để hiển thị đường thẳng (line), text, hình ảnh hình Đối số phương thức đối tượng lớp Graphics Lớp thuộc gói java.awt Câu lệnh sau dùng để import lớp Graphics: import java.awt.Graphics; Phương thức init() start() stop() destroy() Chương 6: Applets Chức Được gọi trình khởi tạo applet Trong trình khởi tạo, tạo đối tượng để cung cấp cho applet Phương thức dùng để tải hình ảnh đồ hoạ, khởi tạo biến tạo đối tượng Được gọi gọi applet bắt đầu thực thi.Một q trình khởi tạo hồn tất, applet khởi động Phương thức dùng để khởi động lại applet sau ngừng trước Được gọi ngừng thực thi applet Một applet bị ngừng trước bị huỷ Được dùng để huỷ applet Khi applet bị huỷ, nhớ, thời gian thực thi vi xử lý, không gian đĩa trả cho hệ thống Bảng 6.1: Các phương thức applet Phương thức ‘repaint()’ dùng cửa sổ cần cập nhật lại Phương thức cần thông số Tham số đối tượng lớp Graphics Applet sử dụng phương thức ‘showStatus()’ để hiển thị thông tin trạng thái Phương thức có tham số thuộc kiểu liệu String Để lấy thơng tin applet, user overide phương thức ‘getAppletInfo()’ lớp Applet Phương thức trả đối tượng kiểu String Các phương thức applet init(), start(), stop(), destroy(), paint() thừa kế từ applet Nhưng mặc định phương thức không thực thi thao tác Đây ví dụ đơn giản applet Câu lệnh sau tạo lớp có tên ‘Applet1’, lớp kế thừa tất phương thức biến lớp ‘applet’ public class Applet1 extends Applet Phương thức init() paint() thường dùng để thực số hàm để khởi tạo vẽ applet Phương thức ‘g.drawstring()’ vị trí mà đoạn văn vẽ đâu hình Chương trình 6.1 hiển thị chuổi dòng 70 cột 80: Chương trình 6.1 import java.awt.*; import java.applet.*; public class Applet1 extends Applet { int num; public void init() { num = 6; } public void paint (Graphics g) { g.drawString (“Hello to Applet Chapter ” + num, 70, 80); showStatus (getAppletInfo()); //Hiển thị chuổi trả từ hàm getAppletInfo() trạng thái } public String getAppletInfo() //user overrides { return “Created by Aptech”; } } Sử dụng cú pháp sau để dịch Applet: javac Applet1.java Core Java Để thực thi applet, ta cần tạo file HTML File HTML sử dụng thẻ applet Thẻ applet lấy tham số đường dẩn file applet Thẻ applet có hai thuộc tính sau: Width Height Để truyền tham số vào applet, sử dụng param, sau thẻ value Sau ví dụ thẻ applet: Lúc này, ta thực thi applet cách dùng trình xem applet Đây cơng cụ JDK Để chạy file HTML trình xem applet, ta gõ câu lệnh sau: Appletviewer abc.html // ‘abc.html’ tên file HTML Một tuỳ chọn khác applet ta thêm thẻ applet dòng thích đoạn code Lúc đó, applet dịch, thực thi cách sử dụng lệnh sau: Appletviewer Applet1.java Sau kết chương trình trên: Hình 6.1 Applet 6.2.1 Sự khác giũa Application Applet Sau khác application applet: Để thực thi application dùng trình thơng dịch Java, applet chạy trình duyệt (có hổ trợ Java) hay sử dụng công cụ AppletViewer, công cụ kèm với JDK Quá trình thực thi application phương thức ‘main()’ Tuy nhiên applet Chương 6: Applets khơng làm Các application sử dụng ‘System.out.println()’ để hiển thị kết hình applet sử dụng phương thức ‘drawstring()’ để xuất hình Một điều đáng lưu ý chương trình Java đơn lẻ vừa application vừa applet Chức applet bỏ qua thực thi application ngược lại Chương trình 6.2 minh hoạ điều Chương trình 6.2 import java.applet.Applet; import java.awt.*; /* */ public class both extends Applet { Button btn; public void init() { btn = new Button ("Click"); } public void paint (Graphics g) { g.drawString ("Applet", 70, 50); } public static void main (String args[]) { both app = new both(); app.init(); System.out.println("Application Main"); } } Sau biên dịch chương trình, thực thi applet cách sử dụng cú pháp sau: appletviewer both.java Kết sau: Core Java Hình 6.2 Applet Nếu chạy chương trình application, sử dụng cú pháp sau: java both Kết là: Hình 6.3 Application Khi applet chạy trình duyệt web, đặc điểm thực hữu ích bạn muốn tải applet frame Ví dụ: applet tạo để chat, số website sử dụng cửa sổ chat riêng biệt để chat Bạn kết hợp đặc điểm frame applet vào chương trình 6.2.2 Những giới hạn bảo mật applet Có số hạn chế mà applet khơng thể làm Bởi applet Java phá hỏng tồn hệ thống user Các lập trình viên Java viết applet để xố file, lấy thơng tin nhân hệ thống… Vì thế, applet java làm việc sau: Không thể đọc ghi file hệ thống file user Không thể giao tiếp với site internet, với trang web có applet mà thơi Khơng thể chạy chương trình hệ thống người đọc Không thể tải chương trình lưu trữ hệ thống user Những giới hạn applet chạy trình duyệt Netscape Navigator Microsoft Internet Explorer 6.3 Chu trình sống Applet Chương 6: Applets Chu trình sống Applet mô tả sơ đồ đây: Destroy Creation Stop Starting Initalization Hình 6.4 Chu trình sống applet Trước tiên, applet tạo Bước khởi tạo Điều xảy applet nạp Quá trình bao gồm việc tạo đối tượng mà applet cần Phương thức init() override để cung cấp hành vi để khởi tạo Một applet khởi tạo, applet khởi động Applet khởi động ngừng trước Ví dụ, trình duyệt nhảy đến liên kết trang khác, lúc applet bị ngừng, khởi động trở lại user quay trang Sự khác trình khởi tạo trình khởi động applet khởi động nhiều lần, qúa trình khởi tạo xảy lần Phương thức ‘start()’ override để cung cấp thao tác khởi động cho applet Phương thức ‘stop()’ gọi user khơng trang nữa, trang thu nhỏ lại taskbar Kế tiếp phương thức ‘destroy()’ Phương thức giúp applet dọn dẹp trước giải phóng khỏi vùng nhớ, trước truyệt duyệt kết thúc Phương thức dùng để huỷ luồng (thread) hay trình chạy Phương thức ‘destroy()’ khác với phương thức finalize() phương thức destroy() dùng cho applet, finalize() cách tổng quát để dọn dẹp applet Phương thức paint() phương thức quan trọng khác Phương thức cho phép ta hiển thị hình Có thể text, đường thẳng, màu nền, hình ảnh Phương thức xảy nhiều lần suốt trình applet tồn Phương thức thực thi lần sau applet khởi tạo Nó lặp lặp lại di chuyển từ cửa sổ trình duyệt sang cửa sổ khác Nó xảy cửa sổ trình duyệt thay đổi vị trí hình Phương thức ‘paint()’ có tham số Tham số đối tượng lớp Graphics Lớp Graphics thuộc lớp java.awt, phải import đoạn code applet Chúng ta sử dụng đoạn mã sau: import java.awt.Graphics; Core Java 6.4 Truyền tham số cho Applet Trong chương trình sau, truyền tham số cho applet Thành phần nút ‘bNext’ có tên truyền tham số Phương thức ‘init()’ kiểm tra tham số có thên ‘mybutton’ Sau đó, tạo nút với chuổi tên nút Nếu khơng có tham số truyền vào, nút có tên mặc định ‘Default’ Bây định nghĩa thẻ đoạn mã HTML sau: /* */ Chương trình 6.3 import java.awt.*; import java.applet.*; /* */ public class Mybutton1 extends Applet { Button bNext; public void init() { /*getParameter returns the value of the specified pareameter in the form of a String object*/ String str = getParameter("mybutton"); //when no parameter is passed if (str==null) str = new String ("Default"); //when parameter is passed bNext = new Button(str); add (bNext); } } Sau kết chương trình trên: Chương 6: Applets Hình 6.5: truyền tham số cho applet Bây sử dụng lớp Graphics để vẻ hình chẳng hạn như: đường thẳng, hình oval, hình chữ nhật Chúng ta học lớp Font phần sau Lớp dùng để in văn font 6.5 Lớp Graphics Java cung cấp gói AWT cho phép ta vẽ hình đồ hoạ Lớp Graphics bao gồm tập hợp nhiều phương thức Nhưng phương thức sử dụng để vẽ hình hình sau: Oval Rectangle Square Circle Lines Text Bạn vẽ hình màu Frame, Applet canvas môi trường để hiển thị đồ hoạ Để vẽ hình ảnh cần phải có đồ hoạ (Graphical Background) Để có đồ hoạ, goi phương thức ‘getGraphics()’ hay phương thức phương thức sau đây: repaint() Được gọi cần vẽ lại đối tượng vẽ update(Graphics g) Được gọi cách tự động phương thức ‘repaint()’ Phương thức xoá đối tượng vẽ, truyền cho đối tượng lớp Graphics để gọi phương thức ‘paint()’; paint(Graphics g) Được gọi phương thức update() Đối tượng truyền cho phương thức dùng để vẽ Phương thức dùng để vẽ hình ảnh đồ hoạ khác Việc gọi phương thức paint() lặp lặp lại thông qua phương thức repaint() xố Core Java hình vẽ trước Để vẽ hình mà giữ lại hình vẽ trước đó, cần override lại phương thức upate() Public void update (Graphics g) { paint (g); } Ở đây, phương thức update() khơng xố đối tượng vẽ, gọi phương thức paint() Để làm điều này, truyền đối tương lớp Graphics GraphicsContext cho phương thức paint() Ở đây, đối tượng lớp Graphics ‘g’ 6.5.1 Vẽ chuỗi, ký tự byte Chương trình sau minh hoạ vẽ chuỗi, ký tự byte Để vẽ in chuỗi, lớp Graphics cung cấp phương thức ‘drawString()’ Cú pháp sau: DrawString (String str, int xCoor, int yCoor); Ba tham số là: Chuỗi cần vẽ Toạ độ X frame, nơi chuỗi cần vẽ Toạ độ Y frame, nơi chuỗi cần vẽ Để vẽ xuất ký tự frame, lớp Graphics cung cấp phương thức ‘drawChars’ Cú pháp sau: DrawChars (char array[], int offset, int length, int xCoor, int yCoor); Chú thích tham số: Mảng ký tự Vị trí bắt đầu, nới ký tự vẽ Số ký tự cần vẽ Toạ độ X, nơi ký tự cần vẽ Toạ độ Y, nơi ký tự cần vẽ Lớp Graphics cung cấp phương thức ‘drawBytes()’ để vẽ in byte frame Cú pháp phương thức sau: DrawBytes (byte array[], int offset, int length, int xCoor, int yCoor); tham số phương thức là: Mảng byte Vị trí offset hay vị trí bắt đầu Số byte cần vẽ Toạ độ X Toạ độ Y Chương 6: Applets Đối với ký tự mảng byte, in phần mảng mà Ở đây, toạ độ x y toạ độ tính theo dòng Chương trình 6.4 minh hoạ cách vẽ chuỗi, ký tự byte Chương trình 6.4 import java.awt.*; public class DrawStrings extends Frame { public DrawStrings() { super ("Draw strings, characters, bytes"); setSize (300, 300); setVisible (true); } public void paint(Graphics g) { g.drawString ("Good Morning", 50, 50); g.drawString ("Good Afternoon", 50, 75); g.drawString ("Good Night", 50, 100); char ch[] = {}; } public static void main (String args[]) { new DrawStrings(); } } Chương trình vẽ chuỗi, ký tự từ mảng ký tự, vẽ byte từ mảng byte Bạn phải import gói java.awt để sử dụng phương thức đồ hoạ có sẳn gói Ta phải làm điều lớp Graphics nằm gói Sau kết chương trình trên: Hình 6.6 Strings, characters bytes 6.5.2 Vẽ đường thẳng (Line) Oval 10 Core Java Sau cú pháp phương thức sử dụng để vẽ đường thẳng hình oval: drawLine (int x1, int y1, int x2, int y2); drawOval (int xCoor, int yCoor, int width, int height); setColor (Color c); fillOval (int xCoor, int yCoor, int width, int height); Phương thức ‘drawLine()’ nhận tham số sau: Toạ Toạ Toạ Toạ độ độ độ độ X, nơi bắt đầu vẽ (x1) Y, nơi bắt đầu vẽ (y1) X, nơi kết thúc vẽ (x2) Y, nơi kết thúc vẽ (y2) Phương thức bắt đầu vẽ toạ độ ‘x1’ ‘y1’, kết thúc toạ độ ‘x2’ ‘y2’ Để vẽ đường thẳng có màu, thiết lập màu Phương thức ‘setColor’ dùng để thiết lập màu cho hình ảnh đồ hoạ Trong chương trình này, sử dụng câu lệnh sau để chọn màu xanh: g.setColor (Color.blue); Phương thức ‘drawOval()’ nhận thông số sau: Toạ độ X Toạ độ Y Chiều rộng hình Oval Chiều cao hình Oval Đối với hình oval rộng, giá trị chiều rộng lớn chiều cao, ngược lại hình oval cao Phương thức ‘fillOval()’ nhận thông số, tơ hình oval Sử dụng phương thức setColor để tơ hình oval; g.setColor(Color.cyan); Ở đây, hình oval tô với màu cyan Lớp Color cung cấp màu khác mà hệ thống có hổ trợ 6.5.3 Vẽ hình chữ nhật (Rectangle) hình chữ nhật bo góc (Rounded Rectangle) Sau cú pháp phương thức dùng để vẽ hình chữ nhật hình chữ nhật bo góc: drawRect (int xCoor, int yCoor, int width, int height); fillRect (int xCoor, int yCoor, int width, int height); drawRoundRect (int xCoor, int yCoor, int width, int height, int arcwidth, int archeight); Chương 6: Applets 11 fillRoundRect (int xCoor, int yCoor, int width, int height, int arcwidth, int archeight); Phương thức ‘drawRect()’ dùng để vẽ hình chữ nhật đơn giản Phương thức nhận tham số sau: Toạ độ X Toạ độ Y Chiều rộng hình chữ nhật Chiều cao hình chữ nhật Phương thức vẽ hình chữ nhật có chiều rộng chiều cao cho trước, bắt đầu toạ độ X, Y Chúng ta thiết lập màu hình chữ nhật Ở đây, chọn màu đỏ Câu lệnh sau: g.setColor (Color.red); Phương thức ‘drawRoundRect()’ vẽ hình chữ nhật có góc tròn Phương thức nhận tham số, tham số đầu giống với phương thức drawRect Hai tham số khác là: arcwidth hình chữ nhật archeight hình chữ nhật Ở đây, ‘arcwidth’ làm tròn góc trái góc phải hình chữ nhật ‘archeight’ làm tròn góc đỉnh góc đáy hình chữ nhật Ví dụ, arcwidth = 20 có nghĩa hình chữ nhật làm tròn cạnh trái cạnh phải cạnh 10 pixel Tương tự, archeight = 40 tạo hình chữ nhật làm tròn từ đỉnh đến đáy 20 pixel Pìxel đơn vị đo Nó đơn vị nhỏ vùng vẽ Để tô hay vẽ hình chữ nhật hình chữ nhật bo góc, sử dụng phương thức ‘fillRect()’ ‘fillRoundRect()’ Những phương thức nhận tham số giống với phương thức drawRect() drawRoundRect() Những phương thức vẽ hình ảnh với màu cho trước màu hành Lệnh sau dùng để vẽ hình với màu xanh: g.setColor(Color.green); 6.5.4 Vẽ hình chữ nhật 3D vẽ hình cung (Arc) Sau cú pháp phương thức dùng để vẽ hình chữ nhật 3D hình cung: draw3Drect (int xCoord, int yCoord, int width, int height, boolean raised); drawArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight); fillArc(int xCoord, int yCoord, int width, int height, int arcwidth, int archeight); Phương thức ‘draw3Drect()’ nhận tham số tham số đầu tương tự với phương thức để vẽ hình chữ nhật Tuy nhiên, giá trị tham số thứ định hình chữ nạh6t có chiều hay khơng Tham số thứ có kiểu liệu Boolean Giá trị True có nghĩa hình chữ nhật 3D 12 Core Java Phương thức ‘drawArc()’ nhận tham số sau: Toạ độ x Toạ độ y Chiều rộng cung vẽ Chiều cao cung vẽ Góc bắt đầu Độ rộng cung so với góc ban đầu Phương thức ‘fillArc()’ nhận tham số giống phương thức drawArc(), vẽ cung tơ cung với màu thời 6.5.5 Vẽ hình PolyLine Chương trình sau lấy điểm từ hai mảng để vẽ loạt đường thẳng Cú pháp phương thức sau: drawPolyline (int xArray[], int yArray[], int totalPoints); g.setFont (new Font(“Times Roman”, Font.BOLD, 15)); Phương thức ‘drawPolyline()’ nhận tham số sau: Mảng lưu trữ toạ độ x điểm Mảng lưu trữ toạ độ y điểm Tổng số điểm cần vẽ Để vẽ đường thẳng ta lấy điểm từ hai mảng sau: (array1[0], array2[0]) (array1[1], array2[1]) (array1[2], array2[2])… Số đường thẳng vẽ nhỏ số truyền vào thông số thứ phương thức drawPoyline() Ví dụ như: totalPoints - Chương trình 6.5 minh hoạ vẽ polyline Chương trình 6.5 import java.awt.*; class PolyLines extends Frame { int x1[] = {50, 75, 95, 115, 135}; int y1[] = {50, 30, 60, 75, 60}; int x2[] = {67, 82, 95, 120, 135}; int y2[] = {150, 130, 160, 155, 180}; public PolyLines()//constructor { Chương 6: Applets 13 super ("Poly Lines"); setSize (300, 300); setVisible (true); } public void paint (Graphics g) { g.drawPolyline (x1, y1, 5); g.setFont (new Font("Times Roman", Font.BOLD, 15)); g.drawString("Current Color is black", 100, 100); g.setColor(Color.blue); g.drawPolyline (x2, y2, 5); g.drawString ("Current Color is blue", 100, 200); } public static void main (String args[]) { new PolyLines(); } } Kết chương trình minh hoạ hình 6.7 Hình 6.7 6.5.6 Vẽ tơ đa giác (Polygon) Lớp Graphics cung cấp hai phương thức để vẽ đa giác Phương thức nhận đối tượng lớp Polygon Phương thức thức lấy hai mảng điểm, tổng số điểm cần vẽ Chúng ta sử dụng phương thức để vẽ đa giác Cú pháp drawPolygon() sau: drawPolygon(int x[], int y[], int numPoints); Cú pháp fillPolygon() sau: fillPolygon (int x[], int y[], int numPoints); 14 Core Java Chương trình lấy điểm từ mảng để vẽ đa gíac Phương thức ‘drawPolygon()’ nhận tham số sau giống phương thức drawPolyline() Mảng lưu trữ toạ độ x điểm Mảng lưu trữ toạ độ y điểm Tổng số điểm cần vẽ Chương trình 6.6 import java.awt.*; class PolyFigures extends Frame { int x1[] = {50, 25, 40, 100, 80}; int x2[] = {80, 30, 50, 150, 100, 170}; int y1[] = {50, 70, 120, 120, 80}; int y2[] = {150, 170, 200, 220, 240,190}; public PolyFigures() { super ("Poly figures"); setSize(300, 300); setVisible (true); } public void paint (Graphics g) { g.drawPolygon (x1, y1, 5); g.setColor (Color.cyan); g.fillPolygon (x2, y2, 6); } public static void main (String args[]) { new PolyFigures(); } } Sau kết chương trình trên: Chương 6: Applets 15 Hình 6.8 Polygon 6.6 Điều khiển màu Trong Java, điều khiển màu cách dùng màu đỏ (red), xanh (green), xanh dương (blue) Java sử dụng mô kiểu màu RGB Đối tượng lớp Color chứa số nguyên cho tham số red, green, blue Bảng sau trình bày giá trị có màu đó: Thành phần Phạmvi Red 0-255 Green 0-255 Blue 0-255 Bảng 6.2 Phạm vi giá trị thành phần màu Sử dụng giá trị để tạo màu tuỳ thích Cú pháp hàm dựng để tạo màu sau: color (int red, int green, int blue); Bảng sau hiển thị giá trị màu thường gặp: Màu White Light Gray Gray Dark Gray Black Pink Orange Yellow Magenta Re d 255 192 128 64 255 255 255 255 Gree n 255 192 128 64 175 200 255 Blue 255 192 128 64 175 0 255 Bảng 6.3 Các giá trị RGB Các đối tượng màu khác tạo giá trị Những đối có 16 Core Java thể dùng để vẽ tơ đối tượng đồ hoạ Ví dụ, để tạo màu hồng, ta dùng lệnh sau: color c = new Color (255, 175, 175); Ta thiết lập màu cách dùng lệnh sau: g.setColor (c); //g đối tượng lớp Graphics Sử dụng kết hợp giá trị RGB để tạo màu tuỳ ý Để cho dể hơn, lớp Color cung cấp sẳn số màu color.white color.orange color.lightgray color.red color.blue color.cyan color.yellow Bảng 6.4 Các màu thường gặp color.black color.gray color.darkgray color.green color.pink color.magenta Đoạn mã sau minh hoạ cách tạo màu tuỳ ý: Color color1 = new Color (230, 140, 60); Color color4 = new Color (90, 210, 130); g.setColor (color1); int myred = color1.getRed (); int mygreen = color1.getGreen (); int myblue = color1.getBlue(); color1 = color1.darker(); color4 = color4.brighter(); 6.7 Điều khiển Font Java cung cấp lớp Font gói java.awt cho phép sử dụng loại font khác Lớp bao gồm số phương thức Để sử dụng font, nên kiểm tra xem hệ thống có hổ trợ hay khơng Phương thức’getAllFont()’ trả tất font mà hệ thống hổ trợ Trước tiên, khai báo đối tượng lớp GraphicsEnvironment sau: Graphicenvironment ge; ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); Đối tượng sử dụng cú pháp sau để lấy tất font có mảng Font: Font f[] = ge.getAllFonts(); Phương thức getAllFont() sử dụng Phương thức getAllFont() thuộc lớp Chương 6: Applets 17 GraphicsEnvironment Đây lớp trừu tượng, ta khơng thể khởi tạo lớp để truy cập phương thức getAllFont(), sử dụng phương thức ‘getLoacalGraphicsEnvironment()’ lớp GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); Tham chiếu đến lớp gán cho biến ge Biến gọi phương thức getAllFont() Chúng ta sử dụng font khác để hiển thị chuổi khác Phương thức getFont() trả font mặc định dùng để hiển thị chuỗi, khơng có chọn font Font defaultFont = g.getFont (); //g đối tượng Graphics g.drawString (“Default Font is ”, 30, 50); Dialog font mặc định hệ thống Để thay đổi font mặc định hệ thống thành font khác, tạo đối tượng lớp Font Hàm dựng Font lấy tham số sau: Tên font Ta lấy tên thơng qua phương thức getFontList() Kiểu font Ví dụ: Font.BOLD, Font.PLAIN, Font.ITALIC Kích thước font Cú pháp sau minh hoạ thông số trên: Font f1 = new Font (“SansSerif”, Font.ITALIC, 16); g.setFont (f1); Ba tham số truyền là: ‘SanSerif’ – tên font, Font.BOLD – kiểu font, 14 kích thước font Những thơng số tạo đối tượng f1 Chúng ta kết hợp kiểu font lại với Hãy xét ví dụ sau: Font f3 = new Font (“Monospaced”, Font.ITALIC+Font.BOLD, 20); Ở kiểu font f3 vừa đậm, vừa nghiêng 6.8 Lớp FontMetrics Lớp xác định kích thước ký tự khác thuộc loại font khác Xác định kích thước bao gồm chiều cao (height), baseline, descent, leading Điều cần thiết ký tự in chiếm kích thước riêng Bạn cần tính kích thước cần thiết in ký tự để tránh ký tự ghi đè lên Height: chiều cao font Baseline (Dòng sở): xác định sở ký tự (không kể phần thấp ký tự) Ascent: khoảng cách từ đường baseline đến đỉnh ký tự Descent: khoảng từ baseline đề đáy ký tự Leading: khoảng cách dòng chữ in 18 Core Java Chương trình 6.7 minh hoạ việc sử dụng phương thức khác mà lớp FontMetrics có Trong chương trình này, sử dụng phương thức khác để xem xét chi tiết loại font khác Lớp FontMetric lớp trừu tượng Phương thức getFontMetrics() có tham số đối tượng lớp Font, FontMetrics đơi với font FontMetrics fm = g.getFontMetrics (f1); Lệnh tạo đối tượng fm lớp FontMetrics, với đối tượng f1 Bây giờ, sử dụng fm để lấy chi tiết font Các phương thức getHeight, getAscent(), getDescent(), getLeading() trả chi tiết font Phương thức getFont() lớp FontMetrics trả Font mà kết hợp với đối tượng lớp FontMetrics Phương thức getName() lớp Font trả tên Font Chương trình 6.7 import java.awt.*; class FontMetricsUse extends Frame { public FontMetricsUse() { super ("Detail oc Fonts"); setSize (400, 300); setVisible(true); } public void paint (Graphics g) { Font f1 = new Font ("Times Roman", Font.PLAIN, 22); FontMetrics fm = g.getFontMetrics (f1); String name = fm.getFont().getName(); g.drawString ("Details of Font " + name, 30, 50); g.drawString ("Leading: " + String.valueOf (fm.getHeight()), 50, 75); g.drawString ("Leading: " + String.valueOf (fm.getAscent()), 50, 100); g.drawString ("Leading: " + String.valueOf (fm.getDescent()), 50, 125); g.drawString ("Leading: " + String.valueOf (fm.getLeading()), 50, 150); Font f2 = new Font ("DialogInput", Font.PLAIN, 22); fm = g.getFontMetrics (f2); name = fm.getFont().getName(); g.drawString ("Details of Font " + name, 30, 175); g.drawString ("Leading: " + String.valueOf (fm.getHeight()), 50, 200); g.drawString ("Leading: " + String.valueOf (fm.getAscent()), 50, 225); g.drawString ("Leading: " + String.valueOf (fm.getDescent()), 50, 250); g.drawString ("Leading: " + String.valueOf (fm.getLeading()), 50, 275); } public static void main (String args[]) { new FontMetricsUse (); Chương 6: Applets 19 } } Kết chương trình trên: Hình 6.9 Lớp FontMetrics Chương trình 6.8 minh hoạ cách lớp FontMetrics sử dụng để in đoạn văn nhiều font, nhiều dòng Trong chương trình này, cần in văn nhiều font nhiều dòng Lớp FontMetrics giúp ta xác định khoảng cách cần thiết để in dòng văn cho font Điều thật cần thiết, dòng thứ in sau dòng thứ Trước tiên in msg1 sử dụng font Monospaced Sau đó, xuất msg2 sử dụng font iaglogInput Để làm điều này, cần tính khỏng cách cần thiết để xuất msg1 Phương thức stringWidth() lớp FontMetrics dùng để tính tổng khoảng cách cần thiết để xuất msg1 chúng cộng thêm khoảng cách vào biến x, lấy vị trí mà bắt đầu in đoạn văn kế tiếp, msg2 Phương thức setFont() dùng để thiết lập font để in văn Kế đó, xuất msg1 msg2 dòng khác sử dụng chung font Monospaced Ở đây, cần biết khoảng cách chiều cao font, để in dòng Phương thức getHeight() dùng để làm điều Chương trình 6.8 import java.awt.*; class MultiFontMultiLine extends Frame { public MultiFontMultiLine() { super ("Multiline Text"); setSize (450, 200); 20 Core Java setVisible (true); } public void paint (Graphics g) { Font f1 = new Font ("MonoSpaced", Font.BOLD, 18); Font f2 = new Font ("DialogInput", Font.PLAIN, 14); int x = 20; int y = 50; String msg1 = "Java Language"; String msg2 = "A new approach to programming"; FontMetrics fm = g.getFontMetrics(f1); g.setFont(f1); g.drawString (msg1, x, y); x = x + fm.stringWidth(msg1); g.setFont(f2); g.drawString (msg2, x, y); g.setFont(f1); y = 100; x = 20; int height = fm.getHeight(); g.drawString (msg1, x, y); y += height; g.drawString (msg2, x, y); } public static void main (String args[]) { new MultiFontMultiLine (); } } Kết chương trình trên: Hình 6.10 Văn xuất nhiều font, nhiều dòng 6.9 Chọn mode để vẽ Các đối tượng vẽ cách sử dụng mode vẽ Khi đối tượng vẽ, Chương 6: Applets 21 đè lên hình vẽ trước Tương tự, đối tượng vẽ vẽ lại nhiều lần chúng xố đối tượng vẽ trước Chỉ hiển thị nội dung đối tượng Để làm cho nội dung củ nội dung hiển thị hình, lớp Graphics cung cấp phương thức setXORMode (Color c); Chương trình 6.9 minh hoạ tiện lợi của việc sử dụng phương thức setXORMode() Ở đây, sử dụng phương thức setXORMode() để tô hình đồ hoạ khác nhau, mà khơng đè lên hình khác Kết là, sử dụng mode XOR hiển nhiên tất hình hiển thị đầy đủ Điều có nghĩa hình khơng đè lên hình củ Thay vào đó, phần chung hình hiển thị thành màu khác Nhưng không sử dụng mode XOR, hình hồn tồn che khuất hình trước Chương trình 6.9 import java.awt.*; class PaintMode extends Frame { public PaintMode() { super ("Paint Mode"); setSize (300, 300); setVisible (true); } public void paint (Graphics g) { g.setPaintMode (); g.setColor (Color.blue); g.fillRect (50,50,40, 30); g.setColor (Color.pink); g.fillOval (70, 65, 30, 60); g.setColor (Color.cyan); g.fillRoundRect (90, 80, 70, 50, 20, 30); g.setColor (Color.blue); g.fillRect (50, 150, 40, 30); g.setXORMode (Color.yellow); g.fillOval (70, 165, 30, 60); g.setXORMode (Color.magenta); g.fillRoundRect (90, 180, 60, 40, 50, 20); } public static void main (String args[]) { new PaintMode(); } } Kết chương trình trên: 22 Core Java Hình 6.11 Paint mode Tóm tắt Applet chương trình Java chạy trình duyệt web Chương trình Java đơn lẻ vừa applet, vừa application Lớp Graphics nằm gói AWT, bao gồm phương thức sử dụng để vẽ hình đồ hoạ oval, hình chữ nhật, hình vng, hình tròn, đường thẳng văn Java sử dụng bảng màu RGB Lớp Font gói java.awt cho phép sử dụng nhiều font khác Lớp FontMetrics xác định kích thước ký tự !!! Check & Exercise !!! Chương 6: Applets 23 ... thẻ applet Thẻ applet lấy tham số đường dẩn file applet Thẻ applet có hai thuộc tính sau: Width Height Để truyền tham số vào applet, sử dụng param, sau thẻ value Sau ví dụ thẻ applet: Lúc này, ta thực thi applet cách dùng trình xem applet Đây cơng cụ JDK Để chạy file HTML trình xem applet, ta gõ câu lệnh sau: Appletviewer