第21章  Applet的应用
 21.1  Applet在html中的使用
 实例549  在html中显示Applet
 HtmlShowApplet.java
     public void paint(Graphics g){
         g.drawString("html文件已经运行", 50, 50);// 绘制文本
         g.drawString("在html中显示了Applet程序", 50, 80);// 绘制文本
     }
 HtmlShowApplet.html
 <applet code = "com.zzk.HtmlShowApplet.class" width ="260" height = "300">
 </applet>实例550  设置Applet的显示位置
 ShowPositionApplet.java
     String author;// 声明成员变量
     public void init() {
         author = "ZhenKun Zhang";// 初始化成员变量
     }
     public void paint(Graphics g){
         g.setColor(Color.blue);// 设置颜色
         g.drawString(author, 50, 30);// 绘制文本
     }
 ShowPositionApplet.html
 <html>
 原有内容1
 <applet code = "com.zzk.ShowPositionApplet.class" width ="180" height = "120" Align = "right">
 </applet>
 原有内容2
 </html>实例551  Applet获取页面传递的参数
 ShowParamApplet.java
     String id;// 声明成员变量
     String name;// 声明成员变量
     String sex;// 声明成员变量
     public void init() {
         id = getParameter("id");// 获得参数id的值
         name = getParameter("name");// 获得参数name的值
         sex = getParameter("sex");// 获得参数sex的值
     }
     public void paint(Graphics g) {
         g.setColor(Color.blue);// 设置颜色
         g.drawString("学号:", 30, 10);// 绘制文本
         g.drawString(id, 70, 10);// 绘制获得的id值
         g.drawString("姓名:", 30, 30);// 绘制文本
         g.drawString(name, 70, 30);// 绘制获得的name值
         g.drawString("性别:", 30, 50);// 绘制文本
         g.drawString(sex, 70, 50);// 绘制获得的sex值
     }
 ShowParamApplet.html
 <html>
 <applet  code = "com.zzk.ShowParamApplet.class" width ="260" height = "180">
 <param name = "id" value = "9801**01" />
 <param name = "name" value = "ZhenKun Zhang" />
 <param name = "sex" value = "男" />
 </applet>
 </html>实例552  使用<applet>标记中的archive属性
 UseArchivePropertyApplet.java
     public void init() {
         // 使用与html文件关联的NewPanelApp.jar文件中的NewPanel类创建对象
         npanel.NewPanel npanel = new npanel.NewPanel();
         setLayout(null);// 设置容器为绝对布局
         npanel.setBounds(10, 10, 254, 167);// 设置NewPanel对象的显示位置和大小
         add(npanel);// 将NewPanel对象添加到容器中
     }
 NewPanel.java
     private JTextField textField;// 声明文本框
     public NewPanel() {
         super();// 调用超类的构造方法
         setLayout(null);// 设置面板为绝对布局
         setBounds(100, 100, 254, 167);// 设置面板的位置和大小
         final JButton button = new JButton();// 创建按钮
         button.setText("按钮一");// 指定按钮标题
         button.setBounds(38, 86, 73, 28);// 指定按钮在面板中的显示位置和大小
         add(button);// 将按钮添加到面板上
         final JButton button_1 = new JButton();// 创建按钮
         button_1.setText("按钮二");// 指定按钮标题
         button_1.setBounds(140, 86, 73, 28);// 指定按钮在面板中的显示位置和大小
         add(button_1);// 将按钮添加到面板上
         textField = new JTextField();// 创建文本框
         textField.setText("这是一个文本框控件");// 指定文本框的标题
         textField.setBounds(38, 35, 175, 22);// 设置文本框的显示位置和大小
         add(textField);// 将文本框添加到面板上
     }
 UseArchivePropertyApplet.html
 <applet code = "com.zzk.UseArchivePropertyApplet.class" width ="300" height = "220" archive = "NewPanelApp.jar">
 </applet>21.2  Applet的方法
 实例553  使用paint()方法绘制页面内容
 PaintMethodApplet.java
     public void paint(Graphics g) {
         g.setColor(Color.BLUE);// 设置颜色
         g.drawString("这是使用paint()方法绘制的文本。", 30, 40);// 绘制文本内容
         g.setColor(Color.RED);// 设置颜色
         g.drawString("下面是使用paint()方法绘制的图形。", 30, 80);// 绘制文本内容
         g.drawRect(30, 100, 50, 40);// 绘制图形
     }
 PaintMethodApplet.html
 <html>
 <applet code = "com.zzk.PaintMethodApplet.class" width ="260" height = "180">
 </applet>
 </html>实例554  使用update()方法更新页面内容
 UpdateMethodApplet.java
     boolean flag = false;// 定义标记变量
     public void start() {
         repaint();// 重新调用paint方法
     }
     public void paint(Graphics g) {
         g.setColor(Color.RED);// 设置颜色
         g.drawString("这是使用paint()方法绘制的文本。", 30, 120);// 绘制文本
         g.setColor(Color.BLUE);// 设置颜色
         g.drawString("下面是使用paint()方法绘制的图形。", 30, 140);// 绘制文本
         g.drawRect(30, 150, 50, 40);// 绘制矩形
         update(g);// 调用updatae方法
     }
     public void update(Graphics g) {
         if (flag) {
             g.clearRect(0, 0, 300, 220);// 标记变量为true时,清除内容
             flag = false;// 设置标记变量为false
         } else {
             flag = true;// 设置标记变量为true
         }
         g.setColor(Color.BLUE);// 设置颜色
         g.drawString("这是使用updatePaint()方法绘制的文本。", 30, 20);// 绘制文本
         g.setColor(Color.RED);// 设置颜色
         g.drawString("下面是使用updatePaint()方法绘制的图形。", 30, 40);// 绘制文本
         g.drawRect(30, 50, 50, 40);// 绘制矩形
     }
 UpdateMethodApplet.html
 <html>
 <applet code = "com.zzk.UpdateMethodApplet.class" width ="300" height = "220">
 </applet>
 </html>实例555  使用repaint()方法重新绘制页面
 RepaintMethodApplet.java
     static int iFlag = 0;// 定义标记变量
     public void start() {
         iFlag++;// 调整标记变量的值
         repaint();// 重新调用paint()方法
     }
     public void paint(Graphics g) {
         if (iFlag == 1) {
             g.drawString("这是使用paint()方法绘制的文本。", 30, 60);// 绘制文本
         } else if (iFlag == 2) {
             g.setColor(Color.RED);// 设置颜色
             g.drawString("下面是使用paint()方法绘制的图形。", 30, 60);// 绘制文本
             g.drawRect(30, 80, 50, 40);// 绘制矩形
         } else if (iFlag == 3) {
             g.setColor(Color.BLUE);// 设置颜色
             g.drawString("下面是使用paint()方法绘制的图形。", 30, 60);// 绘制文本
             g.drawRect(30, 80, 50, 40);// 绘制矩形
         } else {
             g.setColor(Color.GREEN);// 设置颜色
             g.drawString("下面是使用paint()方法绘制的图形。", 30, 60);// 绘制文本
             g.drawRect(30, 80, 50, 40);// 绘制矩形
         }
     }RepaintMethodApplet.html
 <html>
 <applet code = "com.zzk.RepaintMethodApplet.class" width ="300" height = "220">
 </applet>
 </html>实例556  Applet显示地址栏上的路径
 GainAddressBarPathApplet.java
     URL url;// 声明URL对象
     public void start() {
         url = this.getDocumentBase();// 获得地址栏上路径的URL对象
     }
     public void paint(Graphics g) {
         g.setColor(Color.blue);// 设置颜色
         g.drawString(url.getFile(), 30, 20);// 绘制地址栏上的路径
     }GainAddressBarPathApplet.html
 <html>
 <applet code = "com.zzk.GainAddressBarPathApplet.class" width ="1200" height = "220">
 </applet>
 </html>实例557  Applet显示class存放的路径
 ClassSavePathApplet.java
     URL url;// 声明URL对象
     public void start() {
         url = this.getCodeBase();// 获得class存放路径的URL对象
     }
     public void paint(Graphics g) {
         g.setColor(Color.blue);// 设置颜色
         g.drawString(url.getFile(), 30, 20);// 绘制class的存放路径
     }ClassSavePathApplet.html
 <html>
 <applet code = "com.zzk.ClassSavePathApplet.class" width ="1200" height = "220">
 </applet>
 </html>21.3  Applet中的文字处理
 实例558  控制Applet字体大小
 SetFontSizeApplet.java
     public void paint(Graphics g) {
         Font font = new Font("宋体", Font.PLAIN, 16);// 创建字体对象,字体大小为16
         g.setFont(font);// 设置字体
         g.drawString("字体大小为16", 30, 20);// 绘制文本
         font = new Font("宋体", Font.PLAIN, 22);// 创建字体对象,字体大小为22
         g.setFont(font);// 设置字体
         g.drawString("字体大小为22", 30, 60);// 绘制文本
         font = new Font("宋体", Font.PLAIN, 36);// 创建字体对象,字体大小为36
         g.setFont(font);// 设置字体
         g.drawString("字体大小为36", 30, 120);// 绘制文本
     }
 SetFontSizeApplet.html
 <html>
 <applet code = "com.zzk.SetFontSizeApplet.class" width ="300" height = "220">
 </applet>
 </html>实例559  控制Applet文字位置
 SetTextPositionApplet.java
     public void paint(Graphics g) {
         Font font = new Font("宋体", Font.PLAIN, 32);// 创建字体对象
         g.setFont(font);// 设置字体
         g.drawString("标题", 65, 40);// 绘制文本,其位置坐标为(65,40)
         font = new Font("宋体", Font.PLAIN, 16);// 创建字体对象
         g.setFont(font);// 设置字体
         g.drawString("正文一的内容", 50, 80);// 绘制文本,其位置坐标为(50,80)
         g.drawString("正文二的内容", 50, 120);// 绘制文本,其位置坐标为(50,120)
         g.drawString("正文三的内容", 50, 160);// 绘制文本,其位置坐标为(50,160)
     }
 SetTextPositionApplet.html
 <html>
 <applet code = "com.zzk.SetTextPositionApplet.class" width ="300" height = "220">
 </applet>
 </html>实例560  控制Applet字体样式
 SetFontStyleApplet.java
     public void paint(Graphics g) {
         Font font = new Font("宋体", Font.PLAIN, 16);// 创建字体对象,字体样式为普通字体
         g.setFont(font);// 设置字体
         g.drawString("普通字体", 30, 20);// 绘制文本
         font = new Font("宋体", Font.ITALIC, 22);// 创建字体对象,字体样式为倾斜字体
         g.setFont(font);// 设置字体
         g.drawString("倾斜字体", 30, 60);// 绘制文本
         font = new Font("宋体", Font.BOLD, 28);// 创建字体对象,字体样式为加粗字体
         g.setFont(font);// 设置字体
         g.drawString("加粗字体", 30, 120);// 绘制文本
     }
 SetFontStyleApplet.html
 <html>
 <applet code = "com.zzk.SetFontStyleApplet.class" width ="300" height = "220">
 </applet>
 </html>实例561  Applet中绘制立体效果的文字
 SolidTextApplet.java
     public void paint(Graphics g) { // 重写paint()方法
         String value = "立体文字效果";
         int x = 10; // 文本位置的横坐标
         int y = 120; // 文本位置的纵坐标
         Font font = new Font("宋体", Font.BOLD, 72); // 创建字体对象
         g.setFont(font); // 设置字体
         g.setColor(Color.GRAY);// 设置颜色为灰色
         int i = 0;// 循环变量
         while (i < 8) {
             g.drawString(value, x, y); // 绘制文本
             x += 1;// 调整绘制点的横坐标值
             y += 1;// 调整绘制点的纵坐标值
             i++;// 调整循环变量的值
         }
         g.setColor(Color.BLACK);// 设置颜色黑色
         g.drawString(value, x, y); // 绘制文本
     }
 SolidTextApplet.html
 <html>
 <applet code = "com.zzk.SolidTextApplet.class" width ="500" height = "220">
 </applet>
 </html>实例562  Applet中绘制阴影效果的文字
 ShadowTextApplet.java
     public void paint(Graphics g) { // 重写paint()方法
         String value = "阴影文字";
         int x = 10; // 文本位置的横坐标
         int y = 120; // 文本位置的纵坐标
         Font font = new Font("华文行楷", Font.BOLD, 80); // 创建字体对象
         g.setFont(font); // 设置字体
         g.setColor(Color.GRAY);// 设置颜色为灰色
         g.drawString(value, x, y); // 绘制文本
         x += 3;// 调整绘制点的横坐标值
         y += 3;// 调整绘制点的纵坐标值
         g.setColor(Color.BLACK);// 设置颜色黑色
         g.drawString(value, x, y); // 绘制文本
     }
 ShadowTextApplet.html
 <html>
 <applet code = "com.zzk.ShadowTextApplet.class" width ="500" height = "220">
 </applet>
 </html>实例563  Applet中绘制倾斜效果的文字
 ShearTextApplet.java
     public void paint(Graphics g) { // 重写paint()方法
         Graphics2D g2 = (Graphics2D) g;// 转换为Graphics2D类型
         String value = "倾斜文字";// 绘制的文本
         int x = 10; // 文本位置的横坐标
         int y = 190; // 文本位置的纵坐标
         Font font = new Font("华文行楷", Font.BOLD, 72); // 创建字体对象
         g2.setFont(font); // 设置字体
         g2.shear(0.1, -0.4);// 倾斜画布
         g2.drawString(value, x, y); // 绘制文本
     }
 ShearTextApplet.html
 <html>
 <applet code = "com.zzk.ShearTextApplet.class" width ="380" height = "220">
 </applet>
 </html>实例564  Applet中绘制渐变效果的文字
 GradientTextApplet.java
     public void paint(Graphics g) { // 重写paint()方法
         Graphics2D g2 = (Graphics2D) g;// 转换为Graphics2D类型
         String value = "渐变色文字";// 绘制的文本
         int x = 15; // 文本位置的横坐标
         int y = 120; // 文本位置的纵坐标
         Font font = new Font("楷体", Font.BOLD, 60); // 创建字体对象
         g2.setFont(font); // 设置字体
         GradientPaint paint = new GradientPaint(20, 20, Color.BLUE, 100, 120,
                 Color.RED, true);// 创建循环渐变的GradientPaint对象
         g2.setPaint(paint);// 设置渐变
         g2.drawString(value, x, y); // 绘制文本
     }
 GradientTextApplet.html
 <html>
 <applet code = "com.zzk.GradientTextApplet.class" width ="380" height = "220">
 </applet>
 </html>实例565  Applet中绘制会变色的文字
 ChangeTextColorApplet.java
     Color color = new Color(0, 0, 255);// 创建颜色对象
     public void init() {
         Thread thread = new Thread(this);// 创建线程对象
         thread.start();// 启动线程对象
     }
     public void paint(Graphics g) { // 重写paint()方法
         Graphics2D g2 = (Graphics2D) g;// 转换为Graphics2D类型
         String value = "会变色的文字";// 绘制的文本
         int x = 10; // 文本位置的横坐标
         int y = 110; // 文本位置的纵坐标
         Font font = new Font("楷体", Font.BOLD, 40); // 创建字体对象
         g2.setFont(font); // 设置字体
         g2.setColor(color);// 设置颜色
         g2.drawString(value, x, y); // 绘制文本
     }
     public void run() {
         Random random = new Random();// 创建随机数对象
         while (true) {
             int R = random.nextInt(256);// 随机产生颜色的R值
             int G = random.nextInt(256);// 随机产生颜色的G值
             int B = random.nextInt(256);// 随机产生颜色的B值
             color = new Color(R, G, B);// 创建颜色对象
             repaint();// 调用paint()方法
             try {
                 Thread.sleep(300);// 休眠300毫秒
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
         }
     }
 ChangeTextColorApplet.html
 <html>
 <applet code = "com.zzk.ChangeTextColorApplet.class" width ="380" height = "220">
 </applet>
 </html>实例566  Applet中绘制顺时针旋转的文字
 ClockwiseTextApplet.java
     private JTextField textField;
     ClockwiseTextPanel clockwiseTextPanel = new ClockwiseTextPanel(); // 创建面板类的实例
     public void init() {
         setLayout(new BorderLayout());
         add(clockwiseTextPanel); // 将面板类的实例添加到窗体容器中
         textField = new JTextField();
         textField.addCaretListener(new CaretListener() {
             public void caretUpdate(CaretEvent arg0) {
                 String text = textField.getText();// 获取文本框字符串
                 clockwiseTextPanel.setText(text);// 为面板中的text变量赋值
             }
         });
         getContentPane().add(textField, BorderLayout.SOUTH);
     }
     class ClockwiseTextPanel extends JPanel { // 创建内部面板类
         private String text;
         public ClockwiseTextPanel() {
             setOpaque(false);// 设置面板为透明
             setLayout(null);// 设置为绝对布局
         }
         public String getText() {
             return text; // 获得成员变量的值
         }
         public void setText(String text) {
             this.text = text;// 为成员变量赋值
             repaint();// 调整paint()方法
         }
         public void paint(Graphics g) {// 重写paint()方法
             Graphics2D g2 = (Graphics2D) g;// 获得Graphics2D的实例
             int width = getWidth();// 获得面板的宽度
             int height = getHeight();// 获得面板的高度
             if (text != null) {
                 char[] array = text.toCharArray();// 将文本转换为字符数组
                 int len = array.length * 5;// 定义圆的半径,同时可以调整文字的距离
                 Font font = new Font("宋体", Font.BOLD, 22);// 创建字体
                 g2.setFont(font);// 设置字体
                 double angle = 0;// 定义初始角度
                 for (int i = 0; i < array.length; i++) {// 遍历字符串中的字符
                     if (i == 0) {
                         g2.setColor(Color.BLUE);// 第一个字符用蓝色
                     } else {
                         g2.setColor(Color.BLACK);// 其他字符用黑色
                     }
                     int x = (int) (len * Math.sin(Math.toRadians(angle + 270)));// 计算每个文字的横坐标位置
                     int y = (int) (len * Math.cos(Math.toRadians(angle + 270)));// 计算每个文字的纵坐标位置
                     g2.drawString(array[i] + "", width / 2 + x, height / 2 - y);// 绘制字符
                     angle = angle + 360d / array.length;// 改变角度
                 }
             }
         }
     }
 ClockwiseTextApplet.html
 <html>
 <applet code = "com.zzk.ClockwiseTextApplet.class" width ="380" height = "400">
 </applet>
 </html>实例567  Applet中动态绘制文本
 demo.txt
 图片溶合特效
 图片淡入淡出特效
 图片百叶窗特效
 图片马赛克特效
 DynamicDrawTextApplet.java
     int x = 20;// 起始点的x坐标
     int y = 30;// 起始点的y坐标
     String textStrings = "小应用程序中缩放图像\n小应用程序中翻转图像\n小应用程序中旋转图像\n小应用程序中倾斜图像";// 需要动态绘制的字符串
     String value = "";// 存储字符串中的单个字符
     public void init() {
         Thread thread = new Thread(this);// 创建线程对象
         thread.start();// 启动线程对象
     }
     public void paint(Graphics g) {
         Font font = new Font("华文楷体", Font.BOLD, 20);// 创建字体对象
         g.setFont(font);// 指定字体
         g.setColor(Color.RED);// 指定颜色
         g.drawString(value, x, y);// 绘制文本
     }
     public void update(Graphics g) {// 重写update方法,防止无法显示绘制的所有内容
         paint(g);// 调用paint()方法
     }
     public void run() {
         try {
             for (int i = 0; i < textStrings.length(); i++) {
                 Thread.sleep(400); // 当前线程休眠400毫秒
                 value = textStrings.substring(i, i + 1);// 截取字符串中的一个字符
                 if (value.equals("\n")) {// 是换行符
                     x = 20;// 下一行起始点的x坐标
                     y += 30;// 下一行文本的y坐标
                 } else {// 不是回车或换行符
                     x += 20;// 当前行下一个字的x坐标
                 }
                 repaint();// 调用paint()方法
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 DynamicDrawTextApplet.html
 <html>
 <applet code = "com.zzk.DynamicDrawTextApplet.class" width ="380" height = "220">
 </applet>
 </html>21.4  Applet中的图形处理
 实例568  Applet绘制直线
 DrawLineApplet.java
     public void paint(Graphics g) {
         String value = "画直线";
         int x = 215;// 直线的横坐标(右)
         int y = 45;// 直线的纵坐标(右)
         int x1 = 15;// 直线的横坐标(左)
         int y1 = 45;// 直线的纵坐标(左)
         int x2 = 300;// 直线的横坐标(右)
         int y2 = 100;// 直线的纵坐标(右)
         int x3 = 60;// 直线的横坐标(左)
         int y3 = 100;// 直线的纵坐标(左)
         g.setColor(Color.blue);// 设置颜色红色
         g.drawLine(x, y, x1, y1);// 绘制直线
         g.drawLine(x2, y2, x3, y3);// 绘制直线
         g.drawString(value, 120, 75);// 绘制文本
     }
 DrawLineApplet.html
 <html>
 <applet  code = "com.zzk.DrawLineApplet.class" width ="800" height = "500">
 </applet>
 </html>实例569  Applet绘制矩形
 DrawRectApplet.java
     public void paint(Graphics g) {
         String value = "画矩形";
         int x = 42;// 矩形的横坐标
         int y = 27;// 矩形的纵坐标
         int width = 122;// 矩形的宽度
         int height = 64;// 矩形的高度
         g.setColor(Color.BLUE);// 设置颜色蓝色
         g.drawRect(x, y, width, height);// 绘制矩形
         int x0 = 54;// 矩形的横坐标
         int y0 = 37;// 矩形的纵坐标
         int width0 = 130;// 矩形的宽度
         int height0 = 69;// 矩形的高度
         g.setColor(Color.BLUE);// 设置颜色蓝色
         g.drawRect(x0, y0, width0, height0);// 绘制矩形
         int x1 = 67;// 矩形的横坐标
         int y1 = 48;// 矩形的纵坐标
         int width1 = 137;// 矩形的宽度
         int height1 = 73;// 矩形的高度
         g.setColor(Color.BLUE);// 设置颜色蓝色
         g.drawRect(x1, y1, width1, height1);// 绘制矩形
         g.drawString(value, 185, 143);// 绘制文本
     }
 DrawRectApplet.html
 <html>
 <applet  code = "com.zzk.DrawRectApplet.class" width="500" height="220">
 </applet>
 </html>实例570  Applet绘制圆角矩形
 DrawRoundRectApplet.java
     public void paint(Graphics g) {
         String value = "画圆角矩形";
         int x = 20;// 圆角矩形位置的横坐标
         int y = 20;// 圆角矩形位置的纵坐标
         int width = 70;// 圆角矩形宽度
         int height = 129;// 圆角矩形高度
         int xr = 5;                         // 圆角矩形圆角的水平弧度
         int yr = 7;                         // 圆角矩形圆角的垂直弧度        g.setColor(Color.blue);// 设置颜色
         g.drawRoundRect(x, y, width, height, xr, yr); // 绘制图形
         
         int x0 = 35; // 圆角矩形位置的横坐标
         int y0 = 35; // 圆角矩形位置的纵坐标
         int width0 = 82; // 圆角矩形宽度
         int height0 = 139; // 圆角矩形高度
         int xr0 = 10; // 圆角矩形圆角的水平弧度
         int yr0 = 12; // 圆角矩形圆角的垂直弧度
         g.setColor(Color.blue);// 设置颜色
         g.drawRoundRect(x0, y0, width0, height0, xr0, yr0);// 绘制图形
         
         int x1 = 59;// 圆角矩形位置的横坐标
         int y1 = 59;// 圆角矩形位置的纵坐标
         int width1 = 92;// 圆角矩形宽度
         int height1 = 151;// 圆角矩形高度
         int xr1 = 20;// 圆角矩形圆角的水平弧度
         int yr1 = 22;// 圆角矩形圆角的垂直弧度
         g.setColor(Color.blue);// 设置颜色
         g.drawRoundRect(x1, y1, width1, height1, xr1, yr1);// 绘制图形
         g.drawString(value, 165, 30);// 绘制文本
     }
 DrawRoundRectApplet.html
 <html>
 <applet  code = "com.zzk.DrawRoundRectApplet.class" width ="500" height = "320">
 </applet>
 </html>实例571  Applet绘制椭圆
 DrawOvalApplet.java
     public void paint(Graphics g) {
         String value = "画椭圆";
         int x = 25;// 椭圆位置横坐标
         int y = 40;// 椭圆位置
         int xr = 150;// 椭圆的横坐标半径
         int yr = 150;// 椭圆的纵坐标半径
         g.drawOval(x, y, xr, yr);// 绘制椭圆
         int x0 = 67;// 椭圆位置横坐标
         int y0 = 40;// 椭圆位置
         int xr0 = 65;// 椭圆的横坐标半径
         int yr0 = 150;// 椭圆的纵坐标半径
         g.setColor(Color.blue);// 设置颜色
         g.drawOval(x0, y0, xr0, yr0);// 绘制椭圆
         g.drawString(value, 180, 190);// 绘制文本
     }
 DrawOvalApplet.html
 <html>
 <applet  code = "com.zzk.DrawOvalApplet.class" width ="500" height = "320">
 </applet>
 </html>实例572  Applet绘制圆弧
 DrawArcApplet.java
     public void paint(Graphics g) {
         String value = "画弧";
         int x = 35;// 弧位置的横坐标
         int y = 65;// 弧位置的纵坐标
         int l = 150;// 弧的长度
         int width = 80;// 弧的宽度
         int startAngle = 10;// 弧的起始角度
         int endAngle = -120;// 终止画弧前扫过的角度
         g.setColor(Color.red);// 设置颜色
         g.drawArc(x + 20, y, l, width, startAngle, endAngle);// 绘制弧
         
         int x0 = 5;// 弧位置的横坐标
         int y0 = 40;// 弧位置的纵坐标
         int l0 = 180;// 弧的长度
         int width0 = 120;// 弧的宽度
         int startAngle0 = 70;// 弧的起始角度
         int endAngle0 = 180;// 终止画弧前扫过的角度
         g.setColor(Color.red);// 设置颜色
         g.drawArc(x0 + 20, y0, l0, width0, startAngle0, endAngle0);// 绘制弧
         
         int x1 = 19;// 弧位置的横坐标
         int y1 = 90;// 弧位置的纵坐标
         int l1 = 200;// 弧的长度
         int width1 = 100;// 弧的宽度
         int startAngle1 = 5;// 弧的起始角度
         int endAngle1 = 300;// 终止画弧前扫过的角度
         g.setColor(Color.red);// 设置颜色
         g.drawArc(x1 + 20, y1, l1, width1, startAngle1, endAngle1);// 绘制弧
         g.drawString(value, 195, 160);
         
     }
 DrawArcApplet.html
 <html>
 <applet  code = "com.zzk.DrawArcApplet.class" width ="500" height = "220">
 </applet>
 </html>实例573  Applet绘制折线
 DrawPolylineApplet.java
     public void paint(Graphics g) {
         String value = "折线";
         int[] x = { 30, 60, 60, 20 };// 声明表示折线横坐标的数组
         int[] y = { 30, 70, 150, 80 };// 声明表示折线纵坐标的数组
         int num1 = x.length;// 提取x,y坐标对数组的长度
         g.setColor(Color.blue);// 设置颜色
         g.drawPolyline(x, y, num1);// 绘制折线
         int[] x0 = { 80, 110, 65, 80, 200 };// 声明表示折线横坐标的数组
         int[] y0 = { 30, 70, 100, 120, 150 };// 声明表示折线纵坐标的数组
         int num2 = x0.length;// 提取x0,y0坐标对数组的长度
         g.drawPolyline(x0, y0, num2);// 绘制折线
         g.drawString(value, 160, 130);// 绘制文本
     }
 DrawPolylineApplet.html
 <html>
 <applet  code = "com.zzk.DrawPolylineApplet.class" width ="500" height = "320">
 </applet>
 </html>实例574  Applet绘制多角形
 DrawPolygonApplet.java
     public void paint(Graphics g) {
         String value = "绘制多角形";
         int x[] = { 60, 103, 170, 150, 120 };// 声明多角形的横坐标数组
         int y[] = { 80, 180, 140, 80, 120 };// 声明多角形的纵坐标数组
         int num = x.length;// 取得多角形x,y坐标对数组的长度
         g.setColor(Color.blue);// 设置颜色
         g.drawPolygon(x, y, num);// // 绘制多角形
         g.drawString(value, 120, 70);// 绘制文本
     }
 DrawPolygonApplet.html
 <html>
 <applet  code = "com.zzk.DrawPolygonApplet.class" width ="500" height = "220">
 </applet>
 </html>实例575  Applet绘制图片
 DrawImageApplet.java
     public void paint(Graphics g) {// 初始化方法
         String value = "绘制图片";
         Image image = null;// 声明图像对象
         image = getImage(getCodeBase(), "com/zzk/PD2.jpg");// 获得图片信息
         int x = 10;// 图像位置的横坐标
         int y = 20;// 图像位置的纵坐标
         int width = image.getWidth(this);// 获得图像的宽度
         int height = image.getHeight(this);// 获取图像的高度
         g.drawImage(image, x + 150, y + 30, width / 5, height / 5, this);// 绘制图像
         g.drawImage(image, x + 25, y + 10, (int) (width * 0.2),
                 (int) (height * 0.3), this);// 绘制图像
         g.drawString(value, 140, 170);// 绘制文本
     }DrawImageApplet.html
 <html>
 <applet  code = "com.zzk.DrawImageApplet.class" width ="1200" height = "1000">
 </applet>
 </html>实例576  Applet中的图形加运算
 AddOperationApplet.java
     public void paint(Graphics g) {
         String value = "图形相加运算";
         Graphics2D g2d = (Graphics2D) g;// p转换为可用的Graphics2D对象
         Rectangle2D.Float rect1 = new Rectangle2D.Float(20, 70, 185, 60);// 创建矩形对象
         Rectangle2D.Float rect2 = new Rectangle2D.Float(120, 20, 65, 160);// 创建矩形对象
         Area area1 = new Area(rect1);// 创建区域矩形
         Area area2 = new Area(rect2);// 创建区域矩形
         area1.add(area2);// 两个区域进行相加
         g2d.draw(area1);// 绘制相加后的区域矩形
         Rectangle2D.Float rect3 = new Rectangle2D.Float(230, 70, 185, 60);// 创建矩形对象
         Rectangle2D.Float rect4 = new Rectangle2D.Float(290, 20, 65, 160);// 创建矩形对象
         Area area3 = new Area(rect3);// 创建区域矩形
         Area area4 = new Area(rect4);// 创建区域矩形
         area3.add(area4);// 两个区域进行相加
         g2d.draw(area3);// 绘制相加后的区域矩形
         g2d.drawString(value, 25, 56);// 绘制文本
     }
 AddOperationApplet.html
 <html>
 <applet  code = "com.zzk.AddOperationApplet.class" width ="1200" height = "1000">
 </applet>
 </html>实例577  Applet中的图形减运算
 SubtractOperationApplet.java
     public void paint(Graphics g) {
         Graphics2D g2d = (Graphics2D) g;// 强制转换为Graphics2D对象
         Rectangle2D.Float rect1 = new Rectangle2D.Float(80, 20, 160, 160);// 创建矩形对象
         Ellipse2D.Float ellipse1 = new Ellipse2D.Float(130, 80, 140, 140);// 创建椭圆对象
         Area area1 = new Area(rect1);// 创建区域矩形
         Area area2 = new Area(ellipse1);// 创建区域椭圆
         area1.subtract(area2);// 两个区域图形相减
         g2d.fill(area1);// 绘制相减后的区域图形
         Rectangle2D.Float rect2 = new Rectangle2D.Float(240, -35, 120, 120);// 创建矩形对象
         Ellipse2D.Float ellipse2 = new Ellipse2D.Float(290, 20, 160, 160);// 创建椭圆对象
         Area area3 = new Area(rect2);// 创建矩形区域
         Area area4 = new Area(ellipse2);// 创建椭圆对象的区域图形
         area4.subtract(area3);// 两个区域图形相减
         g2d.fill(area4);// 绘制相减后的区域图形
     }
 SubtractOperationApplet.html
 <html>
 <applet  code = "com.zzk.SubtractOperationApplet.class" width ="1200" height = "1000">
 </applet>
 </html>实例578  Applet中的图形交运算
 IntersectOperationApplet.java
     public void paint(Graphics g) {
         Graphics2D g2d = (Graphics2D) g;// 强制转换为Graphics2D对象
         Rectangle2D.Float rect1 = new Rectangle2D.Float(0, 40, 140, 140);// 创建矩形对象
         Ellipse2D.Float ellipse1 = new Ellipse2D.Float(80, 40, 140, 140);// 创建椭圆对象
         Area area1 = new Area(rect1);// 创建矩形区域
         Area area2 = new Area(ellipse1);// 创建椭圆区域
         area1.intersect(area2);// 两个区域相交
         g2d.fill(area1);// 绘制相交后的区域图形
         Rectangle2D.Float rect2 = new Rectangle2D.Float(240, 0, 160, 160);// 创建矩形对象
         Ellipse2D.Float ellipse2 = new Ellipse2D.Float(190, 60, 140, 140);// 创建椭圆对象
         Area area3 = new Area(rect2);// 创建矩形区域
         Area area4 = new Area(ellipse2);// 创建椭圆区域
         area3.intersect(area4);// 两个区域相交
         g2d.fill(area3);// 绘制相交后的区域图形
     }
 IntersectOperationApplet.html
 <html>
 <applet  code = "com.zzk.IntersectOperationApplet.class" width ="1200" height = "1000">
 </applet>
 </html>实例579  Applet中的图形异或运算
 ExclusiveOrOperationApplet.java
     public void paint(Graphics g) { // 重写paint()方法
         Graphics2D g2d = (Graphics2D) g; // 强制转换为Graphics2D对象
         Ellipse2D.Float ellipse1 = new Ellipse2D.Float(30, 80, 180, 80);// 创建椭圆对象
         Ellipse2D.Float ellipse2 = new Ellipse2D.Float(80, 30, 80, 180);// 创建椭圆对象
         Area area1 = new Area(ellipse1);// 创建椭圆区域
         Area area2 = new Area(ellipse2);// 创建椭圆区域
         area1.exclusiveOr(area2);// 两个区域图形进行异或运算
         g2d.fill(area1);// 绘制异或运算后的区域图形
         Ellipse2D.Float ellipse3 = new Ellipse2D.Float(270, 80, 180, 80);// 创建椭圆对象
         Ellipse2D.Float ellipse4 = new Ellipse2D.Float(270, 30, 80, 180);// 创建椭圆对象
         Area area3 = new Area(ellipse3);// 创建椭圆区域
         Area area4 = new Area(ellipse4);// 创建椭圆区域
         area3.exclusiveOr(area4);// 绘制异或运算后的区域图形
         g2d.fill(area3);// 绘制异或运算后的区域图形
     }
 ExclusiveOrOperationApplet.html
 <html>
 <applet  code = "com.zzk.ExclusiveOrOperationApplet.class" width ="1200" height = "1000">
 </applet>
 </html>实例580  Applet中绘制纹理填充图形
 DrawGrainApplet.java
     private BufferedImage img;// 声明图像对象
     public void init() { // 初始化方法
         img = new BufferedImage(50, 50, BufferedImage.TYPE_INT_RGB);// 创建缓冲对象
         Graphics2D g = img.createGraphics();// 创建Graphics2D对象
         g.setPaint(Color.yellow);// 指定颜色
         g.draw(new Rectangle(0, 0, 25, 25));// 绘制矩形
         g.setPaint(Color.red);// 指定颜色
         g.fill(new Rectangle(25, 0, 25, 25));// 填充矩形
         g.setPaint(Color.green);// 指定颜色
         g.fill(new Rectangle(0, 0, 25, 25));// 填充矩形
     }
     public void paint(Graphics g) {
         Graphics2D g2d = (Graphics2D) g;// 强制转换为Graphics2D对象
         g2d.setPaint(new TexturePaint(img, new Rectangle(0, 0, 10, 10)));// 创建纹理并把它加到Graphics中
         g2d.fill(new Ellipse2D.Double(10, 10, 260, 145));// 填充图形
     }DrawGrainApplet.html
 <html>
 <applet  code = "com.zzk.DrawGrainApplet.class" width ="500" height = "220">
 </applet>
 </html>21.5  Applet中的图像处理
 实例581  Applet中缩放图像
 ZoomImageApplet.java
     public void paint(Graphics g) {
         String value = "缩放图像";
         Image img = null;// 声明图像对象
         img = getImage(getCodeBase(), "com/zzk/PD2.jpg");// 获得图片信息
         AffineTransform tr = AffineTransform.getScaleInstance(0.25, 0.25);// 创建变形以获得缩放对象
         tr.translate(120, 100);// 设置对象平移
         AffineTransform tr2 = AffineTransform.getScaleInstance(0.15, 0.15);// 创建变形以获得缩放对象
         tr2.translate(900, 950);// 设置对象平移
         Graphics2D g2d = (Graphics2D) g;// 将g转换成一个可用的Graphics2D对象
         g2d.drawImage(img, tr, this);// 绘制图像
         g2d.drawImage(img, tr2, this);// 绘制图像
         g2d.drawString(value, 60, 150);// 绘制文本
     }
 ZoomImageApplet.html
 <html>
 <applet  code = "com.zzk.ZoomImageApplet.class" width ="500" height = "220">
 </applet>
 </html>实例582  Applet中翻转图像
 TurnImageApplet.java
     public void paint(Graphics g) {
         String value = "翻转图像";
         Image img = null;// 声明图像对象
         img = getImage(getCodeBase(), "com/zzk/PD4.jpg");// 获得图片信息
         int w = img.getWidth(this);// 设置图像的宽度
         int h = img.getHeight(this);// 设置图像的高度
         Graphics2D g2d = (Graphics2D) g;// 将g转换为可以利用的Graphics2D
         g2d.drawString(value, 100, 130);// 绘制文本
         AffineTransform tr = new AffineTransform(-1, 0, 0, 1, w, 0);// 创建变换对象并横向翻转
         AffineTransform tr2 = new AffineTransform(1, 0, 0, -1, 0, h);// 创建变换对象并垂直翻转
         tr.translate(-20, 40);// 图像位置的平移
         tr2.translate(120, -40);// 图像位置的平移
         g2d.drawImage(img, tr, this);// 绘制图像
         g2d.drawImage(img, tr2, this);// 绘制图像
     }
 TurnImageApplet.html
 <html>
 <applet  code = "com.zzk.TurnImageApplet.class" width ="500" height = "220">
 </applet>
 </html>实例583  Applet中旋转图像
 SlantImageApplet.java
     public void paint(Graphics g) {
         String value = "倾斜图像";
         Image img = null;// 声明图像对象
         img = getImage(getCodeBase(), "com/zzk/PD5.jpg");// 获得图片信息
         Graphics2D g2d = (Graphics2D) g;// 强制转换为Graphics2D对象
         g2d.drawString(value, 209, 170);// 绘制文本
         AffineTransform tr = new AffineTransform();// 创建AffineTransform对象
         tr.translate(210, 32);// 图像位置的平移
         tr.shear(3, 3);// 倾斜图像
         g2d.drawImage(img, tr, this);// 绘制图像
         AffineTransform tr1 = AffineTransform.getScaleInstance(3.5, 3.5);// 获得AffineTransform对象
         tr1.translate(15, 13);// 图像位置的平移
         g2d.drawImage(img, tr1, this);// 绘制图像
     }
 SlantImageApplet.html
 <html>
 <applet  code = "com.zzk.SlantImageApplet.class" width ="500" height = "220">
 </applet>
 </html>实例584  Applet中倾斜图像
 SetImageLightenessApplet.java
     private BufferedImage image;// 声明缓冲图像对象
     public void paint(Graphics g) {
         Image img = null;// 声明图像对象
         String value = "调整图片亮度";
         img = getImage(getCodeBase(), "com/zzk/PPD.jpg");// 获得图像对象
         int a = img.getWidth(this); // 获得图片宽度赋给变量a
         int b = img.getHeight(this);// 获得图片高度赋给变量b
         if (a >= 0 || b >= 0) {
             image = new BufferedImage(img.getWidth(this), img.getHeight(this),
                     BufferedImage.TYPE_INT_RGB);// 创建缓冲图像对象
             image.getGraphics().drawImage(img, 0, 0, null);// 在缓冲图像对象上绘制图像
             float fa = 2.0f;// 声明表示像素分量
             float fb = -30.0f;// 声明表示像素分量
             RescaleOp op = new RescaleOp(fa, fb, null);// 创建RescaleOp对象
             image = op.filter(image, null); // 过滤缓冲图像对象,实现调整图像亮度的功能
             g.drawImage(img, 30, 40, this);// 绘制原图像对象
             g.drawImage(image, 220, 40, this);// 绘制调整亮度后的缓冲图像对象
             g.drawString(value, 265, 188);// 绘制文本
         }
     }
 SetImageLightenessApplet.html
 <html>
 <applet  code = "com.zzk.SetImageLightenessApplet.class" width ="1200" height = "1000">
 </applet>
 </html>实例585  Applet中调整图片的亮度
 ImageRotateApplet.java
     public void paint(Graphics g) {
         String value = "旋转图像";
         Image img = null;// 声明图像对象
         img = getImage(getCodeBase(), "com/zzk/PD2.jpg");// 获得图片信息
         Graphics2D g2d = (Graphics2D) g; // 强制转换为Graphics2D对象
         g2d.drawString(value, 180, 150);// 绘制文本
         int x = 50;// 图像位置的横坐标
         int y = -10;// 图像位置的纵坐标
         int w = img.getWidth(this);// 获得图片的宽度
         int h = img.getHeight(this);// 获得图片的高度
         g2d.drawImage(img, x, y + 50, w / 5, h / 5, this);// 绘制图形
         g2d.drawImage(img, x + 150, y + 50, w / 5, h / 5, this);// 绘制图形
         AffineTransform tr = new AffineTransform();// 创建变形对象
         tr.rotate(90, 15, 15, 65);// 设置旋转角度
         g2d.setTransform(tr);// 执行旋转
         g2d.drawImage(img, x + 150, y + 20, w / 5, h / 5, this);// 绘制图形
         tr.rotate(35, 15, 30, 65);// 设置旋转角度
         g2d.setTransform(tr);// 执行旋转
         g2d.drawImage(img, x + 120, y - 60, w / 5, h / 5, this);// 绘制图形
     }
 ImageRotateApplet.html
 <html>
 <applet  code = "com.zzk.ImageRotateApplet.class" width ="500" height = "220">
 </applet>
 </html>实例586  Applet中绘制中文验证码
 DrawChinesePasswordApplet.java
     int WIDTH = 120;// 宽度
     int HEIGHT = 35;// 高度
     private String num = "";// 验证码
     Random random = new Random();// 实例化Random
     public void paint(Graphics g) {
         String hanZi = "本实例通过从字符串中随机获得四个字符实现了中文验证码的功能";// 定义验证码使用的汉字
         BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
                 BufferedImage.TYPE_INT_RGB);// 实例化BufferedImage
         Graphics gs = image.getGraphics(); // 获取Graphics类的对象
         if (!num.isEmpty()) {
             num = "";// 清空验证码
         }
         Font font = new Font("黑体", Font.BOLD, 20); // 通过Font构造字体
         gs.setFont(font);// 设置字体
         gs.fillRect(0, 0, WIDTH, HEIGHT);// 填充一个矩形
         // 输出随机的验证文字
         for (int i = 0; i < 4; i++) {
             int index = random.nextInt(hanZi.length());// 随机获得汉字的索引值
             String ctmp = hanZi.substring(index, index + 1);// 获得指定索引处的一个汉字
             num += ctmp;// 更新验证码
             Color color = new Color(20 + random.nextInt(120), 20 + random
                     .nextInt(120), 20 + random.nextInt(120));// 生成随机颜色
             gs.setColor(color); // 设置颜色
             Graphics2D gs2d = (Graphics2D) gs;// 将文字旋转指定角度
             AffineTransform trans = new AffineTransform();// 实例化AffineTransform
             trans.rotate(random.nextInt(45) * 3.14 / 180, 22 * i + 8, 7);
             float scaleSize = random.nextFloat() + 0.8f;// 缩放文字
             if (scaleSize > 1f)
                 scaleSize = 1f;// 如果scaleSize大于1,则等于1
             trans.scale(scaleSize, scaleSize); // 进行缩放
             gs2d.setTransform(trans);// 设置AffineTransform对象
             gs2d.drawString(ctmp, WIDTH / 6 * i + 28, HEIGHT / 2);// 画出验证码
         }
         g.drawImage(image, 85, 80, null);// 在小应用程序中绘制验证码
     }
 DrawChinesePasswordApplet.html
 <html>
 <applet  code = "com.zzk.DrawChinesePasswordApplet.class" width ="1200" height = "1000">
 </applet>
 </html>实例587  Applet中绘制图片验证码
 DrawPasswordWithImageApplet.java
    int WIDTH = 120;// 宽度
     int HEIGHT = 35;// 高度
     private String num = "";// 验证码
     Random random = new Random();// 实例化Random
     public void paint(Graphics g) {
         BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
                 BufferedImage.TYPE_INT_RGB);// 实例化BufferedImage
         Graphics gs = image.getGraphics(); // 获取Graphics类的对象
         if (!num.isEmpty()) {
             num = "";// 清空验证码
         }
         Font font = new Font("黑体", Font.BOLD, 20); // 通过Font构造字体
         gs.setFont(font);// 设置字体
         gs.fillRect(0, 0, WIDTH, HEIGHT);// 填充一个矩形
         Image img = null;// 声明图像对象
         img = getImage(getCodeBase(), "com/zzk/PPD.jpg"); // 创建图像对象
         gs.drawImage(img, 0, 0, WIDTH, HEIGHT, this);// 在缓冲图像对象上绘制图像
         // 输出随机的验证字符
         for (int i = 0; i < 4; i++) {
             char ctmp = (char) (random.nextInt(26) + 65); // 生成A~Z的字母
             num += ctmp;// 更新验证码
             Color color = new Color(20 + random.nextInt(120), 20 + random
                     .nextInt(120), 20 + random.nextInt(120));// 生成随机颜色
             gs.setColor(color); // 设置颜色
             Graphics2D gs2d = (Graphics2D) gs;// 将文字旋转指定角度
             AffineTransform trans = new AffineTransform();// 实例化AffineTransform
             trans.rotate(random.nextInt(45) * 3.14 / 180, 22 * i + 8, 7);
             float scaleSize = random.nextFloat() + 0.8f;// 缩放文字
             if (scaleSize > 1f)
                 scaleSize = 1f;// 如果scaleSize大于1,则等于1
             trans.scale(scaleSize, scaleSize); // 进行缩放
             gs2d.setTransform(trans);// 设置AffineTransform对象
             gs2d.drawString(String.valueOf(ctmp), WIDTH / 6 * i + 28, HEIGHT / 2);// 画出验证码
         }
         g.drawImage(image, 85, 80, null);// 在小应用程序中绘制含有图片验证码的缓冲图像
     }
 DrawPasswordWithImageApplet.html
 <html>
 <applet  code = "com.zzk.DrawPasswordWithImageApplet.class" width ="1200" height = "1000">
 </applet>
 </html>实例588  Applet中绘制带干扰线的验证码
 DrawPasswordWithDisturbApplet.java
     int WIDTH = 120;// 设置宽度
     int HEIGHT = 35;// 设置高度
     private String num = "";// 验证码
     Random random = new Random();// 实例化Random
     public void paint(Graphics g) {
         BufferedImage image = new BufferedImage(WIDTH, HEIGHT,
                 BufferedImage.TYPE_INT_RGB);// 实例化BufferedImage
         Graphics gs = image.getGraphics(); // 获取Graphics类的对象
         if (!num.isEmpty()) {
             num = "";// 清空验证码
         }
         Font font = new Font("黑体", Font.BOLD, 20); // 通过Font构造字体
         gs.setFont(font);// 设置字体
         gs.fillRect(0, 0, WIDTH, HEIGHT);// 填充一个矩形
         Image img = null;
         img = getImage(getCodeBase(), "com/zzk/PPD.jpg"); // 创建图像对象
         gs.drawImage(img, 0, 0, WIDTH, HEIGHT, this);// 在缓冲图像对象上绘制图像
         int startX1 = random.nextInt(20);// 随机获取第一条干扰线起点的x坐标
         int startY1 = random.nextInt(20);// 随机获取第一条干扰线起点的y坐标
         int startX2 = random.nextInt(30) + 35;// 随机获取第一条干扰线终点的x坐标,也是第二条干扰线起点的x坐标
         int startY2 = random.nextInt(10) + 20;// 随机获取第一条干扰线终点的y坐标,也是第二条干扰线起点的y坐标
         int startX3 = random.nextInt(30) + 90;// 随机获取第二条干扰线终点的x坐标
         int startY3 = random.nextInt(10) + 5;// 随机获取第二条干扰线终点的y坐标
         gs.setColor(Color.RED);
         gs.drawLine(startX1, startY1, startX2, startY2);// 绘制第一条干扰线
         gs.setColor(Color.BLUE);
         gs.drawLine(startX2, startY2, startX3, startY3);// 绘制第二条干扰线
         for (int i = 0; i < 4; i++) {// 输出随机的验证文字
             char ctmp = (char) (random.nextInt(26) + 65); // 生成A~Z的字母
             num += ctmp;// 更新验证码
             Color color = new Color(20 + random.nextInt(120), 20 + random
                     .nextInt(120), 20 + random.nextInt(120));// 生成随机颜色
             gs.setColor(color); // 设置颜色
             Graphics2D gs2d = (Graphics2D) gs;// 将文字旋转指定角度
             AffineTransform trans = new AffineTransform();// 实例化AffineTransform
             trans.rotate(random.nextInt(45) * 3.14 / 180, 22 * i + 8, 7);
             float scaleSize = random.nextFloat() + 0.8f;// 缩放文字
             if (scaleSize > 1f)
                 scaleSize = 1f;// 如果scaleSize大于1,则使其等于1
             trans.scale(scaleSize, scaleSize); // 进行缩放
             gs2d.setTransform(trans);// 设置AffineTransform对象
             gs2d.drawString(String.valueOf(ctmp), WIDTH / 6 * i + 28, HEIGHT / 2);// 画出验证码
         }
         g.drawImage(image, 85, 80, null);// 在小应用程序中绘制含有图片和干扰线验证码的缓冲图像
     }
 DrawPasswordWithDisturbApplet.html
 <html>
 <applet  code = "com.zzk.DrawPasswordWithDisturbApplet.class" width ="1200" height = "1000">
 </applet>
 </html>实例589  Applet中模糊图像
 BlurImageApplet.java
     private BufferedImage image;// 声明缓冲图像对象
     public void paint(Graphics g) {
         Image img = null;// 声明创建图像对象
         String value = "模糊图像";
         img = getImage(getCodeBase(), "com/zzk/PPD.jpg");// 获得图片信息
         int a = img.getWidth(this); // 获得图片宽度赋给变量a
         int b = img.getHeight(this);// 获得图片高度赋给变量b
         if (a >= 0 || b >= 0) {
             image = new BufferedImage(img.getWidth(this), img.getHeight(this),
                     BufferedImage.TYPE_INT_RGB);// 创建缓冲图像对象
             image.getGraphics().drawImage(img, 0, 0, null);// 在缓冲图像对象上绘制图像
             float[] data = { 0.0532f, 0.132f, 0.0532f, 0.132f, 0.19f, 0.138f,
                     0.0532f, 0.132f, 0.0532f };// 声明表示像素分量的数组
             Kernel kernel = new Kernel(3, 3, data); // 创建 Kernel对象
             ConvolveOp op = new ConvolveOp(kernel);// 创建ConvolveOp对象
             image = op.filter(image, null); // 过滤缓冲图像对象
             g.drawImage(img, 25, 35, this);// 绘制缓冲图像对象
             g.drawImage(image, 215, 35, this);// 绘制缓冲图像对象
             g.drawString(value, 268, 186);// 绘制文本
         }
     }
 BlurImageApplet.html
 <html>
 <applet  code = "com.zzk.BlurImageApplet.class" width ="500" height = "220">
 </applet>
 </html>实例590  Applet中锐化图像
 SharperImageApplet.java
     private BufferedImage image;// 声明缓冲图像对象
     public void paint(Graphics g) {
         Image img = null;// 声明创建图像对象
         String value = "锐化图像";
         img = getImage(getCodeBase(), "com/zzk/PPD.jpg");// 获得图片信息
         int a = img.getWidth(this); // 获得图片宽度赋给变量a
         int b = img.getHeight(this);// 获得图片高度赋给变量b
         if (a >= 0 || b >= 0) {
             image = new BufferedImage(img.getWidth(this), img.getHeight(this),
                     BufferedImage.TYPE_INT_RGB);// 创建缓冲图像对象
             image.getGraphics().drawImage(img, 0, 0, null);// 在缓冲图像对象上绘制图像
             float[] data = { 0.0f, -1.0f, 0.0f, -1.0f, 6.0f, -1.0f, 0.0f,
                     -1.0f, 0.0f };// 声明表示像素分量的数组
             Kernel kernel = new Kernel(3, 3, data); // 创建 Kernel对象
             ConvolveOp op = new ConvolveOp(kernel);// 创建ConvolveOp对象
             image = op.filter(image, null); // 过滤缓冲图像对象
             g.drawImage(img, 25, 35, this);// 绘制缓冲图像对象
             g.drawImage(image, 215, 35, this);// 绘制缓冲图像对象
             g.drawString(value, 275, 182);// 绘制文本
         }
     }
 SharperImageApplet.html
 <html>
 <applet  code = "com.zzk.SharperImageApplet.class" width ="500" height = "220">
 </applet>
 </html>实例591  Applet中照亮图像边缘
 lightenImageEdgeApplet.java
     private BufferedImage image;// 声明缓冲图像对象
     public void paint(Graphics g) {
         Image img = null;// 声明创建图像对象
         String value = "照亮图像边缘";
         img = getImage(getCodeBase(), "com/zzk/PPD.jpg");// 获得图片信息
         int a = img.getWidth(this); // 获得图片宽度赋给变量a
         int b = img.getHeight(this);// 获得图片高度赋给变量b
         if (a >= 0 || b >= 0) {
             image = new BufferedImage(a, b, BufferedImage.TYPE_INT_RGB);// 创建缓冲图像对象
             image.getGraphics().drawImage(img, 0, 0, this);// 在缓冲图像对象上绘制图像
             float[] f = { 0.0f, -1.5f, 0.0f, -1.5f, 6.0f, -1.5f, 0.0f, -1.5f,
                     0.0f };// 声明表示像素分量
             Kernel kernel = new Kernel(3, 3, f);// 创建Kernel对象
             ConvolveOp op = new ConvolveOp(kernel);// 创建RescaleOp对象
             image = op.filter(image, null); // 过滤缓冲图像对象
             g.drawImage(img, 25, 35, this);// 绘制缓冲图像对象
             g.drawImage(image, 217, 35, this);// 绘制缓冲图像对象
             g.drawString(value, 258, 186);// 绘制文本
         }
     }
 lightenImageEdgeApplet.html
 <html>
 <applet  code = "com.zzk.lightenImageEdgeApplet.class" width ="500" height = "220">
 </applet>
 </html>实例592  Applet中反向图像
 NegativeImageApplet.java
     private BufferedImage image;// 声明缓冲图像对象
     public void paint(Graphics g) {
         String value = "反向图像";
         Image img = null;// 声明图像对象
         img = getImage(getCodeBase(), "com/zzk/PD3.jpg");// 获得图片信息
         int a = img.getWidth(this); // 获得图片宽度赋给变量a
         int b = img.getHeight(this);// 获得图片高度赋给变量b
         if (a >= 0 || b >= 0) {
             image = new BufferedImage(img.getWidth(this), img.getHeight(this),
                     BufferedImage.TYPE_INT_RGB);// 创建缓冲图像对象
             image.getGraphics().drawImage(img, 0, 0, null);// 在缓冲图像对象上绘制图像
             short[] negative = new short[256 * 1];// 创建表示颜色反向的分量数组
             for (int i = 0; i < 256; i++) {
                 negative[i] = (short) (255 - i);// 为数组赋值
             }
             ShortLookupTable table = new ShortLookupTable(0, negative);// 创建查找表对象
             LookupOp op = new LookupOp(table, null);// 创建实现从源到目标查找操作的LookupOp对象
             image = op.filter(image, null);// 调用LookupOp对象的filter()方法,实现图像反向功能
             if (image != null) {
                 g.drawImage(img, 35, 40, null);// 绘制缓冲图像对象
                 g.drawImage(image, 220, 40, null);// 绘制缓冲图像对象
             }
             g.drawString(value, 265, 175);// 绘制文本
         }
     }
 NegativeImageApplet.html
 <html>
 <applet  code = "com.zzk.NegativeImageApplet.class" width ="1200" height = "1000">
 </applet>
 </html>实例593  Applet中图像动态拉伸
 ImageElongateApplet.java
     private boolean flag = true;// 声明标记变量
     private static float xw;// 定义调整图像宽度的变量
     public void init(){
         xw = 0.5f;// 初始化图像宽度
     }
     public void start(){
         Thread th = new Thread(this);// 创建线程对象
         th.start();// 启动线程对象
     }
     public void paint(Graphics g) {
         Image img = null;// 声明图像对象
         img = getImage(getCodeBase(), "com/zzk/PD4.jpg");// 获得图片信息
         int w = img.getWidth(this);// 设置图像的宽度
         int h = img.getHeight(this);// 设置图像的高度
         Graphics2D g2d = (Graphics2D) g;// 将g转换为可以利用的Graphics2D
         g2d.drawImage(img, w - 50, h, this);// 绘制图像
         AffineTransform tr = new AffineTransform(xw, 0, 0, 1, 150, h);// 创建仿射变换对象进行设置变换(第一个参数)
         g2d.drawImage(img, tr, this);// 绘制图像
         
     }
     @Override     public void run() {
         while (true) {
             if (flag) {// 标记变量为true时执行
                 xw += 0.1f;// 使宽度变大
                 if (xw > 2.0f) {// 宽度大于2.0时
                     flag = false;// 标记变量为false
                 }
             } else {// 标记变量为false时执行
                 xw -= 0.1f;// 使宽度变小
                 if (xw < 0.5f) {// 宽度小于2.0时
                     flag = true;// 标记变量为true
                 }
             }
             try {
                 Thread.sleep(200);// 休眠200毫秒
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
             repaint();// 重新调用paint()方法
         }
     }
 ImageElongateApplet.html
 <html>
 <applet  code = "com.zzk.ImageElongateApplet.class" width ="500" height = "220">
 </applet>
 </html>21.6  Applet中的文字动画
 实例594  Applet中文字缩放动画
 TextScaleApplet.java
     public void start() {
         Thread thread = new Thread(this);// 创建线程对象
         thread.start();// 启动线程对象
     }
     private Image img = null; // 声明图像对象
     boolean flag = false;// 定义标记变量,用户控制x的值
     int x = 12;// 定义表示字体大小的变量x
     Font font = new Font("华文楷体", Font.BOLD, 42);// 创建字体对象
     public void paint(Graphics g) {
         img = getImage(getCodeBase(), "com/zzk/PD3.jpg");// 获取图片资源的路径
         Graphics2D g2 = (Graphics2D) g;// 获得Graphics2D对象
         g2.drawImage(img, 0, 0, getWidth(), getHeight(), this);// 绘制图像
         g2.setFont(font);// 指定字体
         g2.setColor(Color.red);// 指定颜色
         g2.drawString("学无止境", 30, 120);// 绘制文本
     }
     public void run() {
         while (true) {
             if (flag) { // flag为true时
                 x -= 2; // x进行减1计算
                 if (x <= 12) {// x小于等于12时
                     x = 12; // x等于12
                     flag = false;// 为flag赋值为false
                 }
             } else {// flag为false时
                 x += 2;// x进行加1计算
                 if (x >= 72) {// x大于等于72时
                     x = 72;// x等于72
                     flag = true;// 为flag赋值为true
                 }
             }
             font = new Font("华文楷体", Font.BOLD, x);// 重新创建字体对象
             repaint();// 调用paint()方法
             try {
                 Thread.sleep(50);// 休眠50毫秒
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
         }
     }
 //    public void update(Graphics g) {
 //        paint(g);
 //    }
 TextScaleApplet.html
 <html>
 <applet  code = "com.zzk.TextScaleApplet.class" width ="350" height = "200">
 </applet>
 </html>实例595  Applet中文字跑马灯动画
 HorseRaceLightTextApplet.java
     public void start() {
         Thread thread = new Thread(this);// 创建线程
         thread.start();// 启动线程对象
     }
     String value = "拥有编程词典,学习编程真轻松。";// 存储绘制的内容
     char[] drawChar = value.toCharArray();// 将绘制内容转换为字符数组
     int[] x = new int[drawChar.length];// 存储每个字符绘制点x坐标的数组
     int y = 100;// 存储绘制点y坐标
     
     public void paint(Graphics g) {
         Image img = null;
         img = getImage(getCodeBase(), "com/zzk/PD3.jpg"); // 创建图像对象
         g.clearRect(0, 0, getWidth(), getHeight());// 清除绘图上下文内容
         g.drawImage(img, 0, 0, getWidth(), getHeight(), this);// 绘制图像
         Font font = new Font("华文楷体", Font.BOLD, 20);// 创建字体对象
         g.setFont(font);// 指定字体
         g.setColor(Color.RED);// 指定颜色
         for (int j = drawChar.length - 1; j >= 0; j--) {
             g.drawString(drawChar[drawChar.length - 1 - j] + "", x[j], y);// 绘制文本
         }
     }
     public void run() {
         boolean flag = false;// 为false时表示第一次执行,x坐标进行等比递增,否则进行等差递减
         while (true) {// 读取内容
             try {
                 for (int i = drawChar.length - 1; i >= 0; i--) {
                     if (!flag) {
                         x[i] = x[i] + 20 * i;// x坐标进行等比递增
                     } else {
                         x[i] = x[i] + 20;// x坐标进行等比递减
                     }
                     if (x[i] >= 360 - 20) {// 大于窗体宽度减20的值时
                         x[i] = 0; // x坐标为0
                     }
                 }
                 repaint();// 调用 paint()方法
                 if (!flag) {
                     flag = true;// 赋值为true;
                 }
                 Thread.sleep(1000);// 当前线程休眠300毫秒
             } catch (InterruptedException e) {
                 e.printStackTrace();
             }
         }
     }
     public void update(Graphics g) { // 重写update()方法防止闪烁
         paint(g);
     }
 HorseRaceLightTextApplet.html
 <html>
 <applet  code = "com.zzk.HorseRaceLightTextApplet.class" width ="350" height = "200">
 </applet>
 </html>实例596  Applet中字幕显示动画
 CaptionSpecificApplet.java
     int x = 50;// 存储绘制点的x坐标
     int y = 216;// 存储绘制点的y坐标
     String value = "明日图书网的网址";// 存储绘制的内容
     public void start() {
         Thread thread = new Thread(this);// 创建线程对象
         thread.start();// 启动线程对象
     }
     public void paint(Graphics g) {
         g.clearRect(0, 0, 316, 237);// 清除绘图上下文内容
         Image img = null;// 声明图片对象
         img = getImage(getCodeBase(), "com/zzk/PD3.jpg");
         g.drawImage(img, 0, 0, getWidth(), getHeight(), this);// 绘制图像
         Font font = new Font("华文楷体", Font.BOLD, 20);// 创建字体对象
         g.setFont(font);// 指定字体
         g.setColor(Color.RED);// 指定颜色
         g.drawString(value, x, y);// 绘制文本
     }
     public void run() {
         try {
             while (true) { // 读取内容
                 Thread.sleep(100); // 当前线程休眠1秒
                 if (y <= 216 - 50) {// 如果已经向上移动50像素
                     y = 216;// y坐标定位到最下方
                     if (value.equals("明日图书网的网址")) {
                         value = "http://www.mingribook.com";// 改变绘制的内容
                     } else {
                         value = "明日图书网的网址";// 改变绘制的内容
                     }
                 } else {// 如果还没向上移动到50像素
                     y -= 2;// y坐标上移
                 }
                 repaint();// 调用paint()方法
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
     public void update(Graphics g) { // 重写update()方法防止闪烁
         paint(g);
     }
 CaptionSpecificApplet.html
 <html>
 <applet  code = "com.zzk.CaptionSpecificApplet.class" width ="350" height = "200">
 </applet>
 </html>实例597  Applet中文字闪现动画
 TextFlashApplet.java
     boolean flag = true;// 标记变量
     String value = "";// 存放绘制内容的变量
     public void start() {
         Thread thread = new Thread(this);// 创建线程对象
         thread.start();// 启动线程对象
     }
     public void paint(Graphics g) {
         Image img = null;// 声明图像对象
         img = getImage(getCodeBase(), "com/zzk/PD3.jpg");
         g.clearRect(0, 0, 310, 230);// 清除绘图上下文的内容
         g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
         Font font = new Font("华文楷体", Font.BOLD, 42);// 创建字体对象
         g.setFont(font);// 指定字体
         g.setColor(Color.red);// 指定颜色
         g.drawString(value, 30, 110);// 绘制文本
     }
     public void run() {
         try {
             while (true) { // 读取内容
                 Thread.sleep(150);// 当前线程休眠150秒
                 if (flag) {// flag为true
                     flag = false; // 赋值为false
                     value = "JAVA编程词典";// 为value赋值
                 } else {
                     flag = true;// 赋值为true
                     value = "";// 赋值为空字符窜
                 }
                 repaint();// 调用paint()方法
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
 TextFlashApplet.html
 <html>
 <applet  code = "com.zzk.TextFlashApplet.class" width ="350" height = "200">
 </applet>
 </html>实例598  Applet中滚动广告字幕动画
 RollTextApplet.java
     String value = "明日图书网的网址:http://www.mingribook.com";// 存放绘制的内容
     int x;// 设置横坐标
     int y;// 设置纵坐标
     public void init() { // 初始化方法
         x = 316;// 存储绘制点的x坐标
         y = 190;// 存储绘制点的y坐标
     }
     public void start() {
         Thread thread = new Thread(this);// 创建线程对象
         thread.start();// 启动线程对象
     }
     public void paint(Graphics g) {
         Image img = null;// 声明图像对象
         img = getImage(getCodeBase(), "com/zzk/PD3.jpg");// 获取图片资源路径
         g.drawImage(img, 0, 0, getWidth(), getHeight(), this);// 绘制图像
         g.clearRect(0, 0, 0, 230);// 清除绘图上下文的内容
         g.setColor(Color.BLACK);// 定义颜色
         Font font = new Font("华文楷体", Font.BOLD, 20);// 创建字体对象
         g.setFont(font);// 定义字体
         g.drawString(value, x, y);// 绘制文本
     }
     public void run() {
         try {
             while (true) { // 读取内容
                 Thread.sleep(50); // 当前线程休眠1秒
                 if (x <= -440) {// 该条件可以根据需要自行调整
                     x = 316;// x坐标定位到最右侧
                 } else {
                     x -= 2;// x坐标左移
                 }
                 repaint();// 调用paint()方法
             }
         } catch (Exception e) {
             e.printStackTrace();
         }
     }
     public void update(Graphics g) { // 重写update()方法防止闪烁
         paint(g);
     }
 RollTextApplet.html
 <html>
 <applet  code = "com.zzk.RollTextApplet.class" width ="316" height = "200">
 </applet>
 </html>