我有一个图像从程序开始时从文件夹中读取。该程序将从互联网下载新图像并覆盖旧图像,相同文件路径和相同名称,但显示的图像是旧图像。当我退出并重新加载程序时,显示新图像。我知道图像没有改变,因为我也尝试从文件路径创建一个新的ImageIcon,并在下载后将它显示在一个JDialog中,它仍旧是旧图像。有任何想法吗?Java不会显示覆盖的图像
0
A
回答
4
但是它只是显示正确的jdialog。即使我已经调用了frame.validate(),原始帧仍然显示旧图像。 frame.repaint();
将图像读入内存不会导致组件引用新图像。您仍然需要将图标添加到使用旧图像的任何组件。
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import java.util.*;
import javax.imageio.*;
import javax.swing.*;
import java.net.*;
public class ImageReload extends JFrame implements ActionListener
{
JLabel timeLabel;
JLabel imageLabel;
ImageIcon icon = new ImageIcon("timeLabel.jpg");
public ImageReload()
{
timeLabel = new JLabel(new Date().toString());
imageLabel = new JLabel(timeLabel.getText());
getContentPane().add(timeLabel, BorderLayout.NORTH);
getContentPane().add(imageLabel, BorderLayout.SOUTH);
javax.swing.Timer timer = new javax.swing.Timer(1000, this);
timer.start();
}
public void actionPerformed(ActionEvent e)
{
timeLabel.setText(new Date().toString());
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
try
{
String imageName = "timeLabel.jpg";
BufferedImage image = ScreenImage.createImage(timeLabel);
ScreenImage.writeImage(image, imageName);
// This works using ImageIO
// imageLabel.setIcon(new ImageIcon(ImageIO.read(new File(imageName))));
// Or you can flush the image
ImageIcon icon = new ImageIcon(imageName);
icon.getImage().flush();
imageLabel.setIcon(icon);
}
catch(Exception e)
{
System.out.println(e);
}
}
});
}
public static void main(String[] args)
{
ImageReload frame = new ImageReload();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
-1
结束了从框架中删除旧的组件,并与新的图像
frame.remove(picLabel);
BufferedImage b = ImageIO.read(new File(attemptedFilePath));
picLabel = new JLabel(new ImageIcon(b));
GridBagConstraints c = new GridBagConstraints();
c.weightx = 0.5;
c.anchor = GridBagConstraints.FIRST_LINE_START;
c.gridx = 0;
c.gridy = 0;
c.fill = GridBagConstraints.NONE;
c.insets = new Insets(10,10,0,0);
c.gridwidth = 15;
c.gridheight = 15;
frame.getContentPane().add(picLabel, c);
+0
-1,修改组件的属性总是比较容易,然后重新创建组件并将组件添加回GUI。无论何时从可见的GUI添加/删除组件,还需要重新验证()/重新绘制父容器。您还需要知道正在使用的布局管理器,以便您可以设置约束条件。当你有多个组件时,这也不能很好地工作,因为你需要知道在哪里添加component.com组件。 – camickr
相关问题
- 1. 覆盖背景图像不显示
- 2. 覆盖图像显示像全景
- 3. 在图像上显示覆盖图
- 4. 覆盖图像的显示属性
- 5. JQuery FancyBox - 显示覆盖图像
- 6. java中覆盖图像
- 7. 款式不会被图像覆盖
- 8. Java方法不会覆盖
- 9. 说明div覆盖图不显示在李图像
- 10. 如何使图像内容覆盖图显示在图像上?
- 11. 不显示外壳覆盖图标
- 12. android mapsforge覆盖不显示在视图
- 13. CSS覆盖不显示
- 14. MapView不显示覆盖
- 15. jQuery UI覆盖不显示?
- 16. 覆盖图像
- 17. 显示一个覆盖覆盖的DIV
- 18. 图片或图像覆盖Java
- 19. 图像路径不覆盖
- 20. php + upload.class +不覆盖图像
- 21. 我的mapView不能显示地图只显示覆盖项目
- 22. 如何在jquery中显示覆盖图的完整图像?
- 23. 的Java:不会强迫要覆盖
- 24. HTML图像不会显示
- 25. Asp.Net图像不会显示
- 26. UIActivity不会显示图像?
- 27. wordpress图像不会显示
- 28. 图像不会显示
- 29. 图像不会显示 - CSS
- 30. 显示UIView覆盖?
旧的图像可以在缓存中保留,防止它被改变readding的标签。你如何阅读它?你应该使用'ImageIO.read(...)'。 –
如果你可以添加一些你正在做的事情的代码片段会有帮助。 – Shaded
我只是下载并覆盖filePath的图像,然后做JLabel myL = new ImageIcon(filePath); JDialog jd = new JDialog(); jd.add(MYL); jdialog显示旧图像。当我退出并重新启动程序时,显示新图像。 –