我创建了几个结构相似的MenuItem
,注意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...
是否有一种非常紧凑的方式来编码这些MenuItem
,我是否对主题进行了硬编码?正如要求所说主题控件应该编程,而不是硬编码(也就是说,程序本身应该从Topic枚举类型中确定所有控件的数量和名称)。
如果需要进一步澄清,请告诉我。
答案 0 :(得分:0)
为枚举中的每个主题创建一个数组中的复选框。
像这样。
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);
}
为复选框创建一个小扩展类也是有意义的,它允许您存储主题,以便以后更容易访问,但您可以使用值的顺序来解决这个问题。设置。