将文本设置为随机颜色和不透明度 javaFX
Posted
技术标签:
【中文标题】将文本设置为随机颜色和不透明度 javaFX【英文标题】:Set text to random color & opacity javaFX 【发布时间】:2016-06-13 10:05:51 【问题描述】:我需要一个 javafx 程序来将文本设置为随机颜色和不透明度我不知道该怎么做?这是我的代码示例
Text text1 = new Text();
text1.setText("Java");
text1.setFont(Font.font("Times New Roman", FontWeight.BOLD, FontPosture.ITALIC, 22));
text1.setRotate(90);
gridpane.add(text1, 3, 1);
【问题讨论】:
【参考方案1】:像这样:
Text randomColorText(String txt)
Text t = new Text(txt);
Random rng = new Random();
int c = rng.nextInt();
int r = c & 255;
int g = (c >>> 8) & 255;
int b = (c >>> 16) & 255;
double op = (c >>> 24) / 255.0;
t.setFill(Color.rgb(r, g, b, op));
// or use only r,g,b above and set opacity of the Text shape: t.setOpacity(op);
return t;
请注意,另一个提到 Random 永远不会返回 double == 1.0 的答案表示您不会获得全部颜色是错误的。颜色 RGB 值的范围与双精度值不同 - 通常它们最终会在某个点以 0-255 范围内的 8 位值结束,在某些高端应用程序中,您可能会使用每通道 16 位。您将使用 Random 中的双打获得全部颜色。
您会注意到,对于通常由 32 位值表示的内容,我避免多次调用随机数生成器。 (微优化:调用 nextInt 完成了 nextDouble 一半的工作,我们只需要调用一次。我通常会将 Random 的实例保存为静态变量,而不是每次调用该方法时都创建一个。java.util。随机是三个安全的。)
【讨论】:
【参考方案2】:你可以使用Math.random()
在[0,1)
范围内生成一个Double
,所以你需要这样做:
text.
setOpacity
(Math.random());
在文档中对颜色进行了更多挖掘,但可以通过以下方式完成:
text.
setFill
(
Color.color
(Math.random(), Math.random(), Math.random());
setFill
来自Shape
,Text
继承自。 setFill
采用Paint
,Color
是其最简单的实现。 Color.color(double, double, double)
在 [0,1] 范围内采用双精度值的 rgb 值。
了解如何浏览文档,您将能够在未来快速找到这些内容!
注意:不透明度/rgb 颜色都取范围 [0,1] 的两倍,其中 Math.random()
在范围 [0,1) 中产生。如果你不熟悉这个符号,这意味着Math.random()
永远不会产生 1,只会产生一个小于 1 的数字,可能的精度。这意味着您永远不会使用这种方法获得 100% 完全不透明/r/g/b,但实际上您可能无法区分,因此最好使用不太复杂的方法。
注意 2:javafx.scene.paint.Color#color
实际上提供了一个包含不透明度的四参数构造函数,但我建议像上面一样设置 Text 节点本身的不透明度,而不是 Paint 的不透明度。
【讨论】:
由于我通常使用标签而不是文本,这里有一个链接讨论何时使用其中一个:***.com/questions/24374867/… 感谢提示不透明度有效,但颜色仍然给我一个不合适的构造函数错误。我之前尝试过 math.random 但不知道你需要它 3 次 这是我阅读文档时的错误。构造函数采用 (double r, double g, double b, double alpha)。我现在已将答案更改为使用Color.color
,它有一个RGB 选项。您需要三个随机数,因为该方法需要三个值。
太棒了,谢谢,我回家后应该现在可以尝试一下
仍然不会运行 text.setFill(Color.color(Math.random(), Math.random(), Math.random());以上是关于将文本设置为随机颜色和不透明度 javaFX的主要内容,如果未能解决你的问题,请参考以下文章