A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 汪小照 于 2012-9-22 12:09 编辑
  1. import java.awt.*;
  2. import java.awt.event.*;

  3. class TankClient extends Frame {

  4. int x = 50, y = 50;

  5. public void paint(Graphics g) {
  6. Color c = g.getColor();
  7. g.setColor(Color.RED);
  8. g.fillOval(x, y, 30, 30);
  9. g.setColor(c);

  10. y += 5;
  11. }

  12. public void lauchFrame() {
  13. this.setLocation(400, 300);
  14. this.setSize(800, 600);
  15. this.setTitle("TankWar");
  16. this.addWindowListener(new WindowAdapter() {
  17. public void windowClosing(WindowEvent e) {
  18. System.exit(0);
  19. }
  20. });
  21. this.setResizable(false);
  22. this.setBackground(Color.GREEN);
  23. setVisible(true);

  24. new Thread(new PaintThread()).start();
  25. }

  26. public static void main(String[] args) {
  27. TankClient tc = new TankClient();
  28. tc.lauchFrame();
  29. }

  30. private class PaintThread implements Runnable {

  31. public void run() {
  32. while(true) {
  33. repaint();
  34. try {
  35. Thread.sleep(20);
  36. } catch (InterruptedException e) {
  37. e.printStackTrace();
  38. }
  39. }
  40. }

  41. }

  42. }
复制代码
如何为此代码添加双缓冲技术?请问双缓冲的原理是什么?

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

1 个回复

正序浏览
双缓冲的原理就是先把要画的东西画到一张图片上,再把图片画到屏幕上,此为双缓冲。
双缓冲实现你的程序的代码如下,把他加到你的程序中就行了:
  1. //实现双缓冲
  2.         //可以差api,重画需要调用repaint方法,而repaint方法内部是update方法,所以重写update就行了。
  3.         public void update(Graphics g){
  4.                 if(offScreenImage == null){
  5.                         offScreenImage = this.createImage(800,600);
  6.                 }
  7.                
  8.                 Graphics gImage = offScreenImage.getGraphics();
  9.                 //把图片清空
  10.                 Color c = gImage.getColor();
  11.                 gImage.setColor(Color.GREEN);
  12.                 gImage.fillRect(0, 0, 800, 600);
  13.                 gImage.setColor(c);
  14.                
  15.                 paint(gImage);
  16.                
  17.                 g.drawImage(offScreenImage, 0, 0, null);
  18.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马