2010-11-24 3 views
1

私はこのことを一貫して言葉にするのに少し苦労しているので、例を使用してメッセージを得ることを願っています。複数のアイテムを変更する方法はありますか? [説明するのは難しい、内部の例]

例えば、ゲームのオセロ(Reversi)を考えてみましょう。私はゲームの背後にあるロジックをプログラムすることができます。つまり、各ターンの後にどの色の色を変えるかを決定できます。

私がJFrame上に64枚のパネルを持っていて、それぞれがオセロボード上の位置を表しているとします。ターンが終了したら、パネル5と6の色を変更する必要があると判断します。

私ができることを望むのは、配列を介して5と6を渡すことです。言い換えれば、配列を実行するforループがあります。

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

そして、このように、だけをチェックし、2で変更を行い、この例では、私が必要な場所が変更されました。かなりの時間をコードを書くことなく保存する。

私は現在、しなければならないことは、私は私がこれが正常に私が尋ねるしようとしていたものを越えました願っています

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

を言って、64のif-else文を持つforループループのため、内部に持っています。もしそうでなければ、私は明確にするのが嬉しいです。 abhin4vの答えのベースに

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

Swingコンポーネントを使用していますか? – evilReiko

+0

はい私はそうです。 NetBeans GUIエディタを使って全体をデザインしています。 – Ryan

答えて

1

はどのようにして64サブパネルを格納していますか?既存のコードは、0から63(または1から64)から番号などのパネルを参照するなら、あなたは1次元配列に格納でき、その後、あなたのコードのyouldがあること:

ImagePanel[] othelloPanels; 

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

私はそれらを保存することを考えているだろう2次元(8×8)の配列がより理にかなっていますが、おそらくそれは私だけです。

+0

うわー...私は数字と文字列から配列を作るのに慣れてきたので、配列を作ることができるのは忘れてしまった。 :(ありがとう! – Ryan

0

配列を作成する必要はありません。

0

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

あなたのインデックスがあなたの境界内にあることを確認するためにforループの中でいくつかの追加チェックを入れて、これについてどのように

0

これらのパネルは簡単に対処することができるように、マップにあなたのパネルを置く:あなたはアドレッシング一次元を使用する場合は整数キーがマップにパネルのアドレスである

Map<Integer, PanelClass> panelsMap; 

を。あなたの方法を変更したパネルを定義した場合には、整数の配列や反復処理可能を返す必要があり、その後、次の操作を行います

for(Integer coord : getPanelIdsToChange()) { 
    panelsMap.get(coord).doWhatYouWant(); 
} 
関連する問題