带有更新图像的 JLabel 刷新图标

Posted

技术标签:

【中文标题】带有更新图像的 JLabel 刷新图标【英文标题】:JLabel refresh icon with updated image 【发布时间】:2012-05-13 19:28:19 【问题描述】:

我正在尝试进行图像处理实验。 基本上我有一个由计时器持续更新的图像,我在 JLabel 中显示该图像。

我的问题是 JLabel 不刷新图像。

这是我的计时器代码:

Timer timer = new Timer(200, new ActionListener() 
        public void actionPerformed(ActionEvent e) 

            count++;

            System.out.println("timer");
            System.out.println(filename);

            ImageIcon icon = new ImageIcon(filename);

            label = new JLabel();
            label.setIcon(icon);
            label.setText(""+count);

            panel = new JPanel();
            panel.add(label);

            frame.getContentPane().removeAll();
            frame.getContentPane().add(panel);

            frame.repaint();
            frame.validate();

            try
                FileWriter fstream;

                fstream = new FileWriter(filename,true);

                BufferedWriter out = new BufferedWriter(fstream);

                out.write("text to append");
                out.close();
            catch (Exception ex)
                System.err.println("Error: " + ex.getMessage());
            
        
    );

filename 是我的图像的路径。

图像已显示,但 JLabel 从未刷新我的图像。 我测试了我的代码,如果我在两个不同的图像之间切换,它就可以工作......

编辑:

每次创建最后一个图像并使用时间戳重命名时,我都通过重复来解决。

【问题讨论】:

您是在更改文件名变量还是一直使用相同的变量?从我通过查看您提供的代码可以看出,文件名始终相同,因此它将绘制相同的图像。 是的,文件名始终相同,但图像已更新... 如需尽快获得更好的帮助,请发帖 SSCCE。排除与FileWriter 相关的任何内容 我认为问题不在于图像没有更新,我很确定它是。尽管如此,我确实认为“形象”并没有像你想象的那样被改变。 BufferedWriter 用于将文本写入文件,您可以通过调用 write 来执行此操作,但文件名是图像而不是文本文件。尝试注释掉您的 try 语句,并更改文件名以在您的方法中最后引用不同的图像。这将确认问题是否在于图像更新而不是刷新 当我在我的问题中编辑时,我发现每次都创建一个带有时间戳的新文件。图像已正确更新,是关于图像中单词的实验,所以我需要将图像写成文本。谢谢。 【参考方案1】:
label = new JLabel();
label.setIcon(icon);
label.setText(""+count);

panel = new JPanel();
panel.add(label);

frame.getContentPane().removeAll();
frame.getContentPane().add(panel);

frame.repaint();
frame.validate();

将所有内容替换为:

label.setIcon(icon);

如果此时标签不可见,则将其声明为外部类的类属性或与frame 处于同一级别(在那个sn-p 中显然可以访问)。

【讨论】:

如果它有助于解决问题,请accept the answer。

以上是关于带有更新图像的 JLabel 刷新图标的主要内容,如果未能解决你的问题,请参考以下文章

JLabel 中的刷新图像不起作用

将JLabel图标转换为Java中的字节

如何将 JLabel 中的图标(拖放)移动到另一个 JLabel 而不是复制它?

JLabel 中有两个图标?

如何将 JLabel 的文本放在其图标下

如何将图标从 JLabel 转换为 BufferedImage?