【Java开源代码栏目提醒】:以下是网学会员为您推荐的Java开源代码-AffineTest.java,希望本篇文章对您学习有所帮助。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
public class AffineTest extends Applet implements ItemListener
{
// 要绘制的矩形
private Rectangle2D rect;
// 让我们选择应用变换的顺序的2个单选框
private Checkbox rotateFirst;
private Checkbox translateFirst;
public void init()
{
// 创建一个CheckboxGroup来容纳这2个单选框
setLayout(new BorderLayout());
CheckboxGroup cbg = new CheckboxGroup();
Panel p = new Panel();
rotateFirst = new Checkbox("rotate, translate", cbg, true);
rotateFirst.addItemListener(this);
p.add(rotateFirst);
translateFirst = new Checkbox("translate, rotate", cbg, false);
translateFirst.addItemListener(this);
p.add(translateFirst);
add(p, BorderLayout.SOUTH);
// 基于原点来构建矩形
rect = new Rectangle2D.Float(-0.5f, -0.5f, 1.0f, 1.0f);
}
public void paint(Graphics g)
{
// 把传入的Graphics容器转换为一个可用的Graphics2D对象
Graphics2D g2d = (Graphics2D)g;
// 保存一个恒等变换来清除Graphics2D容器
final AffineTransform identity = new AffineTransform();
// 如果我们想先旋转则为真
boolean rotate = rotateFirst.getState();
// 创建一个随机数字产生器来产生随机的颜色
Random r = new Random();
final double oneRadian = Math.toRadians(1.0);
for(double radians = 0.0; radians < 2.0*Math.PI; radians += oneRadian)
{
// 清除 Graphics2D的变换
g2d.setTransform(identity);
// 记住,操作的顺序和逻辑顺序刚好相反
if(rotate)
{
g2d.translate(100, 100);
g2d.rotate(radians);
}
else
{
g2d.rotate(radians);
g2d.translate(100, 100);
}
g2d.scale(10, 10);
g2d.setColor(new Color(r.nextInt()));
g2d.fill(rect);
}
}
public void itemStateChanged(ItemEvent e)
{
// 新的单选框被选中时,最好重绘!
repaint();
}
} // AffineTest