免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 874 | 回复: 0
打印 上一主题 下一主题

2006.9.7上午总结 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-07 11:48 |只看该作者 |倒序浏览
找了3个Bug:
1:图像闪烁,原因在于没有重载update()函数,并且,在此函数内部只调用paint()函数
2:存放瞬间量的数组越界,原因在于TimeAndMoment内部的Vector是一个static变量,多个对象将共用一份变量
3:取得Map中的Vector出现空指针异常,原因在于存入和取出的key的类型不一样(这种低级错误!)

最后贴一个闪现了双层缓冲区的代码:

import java.awt.*;
import java.awt.event.*;
import java.awt.Canvas;
class ShowCanvas
    extends Canvas {
  Graphics offgc1, offgc2;
  Image offscreen1 = null, offscreen2 = null;
  boolean flag = true;
  int X, Y;
  int width, height;
  public void update(Graphics g) {
     // transfer offscreen to window
     paint(g);
  }
  public void paint(Graphics g) {
    if (offscreen1 == null) {
    offscreen1 = createImage(width, height);
    offgc1 = offscreen1.getGraphics();
   }
   if (offscreen2 == null) {
    offscreen2 = createImage(width, height);
    offgc2 = offscreen2.getGraphics();
   }
   if(flag){
    draw_tendency();
   }
    g.drawImage(offscreen2, 0, 0, this);
    g.drawString("*********************",100,100);
  }
  public void draw_tendency() {
    // clear the exposed area
    offgc1.setColor(Color.black);
    offgc1.fillRect(0, 0, width,height);
    offgc1.setColor(Color.green);
    offgc1.drawString("draw tendency here!",width/2,height/2);
    System.out.println("draw_tendency!");
    // do normal redraw
    //paint(offgc1);
    flag = false;
  }
  public ShowCanvas() {
    try {
      jbInit();
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
  private void jbInit() throws Exception {
    this.addMouseMotionListener(new ShowCanvas_this_mouseMotionAdapter(this));
    this.setSize(new Dimension(400, 300));
    this.width = 400;
    this.height = 300;
  }
  void this_mouseDragged(MouseEvent e) {
    X = e.getX();
    Y = e.getY();
    offgc2.clearRect(0,0,width,height);
    offgc2.drawImage(offscreen1, 0, 0, this);
    offgc2.setColor(Color.red);
    offgc2.drawLine(X, height, X, 0);
    offgc2.drawString(String.valueOf(X), X, 10);
    repaint();
  }
}
class ShowCanvas_this_mouseMotionAdapter
    extends java.awt.event.MouseMotionAdapter {
  ShowCanvas adaptee;
  ShowCanvas_this_mouseMotionAdapter(ShowCanvas adaptee) {
    this.adaptee = adaptee;
  }
  public void mouseDragged(MouseEvent e) {
    adaptee.this_mouseDragged(e);
  }
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/15642/showart_166342.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP