这是在jpanel上添加和传播图像的程序......这个程序运行正常...完美地给出结果......但我不明白如何覆盖绘制组件执行和谁调用它....
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ImagePanel extends JPanel{
private BufferedImage image;
public ImagePanel() {
try {
FileInputStream fis=new FileInputStream("e:\\pic1.jpg");
BufferedInputStream bis=new BufferedInputStream(fis);
image = ImageIO.read(bis);
} catch (IOException ex) {
}
JFrame jf=new JFrame();
jf.add(this);
jf.setSize(300,300);
jf.setVisible(true);
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image,0,0,this.getWidth(),this.getHeight(), null);
}
public static void main(String[] args) {
new ImagePanel();
}
}
答案 0 :(得分:1)
paint-methods由AWT / Swing的事件派发线程(EDT)调用。循环中的此线程将永久处理您通过SwingUtilities.invokeLater()
提交的事件和与UI相关的任务,并在必要时更新UI。这会导致您的方法被调用。您可以通过在该方法中调用SwingUtilities.isEventDispatchThread()
或Thread.currentThread().getName()
来验证这一点。如果您想手动触发此操作,请不要调用paint方法本身,请致电repaint()
。