簡體   English   中英

三元運算符,用於將數組中的網格顏色設置為特定顏色(多種條件)Java

[英]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);

無論您使用ifswitch ,三元運算符還是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM