JavaFX - 颜色



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

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

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

  • **均匀** - 在此模式下,颜色在整个节点中统一应用。

  • **图像图案** - 这允许您使用图像图案填充节点的区域。

  • **渐变** - 在此模式下,应用于节点的颜色从一个点到另一个点变化。它有两种渐变,即 **线性渐变** 和 **径向渐变**。

所有可以应用颜色的节点类,例如 **Shape、Text**(包括 Scene),都具有名为 **setFill()** 和 **setStroke()** 的方法。这些将分别帮助设置节点及其描边的颜色值。

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

将颜色应用于节点

要将均匀颜色图案设置为节点,您需要将 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 颜色标准或颜色的 Web 哈希代码,如下所示:

//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);

示例

以下是一个示例,演示如何在 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

将图像图案应用于节点

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

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

  • **Image** - 您要用来创建图案的图像对象。

  • **x 和 y** - 表示锚定矩形原点 (x, y) 坐标的双精度变量。

  • **height 和 width** - 表示用于创建图案的图像的高度和宽度的双精度变量。

  • **isProportional** - 这是一个布尔变量;将此属性设置为 true 时,起始位置和结束位置将设置为成比例。

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

示例

以下是一个示例,演示如何在 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
广告