0

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

我有一个 ArrayList of Buttons 和一个 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

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

如果您有一个按钮列表和一个等长的区域列表,其中按钮 [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 回答
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

在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 回答