如何访问动态创建的元素(JAVA)?
我已动态生成的元素JCheckBox的:如何访问动态创建的元素(JAVA)?
for (j=0;j<j1;j++){
final JCheckBox cb = new JCheckBox("");
cb.setText(col_name);
mainPanel12.add(cb,BorderLayout.NORTH);
mainPanel12.repaint();
...
}
如何访问外循环某些特定的复选框,因为它们都具有相同的名称CB?
取整数和JCheckBox的一个HashMap中这样外面环路intance变量:
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);
该变量名称只能在循环中访问,因此反正无用。你是否在你调用这段代码的类中考虑了成员变量?必要时可以使用JCheckBox数组。
如何创建JCheckBoxes数组? – user1300459 2012-03-29 10:18:59
尊重,这是基本的Java编码 - 它们可以声明为一个数组,就像声明一个* any *数据类型的数组。我可以推荐看一些教程吗?例如:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html – JTeagle 2012-03-29 10:24:42
您必须从面板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 :-)
}
}
你可以为了你创建新的对象来记录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;
}
现在,您可以通过数组索引的元素指的复选框在循环之外。
旁注:由于“BorderLayout”只能在每个区域包含一个或零个元素,因此只会在面板中添加1个复选框(最后一个)。因此,当您向NORTH添加元素时,您将删除先前添加的元素 – Robin 2012-03-29 10:51:51