簡體   English   中英

JavaFX事件/偵聽器/處理程序

[英]JavaFX events/listeners/handlers

我的場景中有2個listViews和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());
}

現在我想要一個列表視圖來監聽事件並處理它,我有這個但它沒有用

    // 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種不同的方式連接應用程序,以便不同的部分可以對其他部分的更改做出反應:

  1. 您可以綁定到屬性並監聽更改。
  2. 您可以設置偵聽器,然后將更改通知他們。
  3. 您可以使用消息傳遞總線。

您使用哪一個取決於各種因素,但是考慮到您在上面所做的事情,我將采用第三點。 您可以嘗試這個https://github.com/bennidi/mbassador

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM