数组中的网格颜色为特定颜色的三元运算符(多个条件)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 : Color.gray;
我知道我可以只使用 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);
对于任何大于等于 0 的 data[r][c]
整数值。
您有一个 int
值。并且您想为此 int
值获取 Color
。
您可以为此使用if
语句:
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
函数,都不再重要。您可以轻松切换实现。
"Advanced":
你还可以更进一步,提取出实际的功能:当你想把一个int
转换成一个Color
时,这正是用[=37表示的=].
乍一看,它可能看起来像是一种抽象矫枉过正。但我认为不是(否则我不会写它作为答案)。
所以您可以根据需要定义 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));
更改单元格着色方案。
我正在构建一个 GUI 以使用 GridLayout 显示地图,并希望以不同的颜色显示它。截至目前,我已经知道,如果数组中的数字等于 0,则该特定方块的颜色将为黑色。如果是任何其他数字,它将是灰色的。如您所见,这将是一张非常无聊的网格地图。有没有办法采用这行代码并使每个数字都代表一种颜色?例如,我想0等于黑色,1等于灰色,2等于蓝色,3等于红色,4等于绿色等等。这就是我现在的。
颜色颜色=数据[r][c] == 0 ? Color.BLACK : Color.gray;
我知道我可以只使用 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);
对于任何大于等于 0 的 data[r][c]
整数值。
您有一个 int
值。并且您想为此 int
值获取 Color
。
您可以为此使用if
语句:
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
函数,都不再重要。您可以轻松切换实现。
"Advanced":
你还可以更进一步,提取出实际的功能:当你想把一个int
转换成一个Color
时,这正是用[=37表示的=].
乍一看,它可能看起来像是一种抽象矫枉过正。但我认为不是(否则我不会写它作为答案)。
所以您可以根据需要定义 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));
更改单元格着色方案。