affinetest.java

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

JAVA
82
字号
     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

⌨️ 快捷键说明

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