JavaFX:如何在非UI对象上侦听事件

时间:2015-03-27 00:50:56

标签: java events javafx dispatcher

我有一个Model我叫BlahModel。它由BlahController(BlahModel blahModel)引用。我的目标是BlahModel可以发送和事件

Event.fireEvent(blahModel,...)

BlahController听到了jan动作。截至目前,我一直在使用某人的Observable Integer并观察,但当然感觉不对。

我的问题是,非GUI组件应该如何实现buildEventDispatchChain,以便其他非GUI组件可以监听它。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

EventDispatchChain适用于通过嵌套层次结构(例如场景图)冒泡的事件 - 可能不是您想要/需要的事件。

ReactFXEventStream是类似于ObservableValue的事件:

import org.reactfx.EventSource;
import org.reactfx.EventStream;
import org.reactfx.Subscription;

class BlahModel {

    private EventSource<Integer> events = new EventSource<>();

    public EventStream<Integer> events() { return events; }

    void foo() {
        // fire event
        events.push(42);
    }
}

class BlahController {
    private final Subscription eventSubscription;

    BlahController(BlahModel blahModel) {
        eventSubscription = blahModel.events().subscribe(
                i -> System.out.println("Received event " + i));
    }

    public void dispose() {
        eventSubscription.unsubscribe();
    }
}