我需要一个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);
答案 0 :(得分:7)
您可以使用Math.random()
生成[0,1]范围内的Double,因此您需要执行以下操作:
文本setOpacity(的Math.random());
Color通过文档进行了更多挖掘,但可以通过以下方式完成:
text。setFill(Color.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。)