Как получить доступ к динамически созданному элементу (JAVA)? - PullRequest
1 голос
/ 29 марта 2012

Я динамически создал несколько элементов 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 ]

1 голос
/ 29 марта 2012

Вы должны получить компоненты из панели mainPanel12 и выполнить итерацию по коллекции.Вы можете установить имя для вашего компонента, а затем попытаться найти компонент с этим именем.

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 :-)
   }
}
1 голос
/ 29 марта 2012

Возьмите один HashMap из Integer и jCheckBox, как это снаружи, для цикла в качестве переменной 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 голос
/ 29 марта 2012

Это имя переменной доступно только внутри цикла, так что в любом случае оно будет бесполезным. Рассматривали ли вы переменные-члены в классе, в котором вы называете этот кусок кода? Массив JCheckBoxes, если необходимо.

0 голосов
/ 29 марта 2012

Вы можете создать структуру данных вне цикла, чтобы записывать каждое значение 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;
}

Теперь вы можете ссылаться на флажки, индексируя элементы массива вне цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...