将文本设置为随机颜色&不透明度javaFX

时间:2016-03-01 05:25:24

标签: java text javafx colors opacity

我需要一个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);

2 个答案:

答案 0 :(得分:7)

您可以使用Math.random()生成[0,1]范围内的Double,因此您需要执行以下操作:

文本setOpacity(的Math.random());

Color通过文档进行了更多挖掘,但可以通过以下方式完成:

text。setFillColor.color(Math.random(),Math.random(),Math.random());

SetFill来自Shape,Text继承自。 SetFill采用Paint,Color是最简单的实现。 Color.color(double,double,double)将rgb值与[0,1]范围内的双精度值相乘。

了解如何浏览文档,以及您将来能够快速找到这些类型的内容!

注意:不透明度/ rgb颜色都采用范围[0,1]的双精度,其中Math.random()在[0,1]范围内产生。如果你不熟悉这种表示法,这意味着Math.random()将永远不会产生1,只有一个小于1的数字可能的准确度。这意味着使用这种方法永远不会有100%完全不透明/ r / g / b,但实际上你可能无法区分,所以使用不那么复杂的方法会更好。< / p>

注2:javafx.scene.paint.Color#color实际上提供了包含不透明度的四参数构造函数,但我建议将Text节点本身的不透明度设置为上面而不是Paint的不透明度。

答案 1 :(得分:0)

像这样:

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 值的范围与 double 不同 - 通常它们最终会在某个时间点为 0-255 范围内的 8 位值,在某些高端应用程序中,您可能会使用每个通道 16 位。您将使用 Random 中的双打获得全方位的颜色。

您会注意到,对于通常由 32 位值表示的内容,我避免多次调用随机数生成器。 (微优化:调用 nextInt 做了 nextDouble 的一半工作,我们只需要调用一次。我通常会将 Random 的实例保存为静态变量,而不是每次调用该方法时都创建一个。java.util。随机是三个adsafe。)