2012-03-29 94 views
1

我已动态生成的元素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

+2

旁注:由于“BorderLayout”只能在每个区域包含一个或零个元素,因此只会在面板中添加1个复选框(最后一个)。因此,当您向NORTH添加元素时,您将删除先前添加的元素 – Robin 2012-03-29 10:51:51

回答

1

取整数和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); 
1

该变量名称只能在循环中访问,因此反正无用。你是否在你调用这段代码的类中考虑了成员变量?必要时可以使用JCheckBox数组。

+0

如何创建JCheckBoxes数组? – user1300459 2012-03-29 10:18:59

+1

尊重,这是基本的Java编码 - 它们可以声明为一个数组,就像声明一个* any *数据类型的数组。我可以推荐看一些教程吗?例如:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html – JTeagle 2012-03-29 10:24:42

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

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