2011-11-17 45 views
2

我被困在沿下面的簡單示例 - 的線路實現一種內在的東西更改變創建一個事件如何在一個對象類

public class SimpleClass 
{ 
    int test=0; 
    AnotherClass anotherClass= new AnotherClass(); 

    public SimpleClass() 
    { 

    } 

    public static void main(String[] args) 
     { 
     SimpleClass simpleClass = new SimpleClass(); 
    } 
} 

public class AnotherClass 
{ 
    int value=5; 

    . 
    . 
    . 
} 

我想提出「測試」(說)增量每當'anotherClass'中的值發生變化時(另一個類可能從數據饋送或類似的東西中獲取信息)。我可以找到的所有oracle事件文檔都引用swing組件。我在網上發現了類似的求助請求,但答案似乎並沒有解決這個問題。

感謝您提供任何幫助! C

============================================ ======================================

另外 - (抱歉,它wouldn' t適合於回覆評論框)

感謝您的建議。但是,如果我有一個A類,它有另一個B類坐在它作爲一個字段,並且我想(1)監聽B類字段中的變化(比如int var),並且(2)檢測這些變化A類的級別具有生成的事件觸發類A中的方法,但對我而言,這種方法不起作用。

如果我把聽衆放在A班,我不能指定從這裏聽取「B.var」中的更改。相反,如果我把我的監聽器放在B類(它是A類的一個字段)中,那麼它將能夠檢測到var中的變化,但是如何能夠引發這個變化並且在A類中進行更改,因爲B坐在A類作爲一個領域,而不是「知道」A類的存在?

一個解決方案是將B的所有字段和方法合併到A中。但是,最終我想將B作爲一個靜態類並且有許多不同的A,每個A在B中聽略微不同的事件我頭腦中想到的圖片有很多不同的人在聽比例,這是廣播不同的單詞。每個人都在收看收音機裏自己特別的單詞,每當他們的單詞出現時,他們會在牆上放一張支票(或增加一些字段)。

謝謝!

回答

1

想想在Swing中解決這個問題的方法。這是觀察者模式。

class A implements ChangeListener{ 

    private B aB; 

    public A(){ 
     aB = new B(); 
     aB.addListener(this); 
    } 

    public void thingyChanged(String newThingy){ 
     System.out.println("Thingy changed to:" + newThingy); 
    } 
} 

class B { 

    private Collection<ChangeListener> listeners = new LinkedList<ChangeListener>(); 

    public B(){} 

    public void addListener(ChangeListener listener){ 
     listeners.add(listener) 
    } 

    public void changeThingy(String newThingyVal){ 
     doSomething(newThingyVal); 
     for(ChangeListener listener:listeners){ 
      listener.thingyChanged(newThingyVal); 
     } 
    } 

} 

interface ChangeListener{ 
    public void thingChanged(String newThingy); 
} 

注意:沒有編譯這個或任何東西。

這被稱爲觀察者模式。您正在使用接口來創建回調。

http://en.wikipedia.org/wiki/Observer_pattern

+0

感謝您的建議,我在原來的問題的編輯說。 – user1051901

相關問題