java - 再次调用paintComponent

标签 java swing

我创建了一个 ImagePanel 类,它获取 ImageIcon 对象并将其绘制为显示面板。

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() 不会清除面板上的最后一个图像。

最佳答案

通常,您只需要在 setImage 方法中调用 repaint 即可。

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

您应该考虑重写getPreferredSize,以确保组件在大多数布局管理器下正确布局。这应该反射(reflect) img 的大小。

除非您有其他原因,否则您可以直接使用 JLabel

关于java - 再次调用paintComponent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21600856/

相关文章:

java - 是否有可能捕获所有可能的错误/异常?

java - 如何将 spring-boot WAR 部署到 Tomcat?

java - 如何让这个 JButton 工作?

java - JList - 关于 toString() 演示的设计问题

java - Java中点击Tab时如何调用某个函数?

java - 将一个应用程序嵌入到另一个应用程序中

java - 编号图案打印

java - 读取十六进制文件并将其转换为十进制

java - String ReplaceAll 方法不起作用

java - HikariCP 和服务线程