用java绘制图像时候,为了速度,需要缓存图像。写一个示例代码,供参考。
import
java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
class MyPanel extends JPanel ... {
private int px = 400;
private Image newImage = null;
public MyPanel()...{
super();
this.setSize(400, 400);
final MyPanel t = this;
//内部线程绘制图,具体应用中,一般由外部控制
new Thread()...{
public void run()...{
try...{
while(true)...{
t.addPX();
t.repaint();
this.sleep(10);
}
}catch(Exception e)...{
e.printStackTrace();
}
}
}.start();
}
public void addPX()...{
if(px>400)...{
px = 0;
//随几绘制背景图
newImage = new BufferedImage(
400,
400,
Transparency.BITMASK);
Graphics2D g = (Graphics2D)newImage.getGraphics();
g.setColor(Color.red);
int t1 = (int)(Math.random()*300);
int t2 = (int)(Math.random()*300);
int t3 = (int)(Math.random()*300);
int t4 = (int)(Math.random()*300);
int t5 = (int)(Math.random()*300);
int t6 = (int)(Math.random()*300);
int t7 = (int)(Math.random()*300);
int t8 = (int)(Math.random()*300);
g.fill3DRect(t1, t2, t3, t4, true);
g.setColor(Color.green);
g.fillOval(t5, t6, t7, t8);
g.dispose();
}
px ++;
}
public void paint(Graphics gt)
...{
super.paint(gt);
if(newImage!=null)...{
//绘制缓存图片
gt.drawImage(newImage,0,0,this);
}
gt.setColor(Color.blue);
gt.drawLine(0,0,px,400);
}
}
public class Main extends JFrame ... {
public Main()...{
super("测试页面");
this.setSize(400,400);
this.setLocation(100,100);
Container con=this.getContentPane();
con.setLayout(null);
MyPanel mp = new MyPanel();
mp.setLocation(0, 0);
con.add(mp);
//添加关闭退出
this.addWindowListener(
new WindowAdapter()...{
public void windowClosing(WindowEvent event)
...{
System.exit(0);
}
}
);
}
public static void main(String[] args) ...{
// TODO Auto-generated method stub
Main view = new Main();
view.setVisible(true);
}
}
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Transparency;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
import javax.swing.JPanel;
class MyPanel extends JPanel ... {
private int px = 400;
private Image newImage = null;
public MyPanel()...{
super();
this.setSize(400, 400);
final MyPanel t = this;
//内部线程绘制图,具体应用中,一般由外部控制
new Thread()...{
public void run()...{
try...{
while(true)...{
t.addPX();
t.repaint();
this.sleep(10);
}
}catch(Exception e)...{
e.printStackTrace();
}
}
}.start();
}
public void addPX()...{
if(px>400)...{
px = 0;
//随几绘制背景图
newImage = new BufferedImage(
400,
400,
Transparency.BITMASK);
Graphics2D g = (Graphics2D)newImage.getGraphics();
g.setColor(Color.red);
int t1 = (int)(Math.random()*300);
int t2 = (int)(Math.random()*300);
int t3 = (int)(Math.random()*300);
int t4 = (int)(Math.random()*300);
int t5 = (int)(Math.random()*300);
int t6 = (int)(Math.random()*300);
int t7 = (int)(Math.random()*300);
int t8 = (int)(Math.random()*300);
g.fill3DRect(t1, t2, t3, t4, true);
g.setColor(Color.green);
g.fillOval(t5, t6, t7, t8);
g.dispose();
}
px ++;
}
public void paint(Graphics gt)
...{
super.paint(gt);
if(newImage!=null)...{
//绘制缓存图片
gt.drawImage(newImage,0,0,this);
}
gt.setColor(Color.blue);
gt.drawLine(0,0,px,400);
}
}
public class Main extends JFrame ... {
public Main()...{
super("测试页面");
this.setSize(400,400);
this.setLocation(100,100);
Container con=this.getContentPane();
con.setLayout(null);
MyPanel mp = new MyPanel();
mp.setLocation(0, 0);
con.add(mp);
//添加关闭退出
this.addWindowListener(
new WindowAdapter()...{
public void windowClosing(WindowEvent event)
...{
System.exit(0);
}
}
);
}
public static void main(String[] args) ...{
// TODO Auto-generated method stub
Main view = new Main();
view.setVisible(true);
}
}