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 + -
显示快捷键?