我动态创建了几个jCheckBox元素:
for (j=0;j<j1;j++){
final JCheckBox cb = new JCheckBox("");
cb.setText(col_name);
mainPanel12.add(cb,BorderLayout.NORTH);
mainPanel12.repaint();
...
}
如何访问循环外的某些特定复选框,因为它们都具有相同的名称 cb ?
答案 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;
}
现在,您可以通过索引循环外部数组的元素来引用复选框。