【问题标题】:How to create an Event on a Variable Change inside an Object Class如何在对象类中的变量更改上创建事件
【发布时间】:2011-11-17 13:46:42
【问题描述】:

我坚持按照以下简单示例的方式实现一些东西-

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”中的值发生变化时,我想让“test”(比如说)增加 1(anotherClass 可能正在从数据馈送或类似的东西中获取信息)。我能找到的所有 oracle 事件文档都参考了 swing 组件。我在网上找到了类似的求助请求,但答案似乎没有解决这个问题。

感谢您提供的任何帮助! C

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

添加-(对不起,它不适合回复评论框)

感谢您的建议。但是,如果我有一个 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 中略有不同的事件。我脑海中的画面是很多不同的人在听这个比例,它正在播放很多不同的词。每个人都在关注他自己的特定单词是否来自收音机,每次出现他们的单词时,他们都会在墙上打勾(或增加他们拥有的一些字段..)

谢谢!

【问题讨论】:

    标签: java events class variables listener


    【解决方案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

    【讨论】:

    • 感谢您的建议,我在原始问题的编辑中回复了。
    【解决方案2】:

    一个选项可能是将您的类实现为 JavaBean,然后实现 PropertyChangeListener

    快速浏览一下该技术。

    http://www.kodejava.org/examples/343.html

    【讨论】:

    • 感谢链接,因空间不足,已在原帖中回复。
    猜你喜欢
    • 2014-03-05
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2014-06-09
    • 1970-01-01
    相关资源
    最近更新 更多