Colors

When you draw a 2D shape in a JavaFX application, you might have observed that, by default, it is colored black. But, the color black is not always suitable for all types of applications a user creates. Hence, JavaFX allows you to change this default color into whichever color the user deems perfect for their application.

To apply colors to an application, JavaFX provides various classes in the package javafx.scene.paint package. This package contains an abstract class named Paint and it is the base class of all the classes that are used to apply colors.

Using these classes, you can apply colors in the following patterns −

  • Uniform − In this pattern, color is applied uniformly throughout node.
  • Image Pattern − This lets you to fill the region of the node with an image pattern.
  • Gradient − In this pattern, the color applied to the node varies from one point to the other. It has two kinds of gradients namely Linear Gradient and Radial Gradient.

All those node classes to which you can apply color such as Shape, Text (including Scene), have methods named setFill() and setStroke(). These will help to set the color values of the nodes and their strokes respectively.

These methods accept an object of type Paint. Therefore, to create either of these type of images, you need to instantiate these classes and pass the object as a parameter to these methods.

Applying Color to the Nodes

To set uniform color pattern to the nodes, you need to pass an object of the class color to the setFill()setStroke() methods as follows −

//Setting color to the text Color color =newColor.BEIGE 
text.setFill(color);//Setting color to the stroke Color color =newColor.DARKSLATEBLUE 
circle.setStroke(color);

In the above code block, we are using the static variables of the color class to create a color object.

In the same way, you can also use the RGB values or HSB standard of coloring or web hash codes of colors as shown below −

//creating color object by passing RGB values Color c =Color.rgb(0,0,255);//creating color object by passing HSB valuesColor 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

Following is an example which demonstrates, how to apply color to the nodes in JavaFX. Here, we are creating a circle and text nodes and applying colors to them.

Save this code in a file with the name ColorExample.java.

importjavafx.application.Application;importjavafx.scene.Group;importjavafx.scene.Scene;importjavafx.scene.paint.Color;importjavafx.stage.Stage;importjavafx.scene.shape.Circle;importjavafx.scene.text.Font;importjavafx.scene.text.Text;publicclassColorExampleextendsApplication{@Overridepublicvoidstart(Stage stage){//Drawing a Circle Circle circle =newCircle();//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 =newText("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 =newGroup(circle, text);//Creating a scene object Scene scene =newScene(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();}publicstaticvoidmain(String args[]){launch(args);}}

Compile and execute the saved java file from the command prompt using the following commands.

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

Output

On executing, the above program generates a JavaFX window as follows −

Color Example

Applying Image Pattern to the Nodes

To apply an image pattern to the nodes, instantiate the ImagePattern class and pass its object to the setFill()setStroke() methods.

The constructor of this class accepts six parameters namely −

  • Image − The object of the image using which you want to create the pattern.
  • x and y − Double variables representing the (x, y) coordinates of origin of the anchor rectangle.
  • height and width − Double variables representing the height and width of the image that is used to create a pattern.
  • isProportional − This is a Boolean Variable; on setting this property to true, the start and end locations are set to be proportional.
ImagePattern radialGradient =newImagePattern(dots,20,20,40,40,false);

Example

Following is an example which demonstrates how to apply image pattern to the nodes in JavaFX. Here, we are creating a circle and a text node and applying an image pattern to them.

Save this code in a file with name ImagePatternExample.java.

importjavafx.application.Application;importjavafx.scene.Group;importjavafx.scene.Scene;importjavafx.scene.image.Image;importjavafx.scene.paint.Color;importjavafx.scene.paint.ImagePattern;importjavafx.scene.paint.Stop;importjavafx.stage.Stage;importjavafx.scene.shape.Circle;importjavafx.scene.text.Font;importjavafx.scene.text.Text;publicclassImagePatternExampleextendsApplication{@Overridepublicvoidstart(Stage stage){//Drawing a Circle Circle circle =newCircle();//Setting the properties of the circle 
      circle.setCenterX(300.0f); 
      circle.setCenterY(180.0f); 
      circle.setRadius(90.0f);//Drawing a text Text text =newText("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 =newImage(link);ImagePattern radialGradient =newImagePattern(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 =newGroup(circle, text);//Creating a scene object Scene scene =newScene(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();}publicstaticvoidmain(String args[]){launch(args);}}

Compile and execute the saved java file from the command prompt using the following commands.

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

Output

On executing, the above program generates a JavaFX window as follows −

Image Pattern Example

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *