我想在一个继承自canvas的类中插入一张jpg的图,代码为
Dimension dimension = size();

   int width = dimension.width;

   int height = dimension.height;

   g.setColor(Color.white);

  g.fillRect(0, 0, width, height);Image vImage = getToolkit().getImage("save.jpg");

 g.drawImage(vImage, 0, 0, width, height, this);但显示的是空白,这是为什么啊?

解决方案 »

  1.   

    重载paint();
    g.drawImage(new ImageIcon("325_260.jpg").getImage(),0,0,this);
      

  2.   

    Image vImage = getToolkit().getImage("save.jpg");
    这句放到外面去声明,当到构造方法去创建
      

  3.   

    不是很明白,我的paint函数为 public void paint(Graphics g)
    {
    Dimension dimension = size();

    int width = dimension.width;

    int height = dimension.height;

    g.setColor(Color.white);

    g.fillRect(0, 0, width, height);

    if(open)
    {
    //FileInputStream fis = new FileInputStream("save.jpg");

    vImage = Toolkit.getDefaultToolkit().getImage("save.jpg");

    g.drawImage(vImage, 0, 0,this);

    System.out.println("openning......");

    open = false;
    }
    Shape shape = null;

    Enumeration enumeration = vShape.elements();

    g.setColor(Color.blue);

    while(enumeration.hasMoreElements())
    {
    shape = (Shape)enumeration.nextElement();

    shape.draw(g);
    }
    if(MouseTag)
    {
    g.setColor(color);
    switch(command)
    {
    case Command.Line: g.drawLine(sx, sy,ex, ey);  

                       break;

    case Command.Rectangle:
       
       if(sx < ex)
       {
       if(sy < ey)  g.drawRect(sx, sy, ex - sx, sy - ey);
       
       else g.drawRect(sx, ey, ex - sx, ey - sy);
       }
       else
       {
       if(sy < ey)  g.drawRect(ex,ey,sx - ex, ey - sy);
       
       else g.drawRect(ex,sy,sx - ex,sy - ey);
       }
       break;
    case Command.Circle:

       int w = (int)Math.sqrt((sx - ex) * (sx - ex) + (ey - sy) * (ey - sy));
       
       g.drawArc(ex - w / 2,ey - w / 2,w, w,0,360);
       
       break;
    }
    }
    }public void openImage(ActionEvent e) 
    {
        open = true;
        repaint();
    }
    这个函数的repaint调用
      

  4.   

    vImage = Toolkit.getDefaultToolkit().getImage("save.jpg");
    这一句是应该这样声明的
    Image vImage;这句作为你的类变量来声明
    然后
    vImage = Toolkit.getDefaultToolkit().getImage("save.jpg");
    这个放到你的构造方法中去声明
    因为getimage这个方法并没有立即就创建出来的,而是需要一段时间,所以放到构造方法中去,给它一个时间
      

  5.   

    我把它变成这样了
    public void paint(Graphics g)
    {
    Dimension dimension = size();

    int width = dimension.width;

    int height = dimension.height;

    Image vImage;

    g.setColor(Color.white);

    g.fillRect(0, 0, width, height);

    if(open)
    {
    //FileInputStream fis = new FileInputStream("save.jpg");

    vImage = Toolkit.getDefaultToolkit().getImage("save.jpg");

    g.drawImage(vImage, 0, 0,this);

    System.out.println("openning......");

    open = false;
    }还是不行啊
      

  6.   

    获取图片的代码放到paint方法外面来做,保留一个Image变量就行了
    在paint方法里面使用就行了。还有可能你的图片根本没有读取到,你用的是相对路径,这个问题要你自己验证了。
      

  7.   

    我是在myeclipse里面编的,其实就是一个简单的画图工具,可以保存图画,也可以读取以前画的,保存已经没问题了,但就是打开以前的老是打不开,
    还有,如果验证路径,怎么验证啊???