label2dtest.java

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

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

     public class Label2DTest extends Applet implements Runnable
     {
          // 动画线程
          private Thread animation;

          private BufferedGraphics offscreen;
 
          // 要绘制的标签的数组
          private Label2D[] labels;

          // 我们将要用的各种字体的描述字符串
          private final String[] fonts = {"Helvetica", "Arial", "Courier", "Terminal", "Georgia"};

          // 方便创建TexturePaint对象使用的工具类
          private TexturePaint createTexturePaint(String filename)
          {
               MediaTracker mt = new MediaTracker(this);
               Image image = getImage(getCodeBase(), filename);
               mt.addImage(image, 0);
               try
               {     mt.waitForAll();
               }
               catch(InterruptedException e) { /* 什么也不做 */ }

               // 使用图像的宽和高创建一个新的BufferedImage
               BufferedImage bi = new BufferedImage(
                        image.getWidth(this), image.getHeight(this), BufferedImage.TYPE_INT_RGB);

               // 得到BufferedImage的Graphics2D容器并在上面绘制原来的图像
               ((Graphics2D)bi.getGraphics()).drawImage(image, new AffineTransform(), this);

               // 为paint的图像创建边界矩形 
               Rectangle bounds = new Rectangle(0, 0, bi.getWidth(), bi.getHeight());

               // 创建Paint
               return new TexturePaint(bi, bounds);
          }

          public void init()
          {               
               labels = new Label2D[fonts.length];

               // 创建两个TexturePaint用来绘制- 一个用于可用状态,一个用于不可用状态
               TexturePaint tpEnabled  = createTexturePaint("label1.gif");
               TexturePaint tpDisabled = createTexturePaint("label2.gif");
     
               // 创建标签
               for(int i = 0; i < fonts.length; i++)
               {
                    // 用指定的字体、字体样式和可用paint创建一个Label2D
                    labels[i] = new Label2D(new Font(fonts[i], Font.PLAIN, 40), fonts[i], tpEnabled);

                    // 设置标签的位置
                    labels[i].setPos(new Vector2D.Double(50, 50+(i*50)));

                    // 设置标签的不可用paint
                    labels[i].setDisabledPaint(tpDisabled); 
               }

               offscreen = new BufferedGraphics(this);

               AnimationStrip.observer = this;

          }   // init


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

          public void stop() 
          {
              animation = null;
          }

          public void run() 
          {
               long time = System.currentTimeMillis();

               Thread t = Thread.currentThread();
	       while (t == animation)
               {
                    repaint();

                    try
                    {
                         Thread.sleep(10);
                    }
                    catch(InterruptedException e) 
                    {
                         break;
                    }

                    // 每隔几秒反转一下标签的可用状态
                    if(System.currentTimeMillis() - time > 5000)   
                    {
                         for(int i = 0; i < fonts.length; i++)
                         {
                              labels[i].setEnabled(! labels[i].isEnabled());
                         }

                         time = System.currentTimeMillis();
                    }
                }              

           }   // run

          
           public void update(Graphics g)
           {
               paint(g);
           }
 
           public void paint(Graphics g) 
           {
               Graphics2D bg = (Graphics2D)offscreen.getValidGraphics();
               bg.setPaint(Color.BLACK);
               bg.fillRect(0, 0, getSize().width, getSize().height);

               // 绘制标签
               for(int i = 0; i < fonts.length; i++)
               {
                    labels[i].paint(bg);
               }
               
               g.drawImage(offscreen.getBuffer(), 0, 0, this);

           }    // paint

     }     // Label2DTest

⌨️ 快捷键说明

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