JavaFX事件/侦听器/处理程序

时间:2015-02-07 05:50:02

标签: java javafx javafx-2 javafx-8

我的场景中有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???
        }
    });

1 个答案:

答案 0 :(得分:1)

不幸的是,这个问题并没有直截了当的答案。对于您的情况,有大约3种不同的方式来连接您的应用程序,以便不同的部分可以对其他部分的更改做出反应:

  1. 您可以绑定到属性并侦听更改。
  2. 您可以设置侦听器,然后通知他们更改。
  3. 您可以使用短信总线。
  4. 你使用哪一个取决于各种因素,但考虑到你上面所做的,我会选择第三。您可以试试这个https://github.com/bennidi/mbassador