Lập trình Java cơ bản - Chương 6: Applets
Sau khi học xong chương này, bạn có thể nắm được các nội dung sau:
Hiểu được các Applet của Java
Phân biệt applet và các ứng dụng application
Tìm hiểu chu trình sống cuả một applet
Tạo các applet
Hiển thị các hình ảnh sử dụng applet
Truyền tham số cho applet
Tìm hiểu ứng dụng của applet trong GUI
của các màu thường gặp: Màu Red Green Blue White 255 255 255 Light Gray 192 192 192 Gray 128 128 128 Dark Gray 64 64 64 Black 0 0 0 Pink 255 175 175 Orange 255 200 0 Yellow 255 255 0 Magenta 255 0 255 Bảng 6.3 Các giá trị RGB Các đối tượng màu khác nhau có thể được tạo bằng những giá trị này. Những đối này có thể được dùng để vẽ hoặc tô các đố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 có thể thiết lập màu bằng cách dùng lệnh sau: g.setColor (c); //g là đối tượng của lớp Graphics Sử dụng kết hợp các giá trị RGB để tạo ra một màu tuỳ ý. Để cho dể hơn, lớp Color cung cấp sẳn một số màu. color.white color.black color.orange color.gray color.lightgray color.darkgray color.red color.green color.blue color.pink color.cyan color.magenta color.yellow Bảng 6.4 Các màu thường gặp Đoạn mã sau minh hoạ cách tạo một 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 trong gói java.awt cho phép sử dụng các loại font khác nhau. Lớp này bao gồm một số phương thức. Để sử dụng font, chúng ta nên kiểm tra xem hệ thống có hổ trợ hay không. Phương thức’getAllFont()’ trả về tất cả các font mà hệ thống hổ trợ. Trước tiên, khai báo một đối tượng của lớp GraphicsEnvironment như sau: Graphicenvironment ge; ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); Đối tượng này sử dụng cú pháp sau để lấy tất cả các font có trong mảng Font: Font f[] = ge.getAllFonts(); Phương thức getAllFont() được sử dụng ở đây. Phương thức getAllFont() thuộc lớp GraphicsEnvironment. Đây là lớp trừu tượng, do đó ta không thể khởi tạo lớp này. để truy cập phương thức getAllFont(), chúng ta sử dụng phương thức ‘getLoacalGraphicsEnvironment()’ của lớp GraphicsEnvironment. ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); Tham chiếu đến lớp này được gán cho biến ge. Biến này gọi phương thức getAllFont(). Chúng ta sử dụng các font khác nhau để hiển thị các chuổi khác nhau. Phương thức getFont() trả về font mặc định dùng để hiển thị chuỗi, khi không có chọn font nào cả. Font defaultFont = g.getFont (); //g là đối tượng Graphics g.drawString (“Default Font is ”, 30, 50); Dialog là font mặc định của hệ thống. Để thay đổi font mặc định của hệ thống thành font khác, chúng ta tạo đối tượng của lớp Font. Hàm dựng của Font lấy 3 tham số sau: Tên của font. Ta có thể lấy tên thông qua phương thức getFontList(). Kiểu của font. Ví dụ: Font.BOLD, Font.PLAIN, Font.ITALIC. Kích thước font. Cú pháp sau minh hoạ những thông số trên: Font f1 = new Font (“SansSerif”, Font.ITALIC, 16); g.setFont (f1); Ba tham số được truyền ở đây là: ‘SanSerif’ – tên của font, Font.BOLD – kiểu font, 14 là kích thước của font. Những thông số này tạo ra đối tượng f1. Chúng ta có thể kết hợp 2 kiểu font lại với nhau. Hãy xét ví dụ sau: Font f3 = new Font (“Monospaced”, Font.ITALIC+Font.BOLD, 20); Ở đây kiểu font của f3 vừa đậm, vừa nghiêng. 6.8 Lớp FontMetrics Lớp này xác định kích thước của các ký tự khác nhau thuộc các loại font khác nhau. Xác định kích thước bao gồm chiều cao (height), baseline, descent, và leading. Điều này rất cần thiết vì các ký tự khi in đều chiếm một kích thước riêng. Bạn cần tính kích thước cần thiết khi in các ký tự để tránh các ký tự ghi đè lên nhau. Height: chiều cao của font. Baseline (Dòng cơ sở): xác định cơ sở của các ký tự (không kể phần thấp nhất của ký tự) Ascent: khoảng cách từ đường baseline đến đỉnh của ký tự. Descent: khoảng các từ baseline đề đáy của ký tự. Leading: khoảng cách giữa các dòng chữ in. Chương trình 6.7 minh hoạ việc sử dụng các phương thức khác nhau mà lớp FontMetrics có. Trong chương trình này, chúng ta sử dụng các phương thức khác nhau để xem xét chi tiết các loại font khác nhau. Lớp FontMetric là lớp trừu tượng. Phương thức getFontMetrics() có tham số là đối tượng của lớp Font, vì FontMetrics đi đôi với một font nào đó. FontMetrics fm = g.getFontMetrics (f1); Lệnh này tạo đối tượng fm của lớp FontMetrics, cùng với đối tượng f1. Bây giờ, chúng ta sử dụng fm để lấy chi tiết của font. Các phương thức getHeight, getAscent(), getDescent(), và getLeading() trả về chi tiết của font. Phương thức getFont() của lớp FontMetrics trả về Font mà kết hợp với đối tượng của lớp FontMetrics. Phương thức getName() của lớp Font trả về 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 (); } } Kết quả của 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 được sử dụng để in đoạn văn bản nhiều font, nhiều dòng. Trong chương trình này, chúng ta cần in văn bản nhiều font trên nhiều dòng. Lớp FontMetrics giúp ta xác định khoảng cách cần thiết để in một dòng văn bản cho một font nào đó. Điều này thật cần thiết, bởi vì dòng thứ 2 được in ngay sau dòng thứ nhất. Trước tiên chúng ta in msg1 sử dụng font Monospaced. Sau đó, chúng ta xuất msg2 sử dụng font iaglogInput. Để làm được điều này, chúng ta cần tính khỏng cách cần thiết để xuất msg1. Phương thức stringWidth() của lớp FontMetrics được dùng để tính ra tổng khoảng cách cần thiết để xuất msg1. khi chúng cộng thêm khoảng cách này vào biến x, chúng ta sẽ lấy được vị trí mà chúng ta bắt đầu in đoạn văn bản kế tiếp, msg2. Phương thức setFont() được dùng để thiết lập font để in văn bản. Kế đó, chúng ta xuất msg1 và msg2 trên các dòng khác nhau sử dụng chung 1 font Monospaced. Ở đây, chúng ta cần biết khoảng cách chiều cao của font, để in dòng kế tiếp. Phương thức getHeight() được dùng để làm điều này. Chương trình 6.8 import java.awt.*; class MultiFontMultiLine extends Frame { public MultiFontMultiLine() { super ("Multiline Text"); setSize (450, 200); 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 quả của chương trình trên: Hình 6.10 Văn bản được xuất nhiều font, nhiều dòng 6.9 Chọn mode để vẽ Các đối tượng được vẽ bằng cách sử dụng mode vẽ. Khi một đối tượng mới được vẽ, nó sẽ đè lên các hình đã vẽ trước đây. Tương tự, khi các đối tượng được vẽ đi vẽ lại nhiều lần thì chúng sẽ xoá các đối tượng đã vẽ trước đó. Chỉ hiển thị nội dung của đối tượng mới. Để làm cho nội dung củ và nội dung mới đều hiển thị trên màn 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 của việc sử dụng phương thức setXORMode(). Ở đây, chúng ta sử dụng phương thức setXORMode() để tô các hình đồ hoạ khác nhau, mà không đè lên các hình khác. Kết quả là, khi sử dụng mode XOR thì hiển nhiên là tất cả các hình đều hiển thị đầy đủ. Điều này có nghĩa là các hình mới không đè lên các hình củ. Thay vào đó, phần chung giữa các hình sẽ được hiển thị thành một màu khác. Nhưng khi không sử dụng mode XOR, hình mới hoàn toàn che khuất những 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 quả của chương trình trên: Hình 6.11 Paint mode Tóm tắt Applet là chương trình Java chạy trong trình duyệt web. Chương trình Java đơn lẻ có thể vừa là applet, vừa là application. Lớp Graphics nằm trong gói AWT, bao gồm các phương thức được sử dụng để vẽ các hình đồ hoạ như oval, hình chữ nhật, hình vuông, hình tròn, đường thẳng và văn bản. Java sử dụng bảng màu RGB. Lớp Font trong gói java.awt cho phép sử dụng nhiều font khác nhau. Lớp FontMetrics xác định kích thước của các ký tự. !!! Check & Exercise !!!
File đính kèm:
- Lập trình Java cơ bản - Chương 6_Applets.doc