vectortest.java

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

JAVA
150
字号
     import java.awt.*;
     import java.util.*; 
          
     public class VectorTest extends Frame implements Runnable
     {  
          // 速度数组         
          private Vector2D[] vects;
     
          // 上面数组的速度值
          private Vector2D[] vels;

          // 用来画线的颜色
          private final Color[] COLORS = { Color.BLUE,  Color.RED,   Color.GREEN, Color.DARK_GRAY, 
                                           Color.BLACK, Color.ORANGE, Color.PINK, Color.CYAN
                                           };

          // 动画线程
          private Thread animation;
 
          // 屏外绘制图像
          private Image offscreen;

          public void init()
          {
               int len = COLORS.length;

               vects = new Vector2D[len];
               vels  = new Vector2D[len];

               Random r = new Random();

               for(int i = 0; i < len; i++)
               {
                    // 创建组成圆的点
                    vects[i] = new Vector2D.Double(50*(Math.cos(Math.toRadians(i*(360/len)))),  
                                                   50*(Math.sin(Math.toRadians(i*(360/len)))));

                    // 将点移动到屏幕中间
                    vects[i].translate(getSize().width/2, getSize().height/2);
                  
                    vels[i] = new Vector2D.Integer(1 + r.nextInt()%5, 1 + r.nextInt()%5);
               }  

               offscreen = createImage(getSize().width, getSize().height);

               animation = new Thread(this);
          }

          public void start()
          {
               animation.start();
          }

          public void stop()
          {
               animation = null;
          }

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

          public void update(Graphics g)
          {
               // 保存applet窗体的宽和高
               double width  = (double) getSize().width;
               double height = (double) getSize().height;

               for(int i = 0; i < COLORS.length; i++)
               {
                    vects[i].translate(vels[i].getX(), vels[i].getY());

                    if(vects[i].getX() > width)
                    {
                         vects[i].setX(width);
                         vels[i].setX(-vels[i].getX()); 
                    }
                    else if(vects[i].getX() < 0)
                    {
                         vects[i].setX(0);
                         vels[i].setX(-vels[i].getX()); 
                    }

                    if(vects[i].getY() > height)
                    {
                         vects[i].setY(height);
                         vels[i].setY(-vels[i].getY()); 
                    }
                    else if(vects[i].getY() < 0) 
                    {
                         vects[i].setY(0);
                         vels[i].setY(-vels[i].getY());
                    }
               }  

               if(offscreen == null || 
                  offscreen.getWidth(null)  != getSize().width || 
                  offscreen.getHeight(null) != getSize().height)
               {
                    offscreen = createImage(getSize().width, getSize().height);
               }
             
               paint(g);
          }

          public void paint(Graphics g)
          {
               // 将传入的Graphics容器转换为一个可用的Graphics2D对象
               Graphics2D g2d = (Graphics2D)offscreen.getGraphics();
               g2d.setPaint(Color.WHITE);
               g2d.fillRect(0, 0, getSize().width, getSize().height);

               g2d.setStroke(new BasicStroke(3.0f)); 

               // 把所有的线连接起来
               Vector2D prev = vects[COLORS.length-1];
               for(int i = 0; i < COLORS.length; i++)
               {
                    g2d.setPaint(COLORS[i]);

                    g2d.drawLine((int) prev.getX(), (int) prev.getY(),
                                 (int) vects[i].getX(), (int) vects[i].getY());

                    prev = vects[i];
               }  

               g.drawImage(offscreen, 0, 0, this);
          }
          
          public static void main(String[] args){
          	VectorTest vt = new VectorTest();
          	vt.init();
          	vt.start();
          	vt.setSize(640,480);
          	vt.setVisible(true);
          }

     }    // VectorTest

⌨️ 快捷键说明

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