Javafx 简明教程

JavaFX - Colors

在 JavaFX 应用程序中绘制 2D 形状时,您可能已经注意到,它默认为黑色。但黑色并不总是适用于用户创建的所有类型的应用程序。因此,JavaFX 允许您将此默认颜色更改为用户认为最适合其应用程序的任何颜色。

要向应用程序应用颜色,JavaFX 提供了 javafx.scene.paint 包中的各种类。该包包含一个名为 Paint 的抽象类,它是用于应用颜色的所有类的基类。

使用这些类,您可以按照以下模式应用颜色 −

  1. Uniform − 在此模式中,颜色在整个节点中均匀应用。

  2. Image Pattern − 这允许您使用图像模式填充节点区域。

  3. Gradient − 在此模式中,应用于节点的颜色从一点变到另一不同点。它有两种类型的渐变,即 Linear GradientRadial Gradient

您可以向其应用颜色的所有那些节点类,例如 Shape, Text (包括场景),都具有名为 setFill()setStroke() 的方法。这些将分别有助于设置节点的颜色值及其笔触。

这些方法接受 Paint 类型的对象。因此,要创建这些类型的图像之一,您需要实例化这些类并将对象作为参数传递给这些方法。

Applying Color to the Nodes

要向节点设置统一的颜色模式,您需要将 color 类的静态变量传递给 setFill()setStroke() 方法,如下所示 −

//Setting color to the text
Color color = new Color.BEIGE
text.setFill(color);

//Setting color to the stroke
Color color = new Color.DARKSLATEBLUE
circle.setStroke(color);

在上述代码块中,我们使用 color 类 的静态变量来创建一个颜色对象。

同样,您还可以使用 RGB 值或 HSB 标准的着色或颜色网页哈希代码,如下所示 −

//creating color object by passing RGB values
Color c = Color.rgb(0,0,255);

//creating color object by passing HSB values
Color c = Color.hsb(270,1.0,1.0);

//creating color object by passing the hash code for web
Color c = Color.web("0x0000FF",1.0);

Example

下面是一个示例,演示如何将颜色应用于 JavaFX 中的节点。这里,我们正在创建圆形和文本节点,并向其应用颜色。

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

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;

public class ColorExample 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);

      //Setting color to the circle
      circle.setFill(Color.DARKRED);

      //Setting the stroke width
      circle.setStrokeWidth(3);

      //Setting color to the stroke
      circle.setStroke(Color.DARKSLATEBLUE);

      //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", 50));

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

      //Setting color to the text
      text.setFill(Color.BEIGE);
      text.setStrokeWidth(2);
      text.setStroke(Color.DARKSLATEBLUE);

      //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("Color 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 ColorExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls ColorExample

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

color example

Applying Image Pattern to the Nodes

要对节点应用图像模式,请实例化 ImagePattern 类,并将它的对象传递给 setFill()setStroke() 方法。

该类的构造函数接受六个参数,即 −

  1. Image - 用于创建模式的图像对象。

  2. x and y - 表示锚定矩形原点 (x, y) 坐标的双变量。

  3. height and width - 表示用于创建模式的图像的高度和宽度的双变量。

  4. isProportional - 这是一个布尔变量;将此属性设置为 true 时,开始结束位置会被设置为比例。

ImagePattern radialGradient = new ImagePattern(dots, 20, 20, 40, 40, false);

Example

下面是一个示例,演示如何将图像模式应用于 JavaFX 中的节点。这里,我们正在创建圆形和文本节点,并向其应用图像模式。

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

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

import javafx.scene.paint.Color;
import javafx.scene.paint.ImagePattern;
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 ImagePatternExample 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", 50));

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

      //Setting the image pattern
      String link = "https://encrypted-tbn1.gstatic.com"
         + "/images?q=tbn:ANd9GcRQub4GvEezKMsiIf67U"
         + "rOxSzQuQ9zl5ysnjRn87VOC8tAdgmAJjcwZ2qM";

      Image image = new Image(link);
      ImagePattern radialGradient = new ImagePattern(image, 20, 20, 40, 40, false);

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

      //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("Image pattern 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 ImagePatternExample.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls ImagePatternExample

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

image pattern example