我坚持按照以下简单示例的方式实施某些内容 -
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可能会从datafeed或类似的东西中获取信息)。我能找到的所有oracle事件文档都指的是swing组件。我在网上找到了类似的求助请求,但答案似乎没有解决这个问题。
感谢您提供的任何帮助! ç
=============================================== ===================================
添加 - (抱歉,它不适合回复评论框)
感谢您的建议。但是如果我有一个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中监听稍微不同的事件。我脑子里想到的画面是很多不同的人在听这个比例,这是播放很多不同的词。每个人都在注意他自己的特定词汇来自收音机,每次他们的话发生时,他们都会检查他们的墙壁(或增加他们的一些场地......)
谢谢!
答案 0 :(得分: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);
}
注意:没有编译这个或任何东西。
这称为观察者模式。您正在使用界面来创建回调。
答案 1 :(得分:0)
一个选项可能是将您的类实现为JavaBean,然后实现PropertyChangeListener
快速浏览一下这项技术。