2010-11-24 4 views
1

Я немного борюсь с тем, как это можно выразить словами, поэтому я просто использую пример и надеюсь, что он получит сообщение.Есть ли способ изменить несколько элементов? [Трудно описать, пример внутри]

Возьмите игру, например, Othello (Reversi). Я могу программировать логику игры, то есть я могу определить, какие фигуры должны изменить цвета после каждого поворота.

Предположим, у меня есть 64 панели на JFrame, каждый из которых представляет собой позицию на борту Отелло. После окончания поворота я определяю, что панели 5 и 6 должны менять цвета.

Что бы я хотел сделать, это передать 5 и 6 через массив, допустим, и иметь цикл for, который проходит через массив.

for(int i=0; i < array.length; i++){ 
    change the image at array[i] 
} 

И, таким образом, проверяйте и вносите изменения в 2, в этом примере, места, которые мне нужно изменить. Сохранение довольно много времени написание кода.

То, что я в настоящее время сделать, это для цикла и внутри для цикла у меня есть 64, если-иначе заявления, говоря:

if(panel == 5){ 
    change the image at 5 
} 
etc. 

Я надеюсь, что это успешно перебрались, что я пытался спросить , Если нет, я был бы более чем счастлив прояснить.

+0

Вы используете компоненты Swing? – evilReiko 2010-11-24 13:05:10

+0

Да, я. И я использую редактор GUI NetBeans для разработки всего. – Ryan 2010-11-25 04:47:35

ответ

1

Как вы хранения 64 суб-панелей? Если ваш существующий код относится к панелям, как числа от 0-63 (или 1 - 64), то вы можете хранить их в одномерный массив, а затем быть ваш код yould:

ImagePanel[] othelloPanels; 

void changeImages(int[] indicies) { 
    for (int i=0;i<indicies.length;i++) { 
     othelloPanels[indicies[i]].change(); 
    } 
} 

я бы подумал, что их хранения поскольку два массива dimensonal (8 на 8) имеют больше смысла, но, возможно, это только я.

0

Как об этом:

void changeImages(Image[] images, Set<Integer> positionsToChange) { 
    for (int i=0; i < array.length; i++){ 
     if (positionsToChange.contains(i)) { 
      // change the image at array[i] 
     } 
    } 
} 
0

На основании ответа abhin4v в:

void changeImages(Image[] images, Set<Integer> positionsToChange) { 
    for (Integer index : positionsToChange) { 
     // change the image at images[index] 
    } 
} 

вы можете поставить некоторые дополнительные проверки в цикле for, чтобы быть уверенным, что ваш индекс находится в пределах вашего массив, но это необязательно, если вы правильно сформируете Set.

0

Положите панели в карту таким образом, что эти панели могут быть легко решить:

Map<Integer, PanelClass> panelsMap; 

Где ключ Integer является адрес панели в карте, если вы используете один-мерной адресацию. Когда ваш метод определяет, какие панели для изменения он должен возвращать массив или Iterable из Integer, то сделайте следующее:

for(Integer coord : getPanelIdsToChange()) { 
    panelsMap.get(coord).doWhatYouWant(); 
}