我的场景中有2个listView和2个自定义控件。当我按下listView中的某个项目时,我想提出该事件,然后能够在应用程序中的任何其他位置处理此事件。理想情况下,我希望我的2个自定义控件可以监听此事件,并在引发时处理它。
不确定这是否正确,但到目前为止我还有这个
这是我的自定义事件,我还想传递一个关于Offer是什么的参数,不知道如何做到这一点?
public class OfferChangedEvent extends Event {
private static final long serialVersionUID = 1L;
public static final EventType<OfferChangedEvent> OFFER_CHANGED = new EventType<OfferChangedEvent>(ANY, "OFFER_CHANGED");
public OfferChangedEvent() {
this(OFFER_CHANGED);
}
public OfferChangedEvent(EventType<? extends Event> arg0) {
super(arg0);
}
public OfferChangedEvent(Object arg0, EventTarget arg1, EventType<? extends Event> arg2) {
super(arg0, arg1, arg2);
}
}
现在在我的一个自定义控件上,单击按钮时会引发事件,如此
@FXML
public void showOffer(ActionEvent event) {
Button btnView = (Button)event.getSource();
// can i pass in parameter of the offer here??
btnView.fireEvent(new OfferChangedEvent());
}
现在我想要一个listview来监听事件并处理它,我有这个但是它没有工作
// when offer is changed, we dont want to see events
this.eventListPane.addEventHandler(OfferChangedEvent.OFFER_CHANGED, new EventHandler<OfferChangedEvent>() {
@Override
public void handle(OfferChangedEvent event) {
Console.Log("Recived");
eventListPane.setVisible(false);
// How can i get the argument of the offer passed???
}
});
答案 0 :(得分:1)
不幸的是,这个问题并没有直截了当的答案。对于您的情况,有大约3种不同的方式来连接您的应用程序,以便不同的部分可以对其他部分的更改做出反应:
你使用哪一个取决于各种因素,但考虑到你上面所做的,我会选择第三。您可以试试这个https://github.com/bennidi/mbassador