大家好,请你帮助我。
我只需要使用从文件中获取的不同Photo来刷新JPanel
。
第一次在框架上添加JPanel
照片时 - 照片显示正确!一切都好吗
但是当我尝试用另一个动态更改当前的照片并刷新JPanel
时 - 我看到相同的(旧)照片。
并且使用以下“刷新”部分代码的地方无关紧要:
picturePanel.repaint();
picturePanel.validate();
您可以在下面找到代码:
// create the own JPanel
public class ImagePanel extends JPanel {
private Image image;
public Image getImage() {
return image;
}
public void setImage(Image image) {
this.image = image;
}
@override
public void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null) {
g.drawImage(image, 0, 0, getWidth(), getHeight(), null);
} else
System.out.println("The Picture is Missing!");
}
}
从文件中获取照片并将其添加到自己的JPanel( ImagePanel )
public JPanel getTestPicture(String fromFile) {
ImagePanel pp = new ImagePanel();
pp.setLayout(new BorderLayout());
try {
pp.setImage(ImageIO.read(new File(fromFile)));
} catch (IOException e) {
e.printStackTrace();
}
return pp;
}
正确的JPanel主要调用:
picturePanel=getTestPicture("picture.jpg");
frame.add(picturePanel); //looks Correct - Photo is visible.
如果我们试图在程序期间再次重新绘制JPanel照片留在Panel上。新照片没有画。
picturePanel=getTestPicture("picture.jpg");
frame.add(picturePanel); //picture.jpg - it`s showed correctly!
picturePanel=getTestPicture("pic2.jpg");
picturePanel.repaint();
picturePanel.validate();
//doesn`t work ! picture.jpg is on the JPanel still !
请别人帮我吧!我需要了解我的代码中的错误!请不要建议使用JLabel或类似的东西。
谢谢你提前!!!!!
答案 0 :(得分:2)
不要在框架中添加新的ImagePanel
,更新现有的框架......
public class SomeOtherComponent extends JPanel {
private ImagePanel imagePanel;
//...
public SomeOtherComponent() {
//...
imagePane = getTestPicture("picture.jpg");
add(imagePane);
//...
}
当您需要更改图像时,只需使用
之类的内容即可imagePane.setImage(ImageIO.read(...));
imagePane.repaint();