java - 如何在java中通过字符串名称使用实例化对象?

标签 java string swing object

我正在用java编写一个swing应用程序,我有10个jPanel,每个jPanel有10个jCheckBox。 jPanel 的名称为 jPanel1、jPanel2 等; jPanel1 中 jCheckBox 的名称为 jCheckBox1_1、jCheckBox1_2、jCheckBox1_3 等,其他 jPanel 也类似。一会儿我需要知道用户检查了哪些 jcheckboxes,所以我这样做

    boolean[] selected=new boolean[100];

    for(int i=0; i<selected.length; i++)
        selected[i]=false;

    if(jPanel1.jCheckBox1_1.isSelected())
        selected[0]=true;
    if(jPanel1.jCheckBox1_2.isSelected())
        selected[1]=true;
    if(jPanel1.jCheckBox1_3.isSelected())
        selected[2]=true;

然后继续剩下的

我应该这样做,因为我在 jFrame 中使用 jCheckBox(用于查看它们是否被选中),而不是在 jPanel 中。问题是我必须编写大量重复的代码,我认为这并不智能。所以我想知道是否可以“恢复”这些对象并通过它们的字符串名称使用它们。例如:

String[] name=new String[100];
JCheckBox[] checkbox=new JCheckBox[name.length];
for(int i=0; i<100; i++){
    int num_panel=i/10+1;
    name[i]="jPanel"+num_panel+".jCheckBox"+num_panel+"_"+(i%10+1);
}
//and now use those names to ask if those jcheckBoxes are checked
boolean[] selected=new boolean[100];
for(int i=0; i<100; i++){
if(name[i].isSelected()) //but this isn't right because its a String, not a jCheckBox
    selected[i]=true;
else
    selected[i]=false;
}

所以我想知道您是否知道如何通过字符串名称使用这些 jCheckBox。我知道我可以以编程方式将它们创建为数组,一切都会更容易,但另一个问题是,因为它是一个 swing gui,所以很难以编程方式设计它们。提前致谢。

最佳答案

两种解决方案:

  • 第一个选项,将actionListeners附加到每个复选框,以在发生时向应用程序的控件报告该框已被选中。 (或未选中)。
  • 第二个选项,修改您使用复选框数组的尝试,并直接使用该数组来引用复选框,而不是第二个字符串数组。

关于java - 如何在java中通过字符串名称使用实例化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20643385/

相关文章:

java - 输出等于空

java - 更改字符串以匹配 char 数组

java - 使用ObjectMapper转换为Json时,如何将POJO的String变量转换为Integer?

javascript - 将图像添加到字符串中?将文字翻译成图像

java - Spring MVC - jsp 不渲染

java - Swing 更新谜题

Java 重新着色 JProgressBar 一根像素线

java - Java正则表达式

Java反编译器

Java 8 -> 根据其他列表对列表进行排序