我有一个对象,让我们说FOO,带有变量,百分比......
我需要创建一个Action percentChanged,它将在变量percent更改时触发,该变量将由另一个对象中的ActionListener处理...
如何在java中完成?
答案 0 :(得分:3)
为什么不使用PropertyChangeListener。这就是Java bean的工作方式。
答案 1 :(得分:2)
我认为你需要Observer Pattern。
答案 2 :(得分:2)
ActionListener
接口只有actionPerformed
方法,因此您可以通过创建自己的侦听器接口并让Foo
类通知已注册的侦听器来实现您要完成的任务。
例如,可以创建一个名为PercentChangeListener
的新接口:
interface PercentChangeListener {
public void percentChanged();
}
然后,Foo
类可以设置注册PercentChangeListener
的方法,当百分比发生变化时应该通知这些方法:
class Foo {
// Percentage.
private Percent percent;
// Listeners which should be notified of a change to the percentage.
private List<PercentageChangeListener> listeners;
// Adds a listener that should be notified.
public void addListener(PercentageChangeListener listener) {
listener.add(listener);
}
// Notifies all the listeners which should be told that the percentage
// has changed.
private void notifyListeners() {
for (PercentageChangeListener listener : listeners) {
listener.percentChanged();
}
}
// Some process which changes the percentage.
private void someProcess() {
percent.change();
notifyListeners();
}
}
然后,任何应该通知Foo
百分比变化的对象应该实现PercentChangeListener
或者有一个处理它的处理程序:
class ClassThatHandlesFoo {
public void someMethod() {
Foo f = new Foo();
f.addPercentageChangeListener(this);
}
public void percentChanged() {
// Perform action when percent of "Foo f" has changed.
}
}
以上是未经测试的代码,但应该对可以采取的方法有所了解。