2011-11-17 54 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

相关问题