Javafx 简明教程
JavaFX - Colors
在 JavaFX 应用程序中绘制 2D 形状时,您可能已经注意到,它默认为黑色。但黑色并不总是适用于用户创建的所有类型的应用程序。因此,JavaFX 允许您将此默认颜色更改为用户认为最适合其应用程序的任何颜色。
要向应用程序应用颜色,JavaFX 提供了 javafx.scene.paint 包中的各种类。该包包含一个名为 Paint 的抽象类,它是用于应用颜色的所有类的基类。
使用这些类,您可以按照以下模式应用颜色 −
-
Uniform − 在此模式中,颜色在整个节点中均匀应用。
-
Image Pattern − 这允许您使用图像模式填充节点区域。
-
Gradient − 在此模式中,应用于节点的颜色从一点变到另一不同点。它有两种类型的渐变,即 Linear Gradient 和 Radial 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 窗口,如下所示 −
Applying Image Pattern to the Nodes
要对节点应用图像模式,请实例化 ImagePattern 类,并将它的对象传递给 setFill() 、 setStroke() 方法。
该类的构造函数接受六个参数,即 −
-
Image - 用于创建模式的图像对象。
-
x and y - 表示锚定矩形原点 (x, y) 坐标的双变量。
-
height and width - 表示用于创建模式的图像的高度和宽度的双变量。
-
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 窗口,如下所示 −