2013-10-22 73 views
0

在我的代碼中,我有一個JButton(名爲PlotStatus),點擊後可以在JLabel中導入和打印圖像。圖像從不斷更新的png文件導入爲BufferedImage。我希望能夠在JButton被點擊時刷新/更新JLabel上的圖像。也就是說,在每次點擊時,我都希望緩衝區內存重置,並且JLabel重新加載(更新的)圖像。相反,我得到了所有不同的圖像,第一個留在前臺。用JButton更新JLabel

StatusLabel和temp在這裏定義爲private(但公開沒有區別)。 我已經嘗試了許多不同的方式,閱讀大量絕對沒有運氣的帖子,看起來應該是有效的東西。任何建議,高度讚賞。

在此先感謝。

 //This is an Item Listener which reacts to clicking on the JButton PlotStatus 
    PlotStatus.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent ev) { 

    JLabel statusLabel = new JLabel(); panel1.remove(statusLabel); 
    BufferedImage bufferedImage = null; 
    try { 
    bufferedImage = ImageIO.read(new File("status.png")); 
    bufferedImage.flush(); 

    JLabel temp = new JLabel(); 
    temp.setIcon(new ImageIcon(bufferedImage)); 
    statusLabel = temp; 
    panel1.add(statusLabel);  
    revalidate();repaint(); 

    statusLabel.setVisible(true);statusLabel.setBounds(560,20,650,440); 
    } catch(IOException ex) {ex.printStackTrace();} 
    } 
    }); 
+0

我在這裏應用了(第一個)答案的建議http://stackoverflow.com/questions/8084115/use-of-seticon-on-jlabel-repeats-old-image但它再次沒有奏效。 –

回答

0

所以,我自己找到了答案。足夠愚蠢的是,我在的ActionListener裏有JLabel statusLabel = new JLabel();。所以,任何時候我點擊按鈕,被觸發的動作都會創建一個JLabel(因此也就是BufferedImage)的新實例,導致我的揮杆動作的JLabel數量等於JButton的點擊次數!我只是在行PlotStatus.addActionListener(new ActionListener() {之前移動JLabel statusLabel = new JLabel();,並且它現在可以按預期在每次單擊時工作並更新BufferedImage。

我希望這對未來的某個人有用!