import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ImageFrame extends JFrame
{
  public ImageFrame()
  {
    this.setTitle("图像");
    this.setSize(500, 600);
    this.getContentPane().add(new ImagePanel());
    this.addWindowListener(new WindowAdapter()
    {
      public void windowClosing(WindowEvent windowEvent)
      {
        System.exit(0);
      }
    });
  }  public static void main(String[] args)
  {
    ImageFrame iFrm = new ImageFrame();    iFrm.show();
  }
}public class ImagePanel extends JPanel
{
  public void paintComponent(Graphics g)
  {
    String name = "e:\\Vivian.jpg";
    Image img = Toolkit.getDefaultToolkit().getImage(name);    g.drawImage(img, 10, 10, null);
  }
}
为什么运行时没有显示图片呢???..要调整一下窗口大小,就显示了.能不能一运行就能显示图片呢??

解决方案 »

  1.   

    我以前也遇到过,
    后来你好解决了,
    我还写了个图片浏览器.
        paintComponent()
    是在有事件发生时重绘.
       也有可能是图片正在加载,
    你试一下MediaTracker.
      

  2.   

    装载图像之后,再调用 validate()方法在你的程序里面应该是在
    g.drawImage(img, 10, 10, null);
    后面加上调用validate方法的语句, 不是 this.validate() 就是 g.validate(), 自己试试吧。
      

  3.   

    不好意思啊,刚刚说错了, 是调用revalidate() 方法。赫赫
      

  4.   

    加了revalidate()方法后,,还是不行啊~`..
      

  5.   

    zzhzzh204553(真的好想你) ( ) 信誉:100  2005-09-08 20:17:00  得分: 0  
     
     
       我以前也遇到过,
    后来你好解决了,
    我还写了个图片浏览器.
        paintComponent()
    是在有事件发生时重绘.
       也有可能是图片正在加载,
    你试一下MediaTracker. 
    这个我不会用~~...
     
      

  6.   

    下面的代码是我做得一点修改,可以用,但我觉得这样的实现方法肯定不好,你可以试试看。
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class ImageFrame extends JFrame
    {
      public ImageFrame()
      {
        this.setTitle("图像");    
        this.setSize(500, 600);
        ImagePanel ip = new ImagePanel();
        this.getContentPane().add(ip);
        ip.revalidate();
        this.addWindowListener(new WindowAdapter()
        {
          public void windowClosing(WindowEvent windowEvent)
          {
            System.exit(0);
          }
        });
      }  public static void main(String[] args)
      {
        ImageFrame iFrm = new ImageFrame();    iFrm.setVisible(true);
        
      }
    }class ImagePanel extends JPanel
    {
      public void paintComponent(Graphics g)
      {
        String name = "e:\\a.jpg";
        Image img = Toolkit.getDefaultToolkit().getImage(name);    g.drawImage(img, 10, 10, null);
        this.updateUI();
        
      }
    }
      

  7.   

    上面的方法不好,我以前实现这样的东西用了BufferedImage来做的,而且不要使用paintComponent方法
      

  8.   

    可以了~..但有另外一个问题..怎么运行时,电脑变得超慢了~~~..占用了很多的CPU资源~~..
      

  9.   

    你可以使用bufferedImage 做图像显示.
      

  10.   

    使用paintComponent肯定不是一个好办法,强烈建议采用 BufferedImage 来做.
      

  11.   

    public void paintComponent(Graphics g)
      {
       super.paintComponent(g);//重写父类
        String name = "e:\\a.jpg";
        Image img = Toolkit.getDefaultToolkit().getImage(name);    g.drawImage(img, 10, 10, null);
        this.updateUI();
        
      }
      

  12.   

    super.paintComponent(g);//重写父类.楼上的..加了这句也是一样的.
      

  13.   

    你使用
    Image img = Toolkit.getDefaultToolkit().getImage(name);
    加载图像,这样图像是被异步加载的,解决方法参考:AWT 中加载和显示图像的方法 
    http://www.blogjava.net/leon/archive/2005/07/12/7532.htmlAWT 中图像的异步加载和等待图像的完全加载 
    http://www.blogjava.net/leon/archive/2005/07/12/7533.html
    或者直接使用ImageIO:BufferedImage image = null;
    try{
    image = ImageIO.read(new File("c:\\temp.jpg"));
    }catch(IOException e){}
      

  14.   

    我解决了!!!import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    public class ImageFrame extends JFrame
    {
      public ImageFrame()
      {
        this.setTitle("图像");
        this.setSize(500, 600);
        this.getContentPane().add(new ImagePanel());
        this.addWindowListener(new WindowAdapter()
        {
          public void windowClosing(WindowEvent windowEvent)
          {
            System.exit(0);
          }
        });
      }  public static void main(String[] args)
      {
        ImageFrame iFrm = new ImageFrame();    iFrm.show();
      }
    }public class ImagePanel extends JPanel
    {
      public void paintComponent(Graphics g)
      {
        String name = "e:\\Vivian.jpg";
        Image img = Toolkit.getDefaultToolkit().getImage(name);
        MediaTracker media = new MediaTracker(this);    media.addImage(img, 0);    try
        {
            media.waitForID(0);
        }
        catch (InterruptedException e)
        {
            System.out.println(e);
        }
        
        g.drawImage(img, 10, 10, null);
      }
    }
      

  15.   

    chenweionline拜托能不能把BufferImage的使用方法说的更清楚些,最好有个简单的示例。
    谢谢!!