Java 创建具有类似结构的'MenuItem'

Java 创建具有类似结构的'MenuItem',java,javafx,Java,Javafx,我创建了几个具有类似结构的MenuItems,注意其中Topic是一个enum类 结构如下所示: CheckBox business = new CheckBox("Business"); // add Topic to filteredTopics set when box is selcted business.setOnAction(new EventHandler<ActionEvent>() { @Override p

我创建了几个具有类似结构的
MenuItem
s,注意其中
Topic
是一个
enum

结构如下所示:

    CheckBox business = new CheckBox("Business");
    // add Topic to filteredTopics set when box is selcted
    business.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            if(((CheckBox)event.getSource()).isSelected()) {
                filteredTopics.add(Topic.BUSINESS);
            } else {
                filteredTopics.remove(Topic.BUSINESS);
            }
        }
    });

    CheckBox international = new CheckBox("International");
    // add Topic to filteredTopics set when box is selcted
    international.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            if(((CheckBox)event.getSource()).isSelected()) {
                filteredTopics.add(Topic.INTERNATIONAL);
            } else {
                filteredTopics.remove(Topic.INTERNATIONAL);
            }
        }
    }); 

    //etc like Sport, Domestic...
CheckBox business=新复选框(“业务”);
//选择框时将主题添加到filteredTopics集合
business.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
如果(((复选框)event.getSource()).isSelected()){
filteredTopics.add(Topic.BUSINESS);
}否则{
filteredTopics.remove(Topic.BUSINESS);
}
}
});
复选框国际=新复选框(“国际”);
//选择框时将主题添加到filteredTopics集合
international.setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
如果(((复选框)event.getSource()).isSelected()){
filteredTopics.add(Topic.INTERNATIONAL);
}否则{
filteredTopics.remove(Topic.INTERNATIONAL);
}
}
}); 
//比如运动,家庭。。。
是否有一种非常简洁的方法来编写这些
MenuItem
s,我是否对主题进行了硬编码?正如要求所述,主题控件应该进行编程,而不是硬编码(也就是说,程序本身应该根据主题枚举类型确定所有控件的数量和名称)


如果需要进一步说明,请告诉我。

为枚举中的每个主题创建一个数组中的复选框

像这样的

List<CheckBox> checkboxes = new ArrayList<CheckBox>();
for(Topic t : Topic.values()) {
   Checkbox c = new Checkbox(t.toString());
   c.setOnAction(new EventHandler<ActionEvent>() {
      @Override
      public void handle(ActionEvent event) {
          if((CheckBox)event.getSource()).isSelected()) {
              filteredTopics.add(t);
          }
          else {
             filteredTopics.remove(t);
          }
      }
   });
   checkboxes.add(c);
}
列表复选框=新建ArrayList();
for(主题t:Topic.values()){
复选框c=新复选框(t.toString());
c、 setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
如果((复选框)event.getSource()).isSelected()){
添加(t);
}
否则{
过滤片。移除(t);
}
}
});
复选框。添加(c);
}
为复选框创建一个小的扩展类也可能是有意义的,它允许您存储主题,以便以后更容易访问,但是您可以使用值的顺序在这个设置中找到它