Swing - 在JPanel上重新绘制照片

时间:2015-03-17 05:34:14

标签: java swing jpanel

大家好,请你帮助我。

我只需要使用从文件中获取的不同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或类似的东西。

谢谢你提前!!!!!

1 个答案:

答案 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();