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

在java中如何通过字符串名使用实例化对象?,java,string,swing,object,Java,String,Swing,Object,我正在用java编写一个swing应用程序,我有10个jPanel,每个jPanel中有10个jCheckBox。JPanel的名称为jPanel1、jPanel2等;jPanel1中jCheckBox的名称是jCheckBox1_1、jCheckBox1_2、jCheckBox1_3等,其他jpanel的名称类似。过一会儿,我需要知道哪些jcheckbox已经被用户检查过,所以我这样做了 boolean[] selected=new boolean[100]; for(int

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

    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;
boolean[]selected=new boolean[100];
对于(int i=0;i两种解决方案:

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

对象没有名称。字段、局部变量、方法参数都有名称,但不能全部访问。此外,您不能在Java中动态创建变量名称。@SotiriosDelimanolis,除非您使用反射。@Howard您指的是我的注释的哪一部分?@SotiriosDelimanolis字段和方法可以通过eir名称。@SotiriosDelimanolis我的意思是我可以创建jcheckbox作为数组并将它们添加到jPanel中,但我不想这样做,因为swing设计会非常复杂。那么,有没有办法仅通过字符串名称引用对象?这意味着无法通过字符串名称使用对象?我的想法是做更多简化代码,我认为您的第一个解决方案将编写更多重复代码。第二个解决方案类似,我的意思是有必要编写大量重复代码。无论如何,这两个解决方案都不应使用重复代码来实现。您将使用循环来设置ActionListener并遍历复选框数组。我理解,但问题是我不能引用我原来的jcheckbox,因为它们不是数组(jcheckBox1_1,jcheckBox1_2,等等),所以如果有任何方法只通过字符串中的名称引用对象,我可以引用它们,因为在字符串数组中我可以通过编程获得对象的名称(jcheckbox).有什么办法吗?如果你的解决方案真的有效,但我不明白,你介意给我一个示例代码吗?
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;
}