我创建了一个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。
答案 0 :(得分:3)
通常,您只需在repaint
方法中调用setImage
。
您应该调用super.paintComponent
以防止在渲染过程中引入绘制工件的任何可能性。
您应该考虑覆盖getPreferredSize
,以确保在大多数布局管理器下正确布局组件。这应该反映img
的大小。
除非你有其他理由不这样做,否则你可以放弃使用JLabel