2015-02-07 471 views
0

我在我的場景中有2個listViews和2個自定義控件。當我按ListView中的項目時,我想提出事件,然後能夠在應用程序中的其他任何地方處理。理想情況下,我希望我的2個自定義控件偵聽此事件,並在提出時處理它。JavaFX事件/偵聽器/處理程序

不知道這是正確的,但到目前爲止,我有這個

這裏是我的自定義事件,我也想在一個參數,它的報價是,不知道怎麼做雖然這通過?

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

不幸的是,這個問題沒有一個簡單的答案。對於您的情況大概有3種不同的方式來線了您的應用程序,使不同部分可以以變化作出反應的其他部分:

  1. 你可以綁定屬性和監聽的變化。
  2. 您可以設置偵聽程序,然後通知其更改。
  3. 您可以使用消息總線。

你使用哪一個取決於各種因素,但考慮到你已經做了上面的工作,我會與第三。你可以試試這個https://github.com/bennidi/mbassador

+0

謝謝我使用Google Guava Event Bus。 – Gillardo 2015-02-12 11:07:47

相關問題