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);
}
为复选框创建一个小的扩展类也可能是有意义的,它允许您存储主题,以便以后更容易访问,但是您可以使用值的顺序在这个设置中找到它