2015-08-15 71 views
0

我有一個類商店。如何避免此事件處理程序中的重複代碼?

有多個商店,最終數百個。

我有多個按鈕使用一個事件處理程序,因爲它們都做同樣的事情,但有不同的數字取決於商店。

我有事件處理程序檢測哪個按鈕觸發事件。

可變store然後存儲根據按鈕的存儲對象按壓

但檢測哪個按鈕被按下的代碼似乎極爲重複。

它曾經是差了很多,我縮短了很多:

@FXML 
private void handleButtonAction(ActionEvent event) { 
    Object source = event.getSource(); 
    if (source.equals(store01Button)){ 
     store = store01; 
    }else if (source.equals(store02Button)){ 
     store = store02; 
    }else if (source.equals(store03Button)){ 
     store = store03; 
    }else if (source.equals(store04Button)){ 
     store = store04; 
    }else if (source.equals(store05Button)){ 
     store = store05; 
    }else if (source.equals(store05Button)){ 
     store = store05; 
    } 

我正在尋找如何時,我有上百家店的解決這一問題的答案。

+0

一個簡單的「意見」:使用地圖。 –

回答

0

一個簡單的「意見」:使用Map<SomeButtonType, StoreType>其中SomeButtonType是源的類型,和的storetype是什麼類型的商店是將你的交換機處理器減少到一到兩條線路:

private void handleButtonAction(ActionEvent event) { 
    Object source = event.getSource(); 
    store = myMap.get(source); 
} 

中當然,您需要填寫地圖來創建按鈕,但這應該很簡單。

+0

謝謝。它可能是最好的解決方案。這樣我可以遍歷它,如果我必須。 –

0

創建按鈕時使用setUserData來保存對商店的引用。在事件處理程序中,使用getUserData來獲取它。每個java fx組件都維護一個屬性圖。

+0

這是一個不錯的選擇,但因爲我使用FXML,我不認爲有一種方法來設置場景生成器中的用戶數據。我可以將它添加到FXML或在運行時間。 –

+0

嗯......不管你在製作地圖,你都沒有按鈕和商店嗎? – KDM

+0

也許FXML不是最好的選擇,如果你將要有數百個控件......用Java創建UI的這一部分(在循環等中創建控件),可能是更好的方法。 –