public class ImagePanel extends JPanel
{
private Image img;

public ImagePanel(Image img)
{
this.img = img;
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setSize(size);
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setLayout(null);
}

protected void paintComponent(Graphics g)
{
g.drawImage(img, 0, 0, null);
}
}已经可以显示图片了,但是我不能理解为什么加了一个Image成员变量,然后重写了paintComponent()方法
就可以了?我猜测关键在于Graphics对象是如何传递的?求解释JavaSwingImage

解决方案 »

  1.   

    protected void paintComponent(Graphics g) // 这个方法是系统调用的,Graphics对象也是系统传进来的
    {
    g.drawImage(img, 0, 0, null);
    }
      

  2.   


    对啊,我自己的理解也是系统传进来的,但是我不清楚其中的过程,能不能分析一下过程,或者给一些书名和链接也可以。不清楚其中的Graphics是从哪里来的。如果我没有包含一个Image成员变量,那么他的Graphics又是从哪里来的呢?
      

  3.   

    Graphics是JAVA 2D的图形设备接口,可以支持绘制各种组件与图形图像
    JAVA Swing只有两种方法可以获取Graphics对象
    一种是继承swing组件的paint或者paintComponent方法
    另外一种方法是从图像对象中创建BufferedImage.createGraphic()其他你不可能获取到Graphics接口对象。另外一个更重要是
    从图像创建Graphics,使用完之后要调用dispose方法销毁。
      

  4.   

    那个是pandl 封装好的 重写就好了