如何执行以下程序中的paintcomponent方法?

时间:2014-09-28 07:12:07

标签: jpanel

这是在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();
}

}

1 个答案:

答案 0 :(得分:1)

paint-methods由AWT / Swing的事件派发线程(EDT)调用。循环中的此线程将永久处理您通过SwingUtilities.invokeLater()提交的事件和与UI相关的任务,并在必要时更新UI。这会导致您的方法被调用。您可以通过在该方法中调用SwingUtilities.isEventDispatchThread()Thread.currentThread().getName()来验证这一点。如果您想手动触发此操作,请不要调用paint方法本身,请致电repaint()