ArrayList和Collection问题

时间:2013-04-24 19:14:15

标签: java button collections arraylist

我希望这是有道理的,并且有一种更为整洁的编程方式。

我有一个Buttons的ArrayList和一个Territories的集合,我试图弄清楚如何遍历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 个答案:

答案 0 :(得分:2)

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()));

答案 1 :(得分: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.

答案 2 :(得分: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);
    }

}

答案 3 :(得分: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()方法。