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

JavaFX:如何侦听非UI对象上的事件,java,events,javafx,dispatcher,Java,Events,Javafx,Dispatcher,我有一个模型我叫BlahModel。它由BlahController(BlahModel BlahModel)引用。我的目标是BlahModel能够调度和处理事件 事件。fireEvent(blahModel,…) BlahController听到了这一点,开始了jan的行动。到目前为止,我一直在使用某种可观察的整数,并观察它,但当然,这感觉不正确 我的问题是,一个非GUI组件到底应该做什么来实现buildEventDispatchChain,以便其他非GUI组件可以监听它 非常感谢您的帮助。E

我有一个模型我叫BlahModel。它由BlahController(BlahModel BlahModel)引用。我的目标是BlahModel能够调度和处理事件

事件。fireEvent(blahModel,…)

BlahController听到了这一点,开始了jan的行动。到目前为止,我一直在使用某种可观察的整数,并观察它,但当然,这感觉不正确

我的问题是,一个非GUI组件到底应该做什么来实现buildEventDispatchChain,以便其他非GUI组件可以监听它


非常感谢您的帮助。

EventDispatchChain
专为嵌套层次结构(如场景图)中冒泡的事件而设计-可能不是您想要/需要的

EventStream
是与
observeValue
的事件类比:

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();
    }
}
import org.reactfx.EventSource;
导入org.reactfx.EventStream;
导入org.reactfx.Subscription;
类BlahModel{
private EventSource events=new EventSource();
public EventStream events(){return events;}
void foo(){
//火灾事件
事件。推送(42);
}
}
类BlahController{
私人最终认购;
BlahController(BlahModel BlahModel){
eventSubscription=blahModel.events().Subscription(
i->System.out.println(“接收事件”+i));
}
公共空间处置(){
eventSubscription.unsubscripte();
}
}

你不能使用类似的东西吗?我几乎总是发现我可以重构它,并将其视为模型改变的某种状态。(毕竟,模型只是用来表示数据。)然后用JavaFX observable属性表示模型状态,用通常的JavaFX方式观察它似乎很自然。在最坏的情况下,您创建一个
枚举
,并将其包装在
对象属性
(例如,这就是
任务
类的工作方式),但这通常是一种直观的方法。谈到
任务
,您可以检查它们如何管理。(事件管理从第1240行开始,并使用。)