JavaFX - 颜色
-
简述
为了将颜色应用于应用程序,JavaFX 在包中提供了各种类 javafx.scene.paint包裹。该包包含一个名为 Paint 的抽象类,它是所有用于应用颜色的类的基类。使用这些类,您可以在以下模式中应用颜色 --
Uniform - 在此模式中,颜色在整个节点上均匀应用。
-
Image Pattern - 这让您可以用图像图案填充节点区域。
-
Gradient- 在此模式中,应用于节点的颜色从一个点到另一个点不同。它有两种梯度,即Linear Gradient 和 Radial Gradient.
您可以应用颜色的所有节点类,例如 Shape, Text (包括场景),有方法命名 setFill() 和 setStroke(). 这些将有助于分别设置节点及其笔划的颜色值。这些方法接受 Paint 类型的对象。因此,要创建这两种类型的图像中的任何一种,您都需要实例化这些类并将对象作为参数传递给这些方法。 -
-
将颜色应用到节点
要为节点设置统一的颜色模式,您需要将类颜色的对象传递给 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);
在上面的代码块中,我们使用颜色类的静态变量来创建颜色对象。同样,您还可以使用颜色的 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 ColorExample.java java ColorExample
执行时,上述程序会生成一个 JavaFX 窗口,如下所示 - -
将图像模式应用于节点
要将图像模式应用于节点,请实例化 ImagePattern 类并将其对象传递给 setFill(), setStroke() 方法。此类的构造函数接受六个参数,即 --
Image − 要创建图案所使用的图像对象。
-
x and y − 表示锚矩形原点 (x, y) 坐标的双变量。
-
height and 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 ImagePatternExample.java java ImagePatternExample
执行时,上述程序会生成一个 JavaFX 窗口,如下所示 - -
-
应用线性渐变图案
要将线性渐变图案应用于节点,请实例化 LinearGradient 类并将其对象传递给 setFill(), setStroke() 方法。此类的构造函数接受五个参数,即 --
startX, startY - 这些双重属性表示渐变起点的 x 和 y 坐标。
-
endX, endY - 这些双重属性表示渐变终点的 x 和 y 坐标。
-
cycleMethod - 此参数定义了应如何填充由起点和终点定义的颜色渐变边界之外的区域。
-
proportional- 这是一个布尔变量;将此属性设置为true,开始和结束位置按比例设置。
-
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);
例子
以下示例演示了如何将渐变模式应用于 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 LinearGradientExample.java java LinearGradientExample
执行时,上述程序会生成一个 JavaFX 窗口,如下所示 - -
-
应用径向渐变图案
要将径向渐变图案应用于节点,请实例化 GradientPattern 类并将其对象传递给 setFill(), setStroke() 方法。此类的构造函数接受一些参数,其中一些是 --
startX, startY - 这些双重属性表示渐变起点的 x 和 y 坐标。
-
endX, endY - 这些双重属性表示渐变终点的 x 和 y 坐标。
-
cycleMethod - 该参数定义了颜色渐变边界之外的区域如何由起点和终点定义以及它们应该如何填充。
-
proportional- 这是一个布尔变量;将此属性设置为true 开始和结束位置设置为一个比例。
-
Stops - 此参数定义沿渐变线的颜色停止点。
//Setting the radial gradient Stop[] stops = new Stop[] { new Stop(0.0, Color.WHITE), new Stop(0.3, Color.RED), new Stop(1.0, Color.DARKRED) }; RadialGradient radialGradient = new RadialGradient(0, 0, 300, 178, 60, false, CycleMethod.NO_CYCLE, stops);
例子
以下示例演示了如何将径向渐变模式应用于 JavaFX 中的节点。在这里,我们正在创建一个圆和一个文本节点,并将渐变图案应用于它们。将此代码保存在名称为的文件中 RadialGradientExample.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.RadialGradient; 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 RadialGradientExample 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 radial gradient Stop[] stops = new Stop[] { new Stop(0.0, Color.WHITE), new Stop(0.3, Color.RED), new Stop(1.0, Color.DARKRED) }; RadialGradient radialGradient = new RadialGradient(0, 0, 300, 178, 60, false, CycleMethod.NO_CYCLE, stops); //Setting the radial 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("Radial 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 RadialGradientExample.java java RadialGradientExample
执行时,上述程序会生成一个 JavaFX 窗口,如下所示 - -