2014-04-26 53 views
0

我有一個觀察這我Window類。我有一個Model類,它擴展了包含一個ImagePanel類和一個Controller類的Observable。我添加到我的Model實例窗口中。更新()調用不叫

我的問題是:我model.notifyObservers()之前做了打印,它的工作原理,另一個打印此通知後,它也能工作。但是我Observer方法的update()裏面的打印沒有顯示出來?

從我的控制器,我把這個setImage方法:

public void setImage(File file) 
    { 
     try 
    { 
     image = ImageIO.read(file); 
     fileName = file.getPath(); 
    } catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
    width = image.getWidth(); 
    height = image.getHeight(); 
    imageType = image.getType(); 
    pixels = new int[width * height]; 
    image.getRGB(0, 0, width, height, pixels, 0, width); 
    this.setLocation(1000, 500); 
    System.out.println("ALRIGHT2"); 
    model.change(); 
    if (model.hasChanged()) 
    { 
     System.out.println("ALRIGHT5"); 
     model.notifyObservers(); 
     System.out.println("ALRIGHT6"); 
    } 
} 

這是我觀察的更新方法:

public void update(Observable o, Object arg) { 
    System.out.println("ALRIGHT3"); 
    image_panel.repaint(); 
    scrollPaneImage.repaint(); 
} 

而且我在觀察構造這樣做:model.addObserver(this);

怎麼了?我以爲我選擇拜一個JFileChooser圖像不更新,因爲這種方法是不是叫......

+0

你不顯示在您創建觀察者的實例,意思是我們應該如何知道什麼時候它被添加?請提供更多信息。 –

+0

是的,我們需要更多的信息來幫助你。 –

+0

我在我的主程序中創建了我的Observer實例,在我的程序入口點。包含此主函數的類位於另一個包含我的觀察者的包中,如果它有幫助的話。 – blondie

回答

0

解決!很抱歉給您帶來不便,我JScrollPane中包含本身包含一個ImageIcon一個JLabel,我忘了更新此ImageIcon的...