我有一个Java对象,其状态随着时间的推移而变化。当对象中的一个字段达到某个值时,我希望触发一个外部事件。
我知道Swing通过Listeners处理这个模式 - 我在这个项目中使用Swing - 但是我不确定哪种Listener会适用于这种情况。用户不会更改对象的状态,并且监听器似乎仅由用户的操作触发。
编辑:我正在监控的对象本身不是Swing组件 - 它在主线程的后台运行。
答案 0 :(得分:5)
您可能需要查看专为此目的而设计的java.util.Observable。
这是关于Observer和Observable的JavaWorld教程:
答案 1 :(得分:2)
该状态是否被用户改变或者无关紧要。您可以从更改状态的方法调用侦听器回调,并确保只能通过该方法更改对象的状态:
class A {
public void changeState(State newState) {
state = newState;
for (SomeEventListenerInterface el : listeners) {
el.nofity(this, newState);
}
}
}
答案 2 :(得分:1)
并且监听器似乎仅由用户的操作触发。
并非总是如此。例如,当您更改许多Swing组件(背景,字体等)的属性时,会触发PropertyChangeEvent。
我建议您也可以使用此活动。请阅读How to Write a Property Change Listener上的Swing教程中的部分,以获取示例。