0

これが理にかなっており、これをよりきちんとプログラミングする方法があることを願っています。

Buttons の ArrayList と Territories の Collection があります。ArrayList を反復処理し、ボタンの各ラベルを各 Territory に含まれる int 値に設定し、対応するボタンの背景色を変更する方法を見つけようとしています。その所有者に。

長い道のりは、各ボタンのラベルを設定し、if-else を使用して所有者を確認し、正しい背景色を設定しますが、これでは何百行ものコードが繰り返されることになります。

btnEgy.setLabel(Territory.EGYPT.units());
    if(Territory.EGYPT.getOwner().toString().equals("Player 1"))
    {
        btnEgy.setBackground(Color.BLUE);
    }
    else if(Territory.EGYPT.getOwner().toString().equals("Player 2"))
    {
        btnEgy.setBackground(Color.RED);
    }
    else if (Territory.EGYPT.getOwner().toString().equals("Player 3"))
    {
        btnEgy.setBackground(Color.GREEN);
    }
    else if (Territory.EGYPT.getOwner().toString().equals("Player 4"))
    {
        btnEgy.setBackground(Color.YELLOW);
    }
btnEus.setLabel(Territory.E_UNITEDSTATES.units());
    if(Territory.E_UNITEDSTATES.getOwner().toString().equals("Player 1"))
    {
        btnEus.setBackground(Color.BLUE);
    }
    else if(Territory.E_UNITEDSTATES.getOwner().toString().equals("Player 2"))
    {
        btnEus.setBackground(Color.RED);
    }
    else if (Territory.E_UNITEDSTATES.getOwner().toString().equals("Player 3"))
    {
        btnEus.setBackground(Color.GREEN);
    }
    else if (Territory.E_UNITEDSTATES.getOwner().toString().equals("Player 4"))
    {
        btnEus.setBackground(Color.YELLOW);
    }
4

4 に答える 4

3
HashMap<String, Color> playerMap = new HashMap<String, Color>();
playerMap.add("Player 1", Color.BLUE);
playerMap.add("Player 2", Color.RED);

それから

btnEgy.setBackground(playerMap.get(Territory.EGYPT.getOwner().toString()));
于 2013-04-24T19:18:03.410 に答える
0

Javaで関数を使用するのはどうですか?

メインコード

setValues(btnEgy,Territory.EGYPT);
setValues(btnEus,Territory.E_UNITEDSTATES);

機能コード

 public void setValues(Button btn,Territory t ){
    btn.setLabel(t.units());

    if(t.getOwner().toString().equals("Player 1"))
    {
       btn.setBackground(Color.BLUE);
    }
    else if(t.getOwner().toString().equals("Player 2"))
    {
       btn.setBackground(Color.RED);
    }
    else if (t.getOwner().toString().equals("Player 3"))
    {
        btn.setBackground(Color.GREEN);
    }
    else if (t.getOwner().toString().equals("Player 4"))
    {
       btn.setBackground(Color.YELLOW);
    }

}
于 2013-04-24T19:21:11.417 に答える
0

同じ数のボタンとテリトリーがあると仮定すると、

Iterator<Button> itr1 = buttons.iterator();
Iterator<Territory> itr2 = territories.iterator();
while(itr1.hasNext() && itr2.hasNext()) {
    Button button = itr1.next();
    Territory territory = itr2.next();
    // set button data to territory data
}

If the collection sizes don't match then you'll need to figure out if you want to terminate when you reach the end of the shorter collection, or if you want to keep looping through the shorter collection until you reach the end of the longer collection.
于 2013-04-24T19:17:38.217 に答える
0

ボタンのリストとテリトリーのリストが同じ長さで、ボタン[0]がテリトリー[0]などの場合...

final Iterator<Button> buttonI = buttons.iterator();
final Iterator<Territory> territoryI = territories.iterator();
while (territoryI.hasNext() && buttonI.hasNext()) {
    final Button button = buttonI.next();
    final Territory territory = territoryI.next();
    button.setBackground(territory.getOwner().getColor());
    button.setLabel(territory.units());
}

getColor()ここでは、 によって返されるクラスにメソッドを追加できると想定していますterritory.getOwner()

于 2013-04-24T19:27:33.097 に答える