2015-08-15 26 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的这一部分(在循环等中创建控件),可能是更好的方法。 –