프로그램 시작시 폴더에서 읽은 이미지가 있습니다. 프로그램은 인터넷에서 새 이미지를 다운로드하고 이전 이미지, 동일한 파일 경로 및 동일한 이름을 덮어 쓰지만 표시된 이미지는 이전 이미지입니다. 프로그램을 종료하고 다시로드하면 새 이미지가 표시됩니다. 파일 경로에서 새 ImageIcon을 만들고 이미지를 다운로드 한 후에 JDialog에 표시하려고 했으므로 이미지가 변경되지 않고 여전히 오래된 이미지라는 것을 알고 있습니다. 어떤 아이디어?자바가 덮어 쓰기 된 이미지를 표시하지 않습니다.
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.component를 추가 할 위치를 알아야하기 때문에이 기능이 제대로 작동하지 않습니다. – camickr
관련 문제
- 1. 자바가 추상화되지 않고 오류를 덮어 쓰지 않습니다.
- 2. 덮어 쓰기 된 변수에서 덮어 쓰기 된 변수에 어떻게 액세스해야합니까?
- 3. C#의 이미지 덮어 쓰기 덮어 쓰기
- 4. putImageData가 이미지를 표시하지 않습니다.
- 5. Bash의 덮어 쓰기/덮어 쓰기 기능
- 6. UIimage에서 중복 된 방법으로 이미지를 표시하지 않습니다.
- 7. Fancybox가 올바르게 스트리밍 된 이미지를 표시하지 않습니다.
- 8. 예약 된 작업 덮어 쓰기
- 9. 등록 된 이름을 덮어 쓰기
- 10. Scrollview가 이미지를 표시하지 않습니다.
- 11. Django는 이미지를 표시하지 않습니다.
- 12. imagettftext가 이미지를 표시하지 않습니다.
- 13. PHPlot가 이미지를 표시하지 않습니다
- 14. 팝업이 이미지를 표시하지 않습니다.
- 15. imageview는 이미지를 표시하지 않습니다.
- 16. WebView.loadDataWithBaseUrl이 이미지를 표시하지 않습니다.
- 17. Firefox가 이미지를 표시하지 않습니다!
- 18. 공유가 이미지를 표시하지 않습니다.
- 19. Response.write가 이미지를 표시하지 않습니다.
- 20. DataGridViewImageCell이 이미지를 표시하지 않습니다.
- 21. 프레스코는 이미지를 표시하지 않습니다.
- 22. ABPersonSetImageData가 이미지를 표시하지 않습니다.
- 23. Tkinter에서 이미지를 표시하지 않습니다.
- 24. 이미지를 가로로 표시하지 않습니다.
- 25. Codeigniter가 이미지를 표시하지 않습니다.
- 26. Plone 4 apache 다시 쓰기 프록시가 작동하지만 이미지를 표시하지 않습니다.
- 27. .NET 클래스에서 덮어 쓰기 덮어 쓰기
- 28. 함수 내에서 함수 덮어 쓰기/덮어 쓰기
- 29. 인라인 svg가 이미지를 표시하지 않습니다.
- 30. 덮어 쓰기
오래된 이미지가 변경되는 것을 방지 캐시에서 열리는 수와 라벨을 재 부가 끝났다. 어떻게 읽습니까? 'ImageIO.read (...)'를 사용해야합니다. –
당신이하고있는 것에 대한 코드 스 니펫을 추가 할 수 있다면 도움이 될 것입니다. – Shaded
filePath에서 이미지를 다운로드하고 덮어 쓴 다음 JLabel myL = new ImageIcon (filePath); JDialog jd = 새 JDialog(); jd.add (myL); jdialog는 이전 이미지를 표시합니다. 프로그램을 종료하고 다시 시작하면 새 이미지가 표시됩니다. –