gpt4 book ai didi

java - 如何在 Java 中使用 JCheckBoxes 避免冗余编码

转载 作者:行者123 更新时间:2023-11-30 06:34:16 25 4
gpt4 key购买 nike

我有一组实现特定接口(interface)的类和一组复选框。如果没有选中复选框,我想抛出一个错误。如果至少选中了一个或多个复选框,那么它应该创建与该复选框关联的对象。

我就是这样做的。

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 个问题。

  1. 这只是一个示例代码。原始版本有 8 个复选框和类,以后还会有更多。
  2. 我无法继续添加 || checkboxD.isSelected() 每次我有一个新的类来检查它。
  3. 同样的事情。我不能继续为每个类添加 if(checkboxD.isSelected()) new D(file);

这很不雅观。我可以使用某种循环来删除冗余代码吗?

请给我您的建议。谢谢。

最佳答案

您应该使用一个集合结构来保存您的复选框和那些相关的类。使用 Map 你可以做这样的事情:

Map <JCheckBox,Class<U>> uCheck = new HashMap<JCheckBox,Class<U>>( );

//将您的复选框和 U 类添加到 map 中

uCheck.put(checkBoxA, A.class);

现在,很容易得到需要根据复选框状态实例化的类的集合:

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());
}
}
}

现在,调用 getEnabledUs(uCheck) 会返回所选类的集合。如果集合为空,则没有选择,因此无事可做。

for (Class<U> u:getEnabledClasses(...)) {
Constructor<U> cons = u.getConstructor(...);
U instance = cons.newInstance(fileparameter);
instance.doSomething(...);
}

这应该让你开始。(*) 免责声明:这是未经测试的代码。只在需要的地方使用清晰细节的伪代码。

关于java - 如何在 Java 中使用 JCheckBoxes 避免冗余编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7207037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com