【问题标题】:Set text to random color & opacity javaFX将文本设置为随机颜色和不透明度 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);

【问题讨论】:

    标签: java text javafx colors opacity


    【解决方案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 的不透明度。

      【讨论】:

      • 由于我通常使用标签而不是文本,这里有一个链接讨论何时使用其中一个:stackoverflow.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());
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 2011-12-22
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 2020-03-03
      相关资源
      最近更新 更多