texturetest.java

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

JAVA
82
字号
     import java.applet.*;
     import java.awt.*;
     import java.awt.image.*;
     import java.awt.event.*;
     import java.awt.geom.*; 
          
     public class TextureTest extends Applet implements ActionListener
     {  
          // 接受文件名的一个文本域
          private TextField input;

          public void init()
          {
               // 创建一个布局并添加文本域和一个"OK"按钮
               setLayout(new BorderLayout());
               Panel p = new Panel();
               input = new TextField("", 20);
               p.add(input);
               Button ok = new Button("Ok");
               ok.addActionListener(this);
               p.add(ok);
               add(p, BorderLayout.SOUTH);
          }

          public void paint(Graphics g)
          {
               // 把传入的Graphics容器转换为一个可用的 Graphics2D 对象
               Graphics2D g2d = (Graphics2D)g;

               // j绘制形状的外形,如果文本域只包含空格则返回
               if("".equals(input.getText().trim()))
               {
                    g2d.translate(112, 15);
                    g2d.rotate(Math.PI/4);
                    g2d.draw(new Rectangle2D.Double(0, 0, 104, 104));
                    return;
               }

               // 加载一个图像
               // 当讨论动画时我们会谈到 MediaTracker 类

               MediaTracker mt = new MediaTracker(this);
               Image image = getImage(getCodeBase(), input.getText());
               mt.addImage(image, 0);
               try
               {     mt.waitForAll();
               }
               catch(InterruptedException e) { /* 什么也不做 */ }

               // 如果所创建图像的宽或者高<=0,则证明文件名可能是错的
               if(image.getWidth(this) <= 0 || image.getHeight(this) <= 0) 
               {
                    // 打印错误信息并返回
                    input.setText(input.getText() + " : invalid filename.");
                    return;
               }

               // 用图像的宽和高创建一个新的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);

               // 为绘制的图像创建和图像等大的定位矩形
               Rectangle2D bounds = new Rectangle2D.Float(0, 0, bi.getWidth(), bi.getHeight());

               // 设置paint
               g2d.setPaint(new TexturePaint(bi, bounds));

               // 变换并绘制!
               g2d.translate(112, 15);
               g2d.rotate(Math.PI/4);
               g2d.fill(new Rectangle2D.Double(0, 0, 104, 104));
          }

          public void actionPerformed(ActionEvent e)
          {
               // "Ok" 按钮按下;更新变化
               repaint();
          } 
     }    // TextureTest

⌨️ 快捷键说明

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