[英]Ternary Operator for grid color in array to be a specific color (multiple conditions) Java
我正在構造一個GUI以使用GridLayout顯示地圖,並希望以不同的顏色顯示它。 截至目前,我已經擁有了,如果數組中的數字等於0,則該特定正方形的顏色將為黑色。 如果是其他任何數字,它將為灰色。 如您所見,這將是一個非常無聊的網格圖。 有沒有辦法采用這一行代碼,並確保每個數字都可以代表一種顏色? 例如,我想要0等於黑色,1等於灰色,2等於藍色,3等於紅色,4等於綠色,等等。這就是我現在所擁有的。
顏色顏色=數據[r] [c] == 0? Color.BLACK:顏色為灰色;
我知道我可以使用if語句根據數字確定將哪種顏色放到那里,但是我知道有一種方法可以使用三元運算符來實現。 有人知道嗎? 謝謝。
關於什么:
Map<Integer, Color> colors = new HashMap();
colors.put(0, Color.BLACK);
//...
function Color getColor(Integer i)
{
return colors.containsKey(i)? colors[i] : Color.gray;
}
可以幫到您嗎?
我們正在談論幾種顏色?
如果顏色數量適中,只需將它們放入地圖即可。
Map<Integer, Color> colorMap = Map.of(0, Color.BLACK, 1, Color.GRAY, 2, Color.BLUE, 3, Color.RED, 4, Color.GREEN); // Java >= 9
Color color = colorMap.getOrDefault(data[r][c], Color.gray):
聲明此數組:
Color[] colors = {
Color.BLACK, Color.WHITE, Color.LIGHT_GRAY, Color.GRAY,
Color.DARK_GRAY, Color.RED, Color.PINK, Color.ORANGE,
Color.YELLOW, Color.GREEN, Color.MAGENTA, Color.CYAN, Color.BLUE
};
該數組的值都是Color.java
中的所有Color
常量,您可以重新排列它們。
現在像這樣設置顏色:
Color color = colors(data[r][c] % colors.length);
對於data[r][c]
任何整數值,即> = 0。
您有一個int
數值。 並且您想要為此int
值獲取Color
。
您可以使用if
-statements:
if (value == 0) color = Color.RED;
if (value == 1) color = Color.GREEN;
if (value == 2) color = Color.BLUE;
您可以為此使用switch
語句:
switch (value) {
case 0: color = Color.RED; break;
case 1: color = Color.GREEN; break;
case 2: color = Color.BLUE; break;
}
您可以為此使用三元運算符:
color = (value==0?Color.RED:(value==1?Color.GREEN:value==3?Color.BLUE)));
(不要那樣做...)
您可以為此使用Map
:
Map<Integer, Color> colorMap = mapWith(
0, Color.RED,
1, Color.GREEN,
2, Color.BLUE);
...
Color color = colorMap.get(value):
但是請退后一步,看看您要完成的工作:您想將int
值放在某個地方,並獲得Color
。 所以寫一個函數
private static Color colorFor(int value) {
...
}
然后,在需要顏色的地方,只需寫
Color color = colorFor(value);
無論您使用if
, switch
,三元運算符還是Map
來實現colorFor
函數,都不再重要。 您可以輕松切換實現。
“高級”:
您還可以更進一步,並提取實際函數:當您要將int
轉換為Color
,這正是IntFunction
表示的。
乍一看,它看起來像是抽象的過大殺傷力。 但是我認為不是(否則我不會將其寫為答案)。
因此,您可以根據需要定義IntFunction
,並在GUI代碼中具有int
值並需要Color
,您只需
Color color = colorFunction.apply(value);
這樣的可能優點是您可以輕松地從外部切換配色方案,如下所示:
class YourGui {
// Initialize with some default
private IntFunction colorFunction = YourGui::colorFor;
// The function as described above
private static Color colorFor(int value) {
...
}
void setColorScheme(IntFunction colorFunction) {
this.colorFunction = colorFunction;
}
}
然后打電話
yourGui.setColorScheme(colorFunctionWith(CYAN, MAGENTA, YELLOW));
更改單元格的着色方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.