fontmaptest.java

来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 142 行

JAVA
142
字号
     import java.applet.*;
     import java.awt.*;
     import java.awt.image.*;
     import java.awt.geom.*;
     import java.util.*;

     public class FontMapTest extends Applet implements Runnable
     {
          // 动画线程
          private Thread animation;
 
          // 绘制字符串的FontMap
          private FontMap fontMap;

          // 要绘制的旧数字
          private int number = -100;   

          public void init()
          {               
               // fontMap的键将是代表每一个数字的字符串
               Object[] keys = new Object[10];
               for(int i = 0; i < 10; i++)
               {
                    keys[i] = String.valueOf(i);
               }

               // 加载10个图像到图像数组中;每一个大小为20x20像素
               // 并且有一个1像素的边                     
               Image[] images = loadImageStrip("fontmap2.gif", 10, 20, 20, 1);

               // 创建FontMap
               fontMap = new FontMap(keys, images);
               fontMap.putImage(",",getImage(getDocumentBase(),"comma.gif"));
               fontMap.putImage("-",getImage(getDocumentBase(),"minus.gif"));

               // 创建一个BufferedImage作为FontMap的默认图像
               // 由于图像有一个1像素的边, 实际图像的大小为19x19像素
               BufferedImage bi = new BufferedImage(19, 19, BufferedImage.TYPE_INT_RGB);
               Graphics2D g2d   = bi.createGraphics();
               g2d.setPaint(Color.RED);                     
               g2d.fill(new Rectangle(19, 19));              
               g2d.setPaint(Color.WHITE);                     
               g2d.draw(new Rectangle(1, 1, 17, 17));
               g2d.draw(new Line2D.Double(1,  1, 17, 17));
               g2d.draw(new Line2D.Double(17, 1,  1, 17));
               fontMap.setDefaultImage(bi);

               setBackground(Color.BLACK);

          }   // init

          // 从给定的文件中加载图像数组
          public Image[] loadImageStrip(
              String filename,   // 要加载的文件
              int numImages,     // 加载图像的数量
              int cellWidth,     // 每一个单元的宽和高
              int cellHeight,
              int cellBorder     // 单元的边宽
              )
          {
               // 作为动画帧的图像数组 
               Image[] images = new Image[numImages];

               // 为这个Component创建一个MediaTracker对象
               MediaTracker mt = new MediaTracker(this);
  
               // 加载住图像条
               Image img = getImage(getDocumentBase(), filename); 
               mt.addImage(img, 0);
               try
               {  
                   // 等待加载主图像  
                   mt.waitForID(0);
               }
               catch(InterruptedException e) { /* 什么也不做 */ }

               // 计算列的数目以获取分开的单元
               int numCols = img.getWidth(this) / cellWidth;
              
               // 得到主图像的ImageProducer来源 
               ImageProducer sourceProducer = img.getSource();
               
               // 加载每一个单元!             
               for(int i = 0; i < numImages; i++)
               {
                    images[i] = loadCell(sourceProducer, 
                                         ((i%numCols)*cellWidth)+cellBorder,
                                         ((i/numCols)*cellHeight)+cellBorder,
                                         cellWidth-cellBorder,
                                         cellHeight-cellBorder);
               }

               return images;
          }

          // 假设区域给定,从ImageProducer中加载一个单元 
          public Image loadCell(
              ImageProducer ip,
              int x, int y,
              int width, int height
              )
          {
               return createImage(new FilteredImageSource(ip, 
                                      new CropImageFilter(x, y, width, height)));
          }

          public void start()
          {
              // 启动动画线程
              animation = new Thread(this);
              animation.start();
          }

          public void stop() 
          {
              animation = null;
          }

          public void run() 
          {
               /*Thread t = Thread.currentThread();
	       while (t == animation)
               {
                    try
                    {     Thread.sleep(100);
                    }
                    catch(InterruptedException e) 
                    {     break;
                    }
                    repaint();
                } */             
           }   // run

           public void paint(Graphics g) 
           {
                Graphics2D g2d = (Graphics2D)g;

                // 在(30, 30)绘制数字                
                //fontMap.drawString(String.valueOf(number++), 30, 30, g2d);
                fontMap.drawString("-110,005,215", 30, 30, g2d);
           }    // paint
     }     

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?