2014年8月,想自己试试把《机械迷城》里的所有简单小游戏抠出来,锻炼下自己类的设计,特别也想写篇博客纪念下:
第一个,是很常见的按钮旋转,点击鼠标图片能实现旋转,并能返回得到一个值,由这个值再控制其他物件。
这一次只先做了一个旋转图片,并未返回值(这个实现也很简单)。
思路:1、创建一个画板,在画板中画一个图像,使用方法
g.drawImage(pointer.getImage(),100,20,null);//pointer是ImageIcon</span>
2、然后,能使图片任意旋转:
AffineTransform at = new AffineTransform(); //仿射变化 类
at.rotate(Math.toRadians(i), image.getWidth(null)/2, image.getHeight(null)/2);//AffineTransform中的旋转方法,当然还有水平移动的方法。(把数学里函数变化方法对集结了。)
3、读取图片:
Image image=ImageIO.read(new File("pointer.png"));//查询ImageIO类
<span style="font-size:18px;">4.建立BufferedImage:
BufferedImage bufferImage=new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);//BufferedImage只是准备一块地方来装图片
5.利用Graphics2D:
Graphics2D g2=bufferImage.createGraphics();
g2.setTransform(at);
g2.drawImage(image,null,null);
Graphics2D 能链接bufferedImage和AffineTransform at
以上,是图片旋转的方法。感谢:http://blog.csdn.net/lj_6891zz/article/details/3859350博主写的帖子受益匪浅
然后跟博主感觉一样,不知道是因为太久没弄java还是本来就比较笨,反正弄了好久。唉,感慨啊。
话说大三还没找到实习了。
当然,这里面还有一个点击鼠标,实现线程的东东,因为没用到新的知识,很快也就写出来了。完毕。
还有用到的pointer.png也贴上来:
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
public class Icon extends JFrame{
public static void main(String[] args){
new Icon();
}
public Icon(){
Pointer p=new Pointer();
add(p);
setSize(500,500);
setVisible(true);
}
}
class Pointer extends JPanel{
int i=0;
int dgree=0;
ImageIcon pointer;
public Pointer(){
addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent arg0) {
class Rotate implements Runnable{
public void run() {
dgree+=72;
System.out.println("dgree"+dgree);
while(i<dgree){
try {
i++;
Thread.sleep(10);
repaint();
System.out.println("i "+i);
if(i==360&&dgree==360){
i=0;dgree=0;}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Thread t=new Thread(new Rotate());
t.start();
}
});
System.out.println(dgree);
}
public void paint(Graphics g){
try {
Image image=ImageIO.read(new File("pointer.png"));
AffineTransform at = new AffineTransform();
at.rotate(Math.toRadians(i), image.getWidth(null)/2, image.getHeight(null)/2);
BufferedImage bufferImage=new BufferedImage(image.getWidth(null),image.getHeight(null),BufferedImage.TYPE_INT_RGB);
Graphics2D g2=bufferImage.createGraphics();
g2.setTransform(at);
g2.drawImage(image,null,null);
pointer=new ImageIcon(bufferImage);
} catch (IOException e) {
e.printStackTrace();
}
g.drawImage(pointer.getImage(),100,20,null);
}
}