再次调用paintComponent

时间:2014-02-06 10:55:08

标签: java swing

我创建了一个ImagePanel类,它获取了一个ImageIcon对象,并将其绘制为show panel。

import javax.swing.JPanel;
import javax.swing.ImageIcon;
import java.awt.Graphics;

class ImagePanel extends JPanel {
    private ImageIcon img;

    public ImagePanel(ImageIcon img) {
        this.setImage(img);
    }

    public void setImage(ImageIcon img){
        this.img = img;

    }

    @Override
    public void paintComponent(Graphics g) {
        if(img instanceof ImageIcon)
            g.drawImage(img.getImage(), 0, 0, this.getWidth(), this.getHeight(), null);
    }
}

但问题是当我更改img时,直到我改变帧大小才会在面板上显示它。我该如何更新?

编辑:repaint()不会清除面板上的最后一个img。

1 个答案:

答案 0 :(得分:3)

通常,您只需在repaint方法中调用setImage

您应该调用super.paintComponent以防止在渲染过程中引入绘制工件的任何可能性。

您应该考虑覆盖getPreferredSize,以确保在大多数布局管理器下正确布局组件。这应该反映img的大小。

除非你有其他理由不这样做,否则你可以放弃使用JLabel