将文本设置为随机颜色和不透明度 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 来自ShapeText 继承自。 setFill 采用PaintColor 是其最简单的实现。 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的主要内容,如果未能解决你的问题,请参考以下文章

javafx如何设置文本框TextArea背景色为透明

具有透明背景的 JavaFX 按钮

最新谷歌浏览器中的变换样式:preserve-3d 和不透明度

Android 设置背景透明度

CSS不透明度背景颜色和文本不起作用[重复]

Javafx listview设置背景颜色