JavaFX events/listeners/handlers
JavaFX events/listeners/handlers
我的场景中有 2 个 listView 和 2 个自定义控件。当我按下 listView 中的一个项目时,我想引发事件,然后能够在应用程序的其他任何地方处理它。理想情况下,我希望我的 2 个自定义控件侦听此事件,并在引发时处理它。
不确定这是否正确,但到目前为止我有这个
这是我的自定义事件,我也想传入一个参数,它是哪个优惠,但不知道该怎么做?
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());
}
现在我想要一个列表视图来监听事件并处理它,我有这个但是它不起作用
// 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???
}
});
遗憾的是,这个问题没有直接的答案。对于您的情况,大约有 3 种不同的方式来连接您的应用程序,以便不同的部分可以对其他部分的变化做出反应:
- 您可以绑定到属性并监听更改。
- 您可以设置侦听器,然后通知它们更改。
- 您可以使用消息传递总线。
您使用哪一个取决于多种因素,但考虑到您在上面所做的,我会选择第三个。你可以试试这个https://github.com/bennidi/mbassador
我的场景中有 2 个 listView 和 2 个自定义控件。当我按下 listView 中的一个项目时,我想引发事件,然后能够在应用程序的其他任何地方处理它。理想情况下,我希望我的 2 个自定义控件侦听此事件,并在引发时处理它。
不确定这是否正确,但到目前为止我有这个
这是我的自定义事件,我也想传入一个参数,它是哪个优惠,但不知道该怎么做?
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());
}
现在我想要一个列表视图来监听事件并处理它,我有这个但是它不起作用
// 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???
}
});
遗憾的是,这个问题没有直接的答案。对于您的情况,大约有 3 种不同的方式来连接您的应用程序,以便不同的部分可以对其他部分的变化做出反应:
- 您可以绑定到属性并监听更改。
- 您可以设置侦听器,然后通知它们更改。
- 您可以使用消息传递总线。
您使用哪一个取决于多种因素,但考虑到您在上面所做的,我会选择第三个。你可以试试这个https://github.com/bennidi/mbassador