如何访问动态创建的元素(JAVA)?

时间:2012-03-29 10:11:43

标签: java swing

我动态创建了几个jCheckBox元素:

for (j=0;j<j1;j++){
   final JCheckBox cb = new JCheckBox("");
   cb.setText(col_name);
   mainPanel12.add(cb,BorderLayout.NORTH);
   mainPanel12.repaint();
...
}

如何访问循环外的某些特定复选框,因为它们都具有相同的名称 cb

4 个答案:

答案 0 :(得分:1)

该变量名只能在循环中访问,所以无论如何它都没用。您是否在您调用此代码的类中考虑了成员变量?如有必要,可以使用JCheckBoxes数组。

答案 1 :(得分:1)

您必须从面板mainPanel12中get the components并迭代该集合。您可以为组件设置名称,然后尝试搜索具有该名称的组件。

for (j=0;j<j1;j++){
   final JCheckBox cb = new JCheckBox("");
   cb.setText(col_name);
   cb.setName(String.toString(j);
   mainPanel12.add(cb,BorderLayout.NORTH);
   mainPanel12.repaint();
...
}

Component[] comps = mainPanel12.getComponents();
for (j=0;j<mainPanel12.size();j++){
   Component c = comps[i];
   if("1".equals(c.getName())) {
       // and here is your component :-)
   }
}

答案 2 :(得分:1)

将一个像Integer这样的HashMap和CheckBox一样外部循环作为实例变量:

Map<Integer,JCheckBox> map = new HashMap<Integer,JCheckBox>();
for (j=0;j<j1;j++){
   final JCheckBox cb = new JCheckBox("");
   cb.setText(col_name);
   mainPanel12.add(cb,BorderLayout.NORTH);
   mainPanel12.repaint();
   map.put(j,cb);
...
}

外部循环你可以像这样使用;

JCheckBox = map.get(index_value_of_checkbox);

for(int i = 0; i<map.size(); ++i)
JCheckBox cb = map.get(i);

答案 3 :(得分:0)

您可以在循环外部创建数据结构,以便在创建新对象时记录cb的每个值。最简单的方法是拥有一个包含所有复选框的某种容器(可能是一个数组或java.util.List):

JCheckBox[] cbs=new JCheckBox[j1];

for (j=0;j<j1;j++)   {
    final JCheckBox cb = new JCheckBox("");
    cb.setText(col_name);
    mainPanel12.add(cb,BorderLayout.NORTH);
    mainPanel12.repaint();

    ...

    cbs[j]=cb;
}

现在,您可以通过索引循环外部数组的元素来引用复选框。