2012-12-08 96 views
3

我需要處理2個類之間的更改交互。java屬性更改監聽器

public class HeadClass { 

private Subclass sub; 

public void refresh() {...} 

} 


public class Subclass{ 

ArrayList store; 

public void add(T data) 
store.add(data); 
firePropertyChange(...); 
} 

每當方法在子類中「添加」被稱爲「刷新」,在HeadClass應該叫方法! 但其中i類應該實現這一行:

private PropertyChangeSupport changes = new PropertyChangeSupport(/*WHAT SHOULD BE HERE?*/); 

如果我在HeadClass實現它,我可以這樣的反應:

changes.addPropertyChangeListener(new PropertyChangeListener() { 
      @Override 
      public void propertyChange(PropertyChangeEvent event) { 
       refresh(); 
      } 
     }); 

但是我應該如何從子類火對PropertyChangeEvents如果我不能訪問propertyChangeSupport「更改」?

回答

3

子類獲取PropertyChangeSupport,以及添加和刪除PropertyChangeListener的方法。您可以將this傳遞給SubClass的PropertyChangeSupport構造函數。

public class Subclass{ 
    private PropertyChangeSupport propChangeSupport = 
     new PropertyChangeSupport(this); 
    private ArrayList store; 

    public void addPropertyChangeListener(PropertyChangeListener listener) { 
    propChangeSupport.addPropertyChangeListener(listener); 
    } 

    public void removePropertyChangeListener(PropertyChangeListener listener) { 
    propChangeSupport.removePropertyChangeListener(listener); 
    } 


    public void add(T data) 
    store.add(data); 
    propChangeSupport.firePropertyChange(...); 
    } 


} 

關鍵是總是什麼類需要有狀態監聽?既然這是SubClass,那麼它需要持有財產變更支持。聆聽的類是將聽衆添加到支持的類。