Core Java - 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
hổ trợ hay không. Phương thức’getAllFont()’ trả vê ̀ tâ ́t ca ̉ ca ́c font mà hê ̣ thô ́ng hổ trợ. 19 Trước tiên, khai ba ́o một đối tượng của lớp GraphicsEnvironment như sau: Graphicenvironment ge; ge = GraphicsEnvironment.getLocalGraphicsEnvironment (); Đối tượng na ̀y sử dụng cú pha ́p sau đê ̉ lâ ́y tâ ́t ca ̉ ca ́c font có trong ma ̃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 ta ̣o lớp na ̀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 na ̀y được ga ́n cho biê ́n ge. Biê ́n na ̀y gọi phương thức getAllFont(). Chúng ta sử dụng ca ́c font khác nhau đê ̉ hiê ̉n thi ̣ ca ́c chuổi kha ́c nhau. Phương thức getFont() trả vê ̀ font mặc đi ̣nh dùng đê ̉ hiê ̉n thi ̣ chuô ̃i, khi không có cho ̣n font na ̀o ca ̉. Font defaultFont = g.getFont (); //g là đối tượng Graphics g.drawString (“Default Font is ”, 30, 50); Dialog la ̀ font mặc đi ̣nh của hê ̣ thô ́ng. Đê ̉ thay đổi font mặc đi ̣nh của hê ̣ thống tha ̀nh font kha ́c, chúng ta ta ̣o đối tượng của lớp Font. Ha ̀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. Vi ́ dụ: Font.BOLD, Font.PLAIN, Font.ITALIC. ¾ Ki ́ch thước font. Cú pha ́p sau minh hoa ̣ 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à ki ́ch thước của font. Những thông sô ́ na ̀y ta ̣o ra đối tượng f1. Chúng ta có thê ̉ kê ́t hợp 2 kiê ̉u font lại với nhau. Ha ̃y xe ́t vi ́ 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. 20 6.8 Lớp FontMetrics Lớp na ̀y xa ́c đi ̣nh ki ́ch thước của ca ́c ký tự kha ́c nhau thuộc ca ́c loa ̣i font khác nhau. Xa ́c đi ̣nh ki ́ch thước bao gồm chiê ̀u cao (height), baseline, descent, va ̀ leading. Điê ̀u na ̀y râ ́t câ ̀n thiê ́t vi ̀ ca ́c ký tự khi in đê ̀u chiê ́m một ki ́ch thước riêng. Ba ̣n câ ̀n ti ́nh ki ́ch thước câ ̀n thiết khi in ca ́c ký tự đê ̉ tra ́nh ca ́c ký tự ghi đe ̀ lên nhau. ¾ Height: chiều cao của font. ¾ Baseline (Do ̀ng cơ sở): xa ́c đi ̣nh cơ sở của ca ́c ký tự (không kê ̉ phâ ̀n thâ ́p nhâ ́t của ký tự) ¾ Ascent: khoảng ca ́ch từ đường baseline đê ́n đi ̉nh của ký tự. ¾ Descent: khoa ̉ng ca ́c từ baseline đê ̀ đa ́y của ký tự. ¾ Leading: khoa ̉ng ca ́ch giữa ca ́c dòng chữ in. Chương tri ̀nh 6.7 minh hoa ̣ viê ̣c sử dụng ca ́c phương thức kha ́c nhau ma ̀ lớp FontMetrics có. Trong chương tri ̀nh na ̀y, chu ́ng ta sử dụng ca ́c phương thức kha ́c nhau đê ̉ xem xe ́t chi tiê ́t ca ́c loa ̣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, vi ̀ FontMetrics đi đôi với một font na ̀o đó. FontMetrics fm = g.getFontMetrics (f1); Lê ̣nh na ̀y ta ̣o đối tượng fm của lớp FontMetrics, cùng với đối tượng f1. Bây giờ, chu ́ng ta sử dụng fm đê ̉ lâ ́y chi tiết của font. Ca ́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 tra ̉ vê ̀ Font ma ̀ kê ́t hợp với đối tượng của lớp FontMetrics. Phương thức getName() của lớp Font tra ̉ vê ̀ tên Font. Chương tri ̀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); 21 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 qua ̉ cu ̉a chương tri ̀nh trên: Hi ̀nh 6.9 Lớp FontMetrics Chương tri ̀nh 6.8 minh hoa ̣ ca ́ch lớp FontMetrics được sử dụng đê ̉ in đoa ̣n văn ba ̉n nhiê ̀u font, nhiê ̀u dòng. Trong chương tri ̀nh na ̀y, chu ́ng ta câ ̀n in văn ba ̉n nhiê ̀u font trên nhiê ̀u 22 dòng. Lớp FontMetrics giu ́p ta xa ́c đi ̣nh khoa ̉ng ca ́ch câ ̀n thiê ́t đê ̉ in một dòng văn ba ̉n cho một font nào đó. Điê ̀u na ̀y thâ ̣t câ ̀n thiê ́t, bởi vi ̀ dòng thứ 2 được in ngay sau do ̀ng thứ nhâ ́t. Trước tiên chu ́ng ta in msg1 sử dụng font Monospaced. Sau đó, chu ́ng ta xuâ ́t msg2 sử dụng font iaglogInput. Đê ̉ la ̀m được điê ̀u na ̀y, chu ́ng ta câ ̀n ti ́nh khỏng ca ́ch câ ̀n thiê ́t đê ̉ xuâ ́t msg1. Phương thức stringWidth() cu ̉a lớp FontMetrics được dùng đê ̉ ti ́nh ra tổng khoa ̉ng ca ́ch câ ̀n thiê ́t đê ̉ xuâ ́t msg1. khi chúng cộng thêm khoa ̉ng ca ́ch na ̀y va ̀o biê ́n x, chúng ta se ̃ lâ ́y được vi ̣ tri ́ ma ̀ chúng ta bắt đâ ̀u in đoa ̣n văn ba ̉n kê ́ tiê ́p, msg2. Phương thức setFont() được dùng đê ̉ thiê ́t lâ ̣p font đê ̉ in văn ba ̉n. Kê ́ đó, chu ́ng ta xuâ ́t msg1 va ̀ msg2 trên ca ́c dòng kha ́c nhau sử dụng chung 1 font Monospaced. Ở đây, chúng ta câ ̀n biê ́t khoa ̉ng ca ́ch chiều cao của font, đê ̉ in do ̀ng kê ́ tiê ́p. Phương thức getHeight() được dùng đê ̉ la ̀m điê ̀u na ̀y. Chương tri ̀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; 23 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 qua ̉ cu ̉a chương tri ̀nh trên: Hi ̀nh 6.10 Văn ba ̉n được xuất nhiều font, nhiê ̀u do ̀ng 6.9 Cho ̣n mode để vẽ Ca ́c đối tượng được ve ̃ bằng ca ́ch sử dụng mode ve ̃. Khi một đối tượng mới được ve ̃, nó se ̃ đe ̀ lên ca ́c hi ̀nh đa ̃ ve ̃ trước đây. Tương tự, khi ca ́c đối tượng được ve ̃ đi ve ̃ la ̣i nhiều lâ ̀n thi ̀ chúng se ̃ xoa ́ ca ́c đối tượng đa ̃ ve ̃ trước đó. Chi ̉ hiê ̉n thi ̣ nội dung của đối tượng mới. Đê ̉ la ̀m cho nô ̣i dung củ va ̀ nội dung mới đê ̀u hiê ̉n thi ̣ trên ma ̀n hi ̀nh, lớp Graphics cung câ ́p phương thức setXORMode (Color c); Chương tri ̀nh 6.9 minh hoa ̣ 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ô ca ́c hi ̀nh đồ hoa ̣ kha ́c nhau, ma ̀ không đe ̀ lên ca ́c hi ̀nh kha ́c. Kê ́t qua ̉ la ̀, khi sử dụng mode XOR thi ̀ hiê ̉n nhiên là tâ ́t ca ̉ ca ́c hi ̀nh đê ̀u hiê ̉n thi ̣ đâ ̀y đủ. Điê ̀u na ̀y có nghi ̃a la ̀ ca ́c hi ̀nh mới không đe ̀ lên ca ́c hi ̀nh củ. Thay va ̀o đó, phâ ̀n chung giữa ca ́c hi ̀nh se ̃ được hiê ̉n thi ̣ tha ̀nh một ma ̀u kha ́c. Nhưng khi không sử dụng mode XOR, hi ̀nh mới hoa ̀n toa ̀n che khuâ ́t những hi ̀nh trước đó. Chương ti ̀rnh 6.9 import java.awt.*; class PaintMode extends Frame { public PaintMode() 24 { 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 qua ̉ cu ̉a chương tri ̀nh trên: Hi ̀nh 6.11 Paint mode 25 Tóm tắt ¾ Applet là chương tri ̀nh Java cha ̣y trong tri ̀nh duyê ̣t web. ¾ Chương tri ̀nh Java đơn le ̉ co ́ thê ̉ vừa la ̀ applet, vừa la ̀ application. ¾ Lớp Graphics nằm trong go ́i AWT, bao gồm ca ́c phương thức được sử dụng đê ̉ ve ̃ ca ́c hi ̀nh đồ hoa ̣ như oval, hi ̀nh chữ nhâ ̣t, hi ̀nh vuông, hi ̀nh tro ̀n, đường thẳng va ̀ văn ba ̉n. ¾ Java sử dụng ba ̉ng ma ̀u RGB. ¾ Lớp Font trong go ́i java.awt cho phe ́p sử dụng nhiê ̀u font kha ́c nhau. ¾ Lớp FontMetrics xa ́c đi ̣nh ki ́ch thước của ca ́c ký tự.
File đính kèm:
- Unlock-CoreJava_C6.pdf