1;我们先介绍怎么创建窗口吧。
2;在窗口进行操作;
注意,在要修改Graphics的颜色的时候,要注意先保存原有颜色,最后还原成原来颜色,确保程序的确定性。
还有这些基本的方法可以查看码了解;
3;在窗口中插入图片;
那个调用的方法
package myFrame;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
/**
* 调用这个方法即可实现加载图片
* @author Administrator
*
*/
public class GamePictureUtil {
private GamePictureUtil() {
}
public static Image getImages(String path){//返回Image对象
URL u = GamePictureUtil.class.getClassLoader().getResource(path);
BufferedImage img = null;
try {
img = ImageIO.read(u);
} catch (IOException e) {
e.printStackTrace();
}
return img;
}
}
4;怎么实现图片的移动;
这个我们分为两个部分;
4.1;界面的重画;
利用线程来实现重画;
4.2;使图片运动起来;
之前我们drawImage()方法的时候有xy坐标吧,我们当时是固定的值,现在我们只需要把它变成变量,并且来给它增加量,来实现图片按照某种路径进行移动,
5;关于动画图片的双缓冲;
我们在4步骤的时候是不是观察在图片在不断的闪动,此时还需要一个缓冲,双缓冲;
直接将下面代码放到主类中即可;
Image ImageBuffer = null;
Graphics GraImage = null;
public void update(Graphics g){ //覆盖update方法,截取默认的调用过程
ImageBuffer = createImage(this.getWidth(), this.getHeight()); //创建图形缓冲区
GraImage = ImageBuffer.getGraphics(); //获取图形缓冲区的图形 上下文
paint(GraImage); //用paint方法中编写的绘图过程对图形缓冲区绘图
GraImage.dispose(); //释放图形上下文资源
g.drawImage(ImageBuffer, 0, 0, this); //将图形缓冲区绘制到屏幕上
}
6;最后还可以进行一下封装,将每个图形界面程序都需要使用的的方法,进行封装成类,封装成一个图形工具包;
package gameUtil;
public class Constant {
public static final int WIGHT = 1000;//窗口的宽度
public static final int HIGTH = 700;//窗口的高度
}
package gameUtil;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
/**
* 调用这个方法即可实现加载图片
* @author Administrator
*
*/
public class GamePictureUtil {
private GamePictureUtil() {
}
public static Image getImages(String path){//添加一个返回图片的方法
URL u = GamePictureUtil.class.getClassLoader().getResource(path);
BufferedImage img = null;
try {
img = ImageIO.read(u);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return img;
}
}
package gameUtil;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/*
* 显示窗口;
*/
public class MyFrame extends Frame{
/**
* 显示出现窗口
* 线程实现,动态图片。
*/
public void showFrame(){
setSize(Constant.WIGHT,Constant.HIGTH);//设置窗口大小,以Eclipse的左上角为原点、
setLocation(100, 100);//设置坐标,这里的坐标也是左上角
setVisible(true);//设置窗口可见,默认是不可见的
new PaintThread().start();//启动线程,反复调用paint。
addWindowListener(new WindowAdapter() {//实现窗口关闭内部类
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
/**
* 定义一个重画窗口的内部类(线程实现);了解即可,懂得调用即可。
* @author Administrator
*
*/
class PaintThread extends Thread{//通过线程,内部类
public void run(){
while(true){
try {
repaint();
Thread.sleep(30);//1s等于100s,一秒休息25次;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}