如何在JPanel中刷新/重新加载图像

时间:2013-03-13 05:38:59

标签: java swing jpanel background-image repaint

当数据提交到数据库时,我需要重新加载JPanel的背景图像。 我创建了从数据库填充图像的JPanel。当我更新图像并提交图像时,背景会自动更改。 我也尝试使用repaint()和revalidate(),但它不会工作。 它必须重新启动应用程序并再次运行,它才有效。

这是我在JPanel中显示背景的代码。

public void getLogo(Company company, PanelCompany view) {
        JPanel panel = new BackgroundImage(company.getLogoBlob());
        panel.revalidate();
        panel.setVisible(true);
        panel.setBounds(10, 10, 120, 120);
        view.getPanelPhoto().add(panel);
}

这是我的助手班:

public class BackgroundImage extends JPanel{
    private Image image;

    public BackgroundImage (InputStream input) {
        try {
            image = ImageIO.read(input);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void paintComponent(Graphics grphcs) {
        super.paintComponent(grphcs);
        Graphics2D gd = (Graphics2D) grphcs.create();
        gd.drawImage(image, 0, 0, getWidth(), getHeight(), this);
        gd.dispose();
    }
}

任何解决方案?感谢您的关注:)

1 个答案:

答案 0 :(得分:2)

首先,你的助手类应该设置它自己的大小。

其次,您应该只使用Graphics的{​​{1}}实例。

JPanel

现在你的电话会是这样的。

public class BackgroundImage extends JPanel{
    private Image image;

    public BackgroundImage (InputStream input) {
        try {
            image = ImageIO.read(input);
            setPreferredSize(new Dimension(image.getWidth(), image.getHeight()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void paintComponent(Graphics grphcs) {
        super.paintComponent(grphcs);
        Graphics2D g2d = (Graphics2D) grphcs;
        g2d.drawImage(image, 0, 0, getWidth(), getHeight(), this);
    }
}

您的public void getLogo(Company company, PanelCompany view) { JPanel panel = new BackgroundImage(company.getLogoBlob()); view.getPanelPhoto().add(panel); } 班级必须使用布局管理器。这是Oracle's Visual Guide to Layout Managers

选择一个。