当前位置: 首页 > 知识库问答 >
问题:

JafaFX径向梯度

禹正阳
2023-03-14

我想用JavaFX重现以下屏幕,并尝试了以下(剥离)代码:

public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception{
        primaryStage.setTitle("Hello World");
        primaryStage.setFullScreen(true);
        primaryStage.setFullScreenExitHint("");

        AnchorPane root = new AnchorPane();
        root.setStyle("-fx-background-color: " +
                "rgb(15,37,74), " +
                "radial-gradient(center 50% 50%, radius 65%, rgb(97,156,188) 10%, rgb(22,51,93));");
        Scene scene = new Scene(root, 600, 400);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

但是,我在复制原始图片时遇到以下问题:

  • 我不能生成圆形渐变,因为AnchorPane是一个矩形,渐变是椭圆形的。据我所知留档一个圆形渐变是不可能的?
  • 原始图片的渐变不是线性的而是有一些圆圈(中间是一个明亮的圆圈,外面是一个中等的圆圈)。我试着玩,并添加百分比停止颜色,但当我这样做(例如。rgb(97,156,188) 30%,rgb(22,51,93))我得到了一个更明亮的椭圆可视化,我不明白。渐变的开始总是应该更亮,我不知道为什么:

谁能解释一下这里发生了什么事?

共有1个答案

公西培
2023-03-14

从要复制的屏幕截图下载(800x600像素)图像,并使用颜色选择器,我得到以下(十进制r、g、b)值,从中心(400300)到左边缘(0300):

  • (400300)(104163193)

这看起来足够接近线性(可能有一些模糊性和jpeg压缩会改变一些值)。

所以这似乎是一个很好的近似:

    root.setStyle("-fx-background-color: radial-gradient(center 50% 50%, radius 50%, rgb(104, 163, 193) 0%, rgb(23, 56, 99) 100%);");

我看不出用百分比来做循环的方法:你必须用实际长度。如果尺寸可能会改变,那么你当然需要对此作出回应;您可以通过绑定执行此操作,如下所示:

    root.styleProperty().bind(Bindings.createStringBinding(() -> 
        String.format("-fx-background-color: radial-gradient(center %dpx %dpx, radius %dpx, rgb(104, 163, 193) 0%%, rgb(23, 56, 99) 100%%);",
                (int) (root.getWidth()/2), (int) (root.getHeight()/2), (int)(Math.max(root.getWidth(), root.getHeight())/2)), 
                root.widthProperty(), root.heightProperty()));

请注意,这不是一种高性能的方法;内联样式通常是将CSS应用于节点的最慢的方式,在这里,您将在节点维度的每一个小更改上更改内联样式。然而,它似乎在我的系统上工作得很好;请注意,将渐变应用于同一视图中的多个节点可能不是一个好方法。

 类似资料:
  • 所以,我试图创建一个径向渐变(用于游戏中的静态照明)。我想到了这个: 但我得到的结果是: 我想得到一个更平滑的梯度,比如: 我试着玩步法和强度,但是我不能得到类似上面梯度的东西。做这件事的好方法是什么??提前感谢!

  • 我需要给一个减去的圆添加一个圆形径向梯度。我一直在尝试,但我不能得到一个圆形渐变。 1:整圆2:整圆中的径向梯度3:减去圆4:减去圆中的圆形径向梯度试验(不是我想要的)5:减去圆中的圆形径向梯度。这就是我想要获得的。 一旦我得到减去的圆(3),我应用径向梯度,但我得到(4)而不是(5)。 我也尝试过改变x和y的值,但是我没有得到我想要的。

  • 我是新来的CSS渐变,并试图抓住它,我试图应用一个白色透明的css渐变包围一个圆形div的边界与背景图像。不幸的是,我得到的效果不是我想要的效果,我怎么能让它让图像看起来不那么被梯度遮挡,梯度也不像它那么宽,我想让它只影响图像的边界,比如也许外环大约30像素深。 我的代码:

  • 在分级文档(第8.3节)中定义了java插件类路径。 在Gradle中,依赖项被分组为配置。配置只是一组命名的依赖项。我们将它们称为依赖项配置。您可以使用它们来声明项目的外部依赖项。正如我们稍后将看到的,它们也用于声明项目的发布。 它是否与我们定义为<code>导出类路径=……

  • 方向导数 定义:若二元函数$$z=f(x,y)$$在点$$P(x_0,y_0)$$处沿着$$\vec{l}$$(方向角为$$\alpha$$,$$\beta$$)存在下列极限 $$ \dfrac{\partial f}{\partial l}=\lim\limits_{\rho\to 0}\dfrac{f(x+\Delta x, y+\Delta y)-f(x,y)}{\rho} $$ $$ =f

  • 天梯(tianti) Java 轻量级的 CMS 解决方案-天梯。天梯是一个用 Java 相关技术搭建的后台 CMS 解决方案,用户可以结合自身业务进行相应扩展,同时提供了针对 dao、service 等的代码生成工具。技术选型:Spring Data JPA、Hibernate、Shiro、 Spring MVC、Layer、MySQL 等。 简介: 1、天梯是一款使用Java编写的免费的轻量级