2014-01-15 98 views
1

我希望用戶能夠點擊一個按鈕,並選擇和圖像哪些將在屏幕上顯示。如何繪製來自JFileChooser的圖像?

這是我寫的代碼。它似乎不工作:

uploadBtn.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       int retVal = fc.showOpenDialog(EditImage.this); 
       if(retVal == JFileChooser.APPROVE_OPTION){ 
        File file = fc.getSelectedFile(); 
        try{ 
         Image img = ImageIO.read(file); 
         if(img==null){ 
          //TODO: THE FILE IS NOT AN IMAGE. ERROR 
         } 
         ImageIcon ic = new ImageIcon(img); 
         JLabel imageLabel = new JLabel(ic); 
         imagePreview.add(imageLabel); 

        } 
        catch(IOException ex){ 
         //TODO: THE FILE COULD NOT BE OPENED. 
        } 

       } 
      } 
     }); 

imagePreview是一個JPanel,我已經得到某處在屏幕上。

我在做什麼錯?

+0

imagePreview.repaint() – Typo

回答

2
  • 同意其他的答案在這裏需要調用container.revalidate()和(有一個Image,然後要求)container.repaint()

  • 但這種邏輯是錯誤的,你不能,爲什麼要添加/刪除JComponent以顯示另一張圖片,沒有理由,您可以在ImageIcon之間切換JLabel - JLabel.setIcon(file)

  • 還有另外一個問題,Images可以增加使用JVM的內存,你必須調用Icon/ImageIcon.flush()前加入到JLabel.setIcon(a few times mentioned here)

0

當您將JLabel添加到它時,imagePreview是否已經可見?如果是這樣,你不能只添加組件到一個可見的容器;你必須重新驗證它。

0

imagePreview.add(imageLabel);之後致電imagePreview.revalidate(); imagePreview.repaint(),如果您將組件添加到可見容器中,則需要這樣做。