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

时间:2013-12-17 19:51:26

标签: java string swing object

我正在用java编写一个swing应用程序,我有10个jPanel,每个都有10个jCheckBox。 jPanel的名称是jPanel1,jPanel2等; jPanel1中jCheckBox的名称是jCheckBox1_1,jCheckBox1_2,jCheckBox1_3等,其他jPanels的名称相似。片刻之后,我需要知道用户已经检查了哪些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;

继续其余

我应该这样做因为我在jFrame中使用jCheckBoxes(用于查看它们是否被检查),而不是在jPanel中。问题是我必须写很多重复的代码,我认为这不是智能的。所以我想知道我是否可以“恢复”这些对象并使用它们的String名称来使用它们。例如:

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

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

1 个答案:

答案 0 :(得分:2)

两种解决方案:

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