Javafx 简明教程

JavaFX - Linear Gradient Pattern

除了纯色,您还可以在 JavaFX 中显示颜色渐变。在颜色科学中,颜色渐变被定义为根据颜色的位置而进行的颜色进度。因此,颜色渐变也称为颜色坡度或颜色进度。

传统上,颜色渐变包含按顺序或线性排列的颜色。但是,在线性渐变模式中,颜色沿一个方向流动。即使要着色的形状不是线性形状,如圆或椭圆,颜色仍然会沿一个方向排列。

在本章中,让我们学习如何在二维形状上应用线性渐变模式。

Applying Linear Gradient Pattern

要在节点上应用线性渐变模式,实例化 LinearGradient 类并将其对象传递给 setFill(), setStroke() 方法。

此类的构造函数接受五个参数,即:

  1. startX, startY - 这些双重属性表示渐变的起始点的 x 和 y 坐标。

  2. endX, endY - 这些双重属性表示渐变的结束点的 x 和 y 坐标。

  3. cycleMethod - 此参数定义了由起始点和结束点定义的颜色渐变边界外部的区域应如何填充。

  4. proportional - 这是一个布尔变量;将此属性设置为 true 时,起始和结束位置将按比例设置。

  5. Stops - 此参数定义了沿渐变线上的颜色停点。

//Setting the linear gradient
Stop[] stops = new Stop[] {
   new Stop(0, Color.DARKSLATEBLUE),
   new Stop(1, Color.DARKRED)
};
LinearGradient linearGradient =
   new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);

Example 1

以下是一个示例,演示如何在 JavaFX 中的节点上应用渐变模式。在此,我们创建一个圆形和一个文本节点,并向其应用线性渐变模式。

将此代码保存在名为 LinearGradientExample.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;

import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;

import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;

public class LinearGradientExample extends Application {
   @Override
   public void start(Stage stage) {
      //Drawing a Circle
      Circle circle = new Circle();

      //Setting the properties of the circle
      circle.setCenterX(300.0f);
      circle.setCenterY(180.0f);
      circle.setRadius(90.0f);

      //Drawing a text
      Text text = new Text("This is a colored circle");

      //Setting the font of the text
      text.setFont(Font.font("Edwardian Script ITC", 55));

      //Setting the position of the text
      text.setX(140);
      text.setY(50);

      //Setting the linear gradient
      Stop[] stops = new Stop[] {
         new Stop(0, Color.DARKSLATEBLUE),
         new Stop(1, Color.DARKRED)
      };
      LinearGradient linearGradient =
         new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);

      //Setting the linear gradient to the circle and text
      circle.setFill(linearGradient);
      text.setFill(linearGradient);

      //Creating a Group object
      Group root = new Group(circle, text);

      //Creating a scene object
      Scene scene = new Scene(root, 600, 300);

      //Setting title to the Stage
      stage.setTitle("Linear Gradient Example");

      //Adding scene to the stage
      stage.setScene(scene);

      //Displaying the contents of the stage
      stage.show();
   }
   public static void main(String args[]){
      launch(args);
   }
}

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls LinearGradientExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls LinearGradientExample

执行后,以上程序将生成一个 JavaFX 窗口,如下所示 −

linear gradient

Example 2

除了圆形外,您还可以在其他闭合形状(如多边形)上应用这种类型的渐变。在此,我们创建一个三角形并使用特定的线性渐变模式进行着色。

将此代码保存在名为 TriangleLinearGradient.java 的文件中。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;

import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;

import javafx.stage.Stage;
import javafx.scene.shape.Polygon;

public class TriangleLinearGradient extends Application {
   @Override
   public void start(Stage stage) {
      Polygon triangle = new Polygon();

      triangle.getPoints().addAll(new Double[]{
         100.0, 50.0,
         170.0, 150.0,
         100.0, 250.0,
      });


      Stop[] stops = new Stop[] {
         new Stop(0, Color.ORANGE),
         new Stop(1, Color.YELLOW)
      };
      LinearGradient linearGradient =
         new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);


      triangle.setFill(linearGradient);

      Group root = new Group(triangle);

      Scene scene = new Scene(root, 300, 300);

      stage.setTitle("Linear Gradient Example");

      stage.setScene(scene);

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

使用以下命令,从命令提示符编译并执行已保存的 java 文件。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls TriangleLinearGradient.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls TriangleLinearGradient

执行后,以上程序将生成一个 JavaFX 窗口,如下所示 −

triangle linear gradient