如何在 Java 中使用 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);
}
}
现在我有3个问题。
- 这只是一个示例代码。原始版本有 8 个复选框和类,未来还会有更多。
- 我无法继续添加
|| checkboxD.isSelected()
每次我有一个新类来检查它时。 - 同样的事情。我无法继续为每个类添加
if(checkboxD.isSelected()) new D(file);
。
这是非常不优雅的。我可以使用某种循环来删除冗余代码吗?
请给我你的建议。 谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您应该使用集合结构来保存复选框和那些相关的类。
使用地图,您可以执行以下操作:
Map>; uCheck = new HashMap>(
);// 将复选框和 U 类添加到映射中
现在,很容易获取需要根据复选框状态实例化的类的集合:
现在,调用 getEnabledUs(uCheck) 返回所选类的集合类。如果集合为空,则没有选择,因此无需执行任何操作。
这应该可以帮助你开始。
(*) 免责声明:这是未经测试的代码。相反,仅在需要的地方使用具有清晰细节的伪代码。
You should use a collection structure to hold your checkboxes and those related classes.
Using a Map you could do something like this:
Map <JCheckBox,Class<U>> uCheck = new HashMap<JCheckBox,Class<U>>(
);// add your checkboxes and U-classes to the map
Now, it's quite easy to get a collection of the classes that need to be instantiated based on the checkbox status:
Now, a call to getEnabledUs(uCheck) returns a collection of the selected classes. If the collection is empty, there's no selection, hence nothing to do.
That should get you started.
(*) Disclaimer: this is non-tested code. Rather pseudo-code with crisp detail only where needed.