gpt4 book ai didi

java - Swing - 在 JPanel 上重新绘制照片

转载 作者:行者123 更新时间:2023-12-02 04:52:27 24 4
gpt4 key购买 nike

大家好,请帮助我。

正确地,我只需要使用从文件中获取的不同照片来刷新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,则旧照片仍保留在面板上。新照片未绘制。

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 或类似的东西。

提前谢谢您!!!!

最佳答案

不要向框架添加新的 ImagePanel,而是更新现有的...

public class SomeOtherComponent extends JPanel {
private ImagePanel imagePanel;
//...
public SomeOtherComponent() {
//...
imagePane = getTestPicture("picture.jpg");
add(imagePane);
//...
}

当您需要更改图像时,只需使用类似的内容

imagePane.setImage(ImageIO.read(...));
imagePane.repaint();

关于java - Swing - 在 JPanel 上重新绘制照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29091964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com