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);
}
}
为什么运行时没有显示图片呢???..要调整一下窗口大小,就显示了.能不能一运行就能显示图片呢??
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);
}
}
为什么运行时没有显示图片呢???..要调整一下窗口大小,就显示了.能不能一运行就能显示图片呢??
后来你好解决了,
我还写了个图片浏览器.
paintComponent()
是在有事件发生时重绘.
也有可能是图片正在加载,
你试一下MediaTracker.
g.drawImage(img, 10, 10, null);
后面加上调用validate方法的语句, 不是 this.validate() 就是 g.validate(), 自己试试吧。
我以前也遇到过,
后来你好解决了,
我还写了个图片浏览器.
paintComponent()
是在有事件发生时重绘.
也有可能是图片正在加载,
你试一下MediaTracker.
这个我不会用~~...
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();
}
}
{
super.paintComponent(g);//重写父类
String name = "e:\\a.jpg";
Image img = Toolkit.getDefaultToolkit().getImage(name); g.drawImage(img, 10, 10, null);
this.updateUI();
}
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){}
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);
}
}
谢谢!!