Vig*_*ran 2 java code-reuse swing coding-style jcheckbox
我有一组实现特定接口的类,我有一组复选框.如果没有选中复选框,我想抛出一个错误.如果选择了至少一个或多个复选框,则应创建与该复选框关联的对象.
这就是我的表现.
interface U { ... }
class A implements U { ... }
class B implements U { ... }
class C implements U { ... }
class Main {
//....
//....
public void findSelectedCheckBoxesAndCreateObjects() {
if(!(checkboxA.isSelected() || checkboxB.isSelected() || checkboxC.isSelected()) {
System.out.println("No checkboxes selected");
return;
}
//if any selected, create associated object
if(checkboxA.isSelected()) new A(file);
if(checkboxB.isSelected()) new B(file);
if(checkboxC.isSelected()) new C(file);
}
}
Run Code Online (Sandbox Code Playgroud)
现在我有3个问题.
|| checkboxD.isSelected()
每次我有一个新类来检查它时,我都不能继续添加.if(checkboxD.isSelected()) new D(file);
为每节课增加.它非常不优雅.我可以使用某种循环来删除冗余代码吗?
请给我你的建议.谢谢.
您应该使用集合结构来保存您的复选框和那些相关的类.使用Map你可以做这样的事情:
Map <JCheckBox,Class<U>> uCheck = new HashMap<JCheckBox,Class<U>>(
);
//将复选框和U类添加到地图中
uCheck.put(checkBoxA, A.class);
Run Code Online (Sandbox Code Playgroud)
现在,根据复选框状态获取需要实例化的类的集合非常容易:
public Collection<Class<U>> getEnabledClasses(<JCheckBox,Class<U>> checkMap) {
List<Class<U>> result = new LinkedList<Class<U>>();
for (Map.Entry<JCheckBox,Class<U>> entry:checkMap.entrySet()) {
if (entry.getKey().isSelected()) {
result.add(entry.getValue());
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,对getEnabledUs(uCheck)的调用返回所选类的集合.如果集合是空的,则没有选择,因此无关.
for (Class<U> u:getEnabledClasses(...)) {
Constructor<U> cons = u.getConstructor(...);
U instance = cons.newInstance(fileparameter);
instance.doSomething(...);
}
Run Code Online (Sandbox Code Playgroud)
这应该让你开始.(*)免责声明:这是未经测试的代码.相反,伪代码仅在需要时具有清晰的细节.
归档时间: |
|
查看次数: |
320 次 |
最近记录: |