2012-05-04 83 views
3

我試圖在圖像處理中做一個實驗。 基本上我有一個圖像,不斷更新定時器,我在JLabel中顯示該圖像。帶更新圖像的JLabel刷新圖標

我的問題是,JLabel不會刷新圖像。

這裏是我的計時器代碼:

Timer timer = new Timer(200, new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 

      count++; 

      System.out.println("timer"); 
      System.out.println(filename); 

      ImageIcon icon = new ImageIcon(filename); 

      label = new JLabel(); 
      label.setIcon(icon); 
      label.setText(""+count); 

      panel = new JPanel(); 
      panel.add(label); 

      frame.getContentPane().removeAll(); 
      frame.getContentPane().add(panel); 

      frame.repaint(); 
      frame.validate(); 

      try{ 
       FileWriter fstream; 

       fstream = new FileWriter(filename,true); 

       BufferedWriter out = new BufferedWriter(fstream); 

       out.write("text to append"); 
       out.close(); 
      }catch (Exception ex){ 
       System.err.println("Error: " + ex.getMessage()); 
      } 
     } 
    }); 

其中,文件名是路徑到我的形象。

顯示圖像,但JLabel從不刷新我的圖像。 我測試我的代碼,並正在努力,如果我兩個不同的圖像之間SWICH ...

編輯:

我通過重複每一個最後的形象創造並使用時間戳重命名及時解決。

+1

你是否在更改文件名變量或者你是否總是使用相同的?通過查看您提供的代碼,我可以看出,文件名總是相同的,所以它會繪製相同的圖像。 –

+0

是的文件名總是相同的,但圖像更新... – Jonathan

+0

爲了更好地幫助,請發佈[SSCCE](http://sscce.org/)。 將任何與'FileWriter'有關的因素列出來 –

回答

6
label = new JLabel(); 
label.setIcon(icon); 
label.setText(""+count); 

panel = new JPanel(); 
panel.add(label); 

frame.getContentPane().removeAll(); 
frame.getContentPane().add(panel); 

frame.repaint(); 
frame.validate(); 

替換所有的東西,如:

label.setIcon(icon); 

如果標籤是不是在這一點上可見,聲明它作爲外部類中的一個屬性,或者在同一水平frame(這在該片段中顯然是可訪問的)。

+0

如果它有助於解決問題,請[接受答案](http://meta.stackexchange.com/a/5235/155831)。 –