Path Objects

In the previous 2D shapes chapters, we have seen how to draw some simple predefined shapes by instantiating classes and setting respective parameters.

But, just these predefined shapes are not sufficient to build more complex shapes other than the primitives provided by the javafx.shape package.

For example, if you want to draw a graphical element as shown in the following diagram, you cannot rely on those simple shapes. Even if you succeed constructing it using the Line shapes, the program becomes way to complex and inefficient.

Path Class

To make this efficient, JavaFX introduced a concept called Path where a multiple edges that join a sequence of vertices together.

The Path Class

To draw such complex structures JavaFX provides a class named Path. This class represents the geometrical outline of a shape.

It is attached to an observable list which holds various Path Elements such as moveTo, LineTo, HlineTo, VlineTo, ArcTo, QuadCurveTo, CubicCurveTo.

On instantiating, this class constructs a path based on the given path elements.

You can pass the path elements to this class while instantiating it as follows−

Path myshape =newPath(pathElement1, pathElement2, pathElement3);

Or, you can get the observable list and add all the path elements using addAll() method as follows −

Path myshape =newPath(); 
myshape.getElements().addAll(pathElement1, pathElement2, pathElement3);

You can also add elements individually using the add() method as −

Path myshape =newPath(); 
myshape.getElements().add(pathElement1);

The Move to Path Element

The Path Element MoveTo is used to move the current position of the path to a specified point. It is generally used to set the starting point of a shape drawn using the path elements.

It is represented by a class named LineTo of the package javafx.scene.shape. It has 2 properties of the double datatype namely −

  • X − The x coordinate of the point to which a line is to be drawn from the current position.
  • Y − The y coordinate of the point to which a line is to be drawn from the current position.

You can create a move to path element by instantiating the MoveTo class and passing the x, y coordinates of the new point as follows −

MoveTo moveTo =newMoveTo(x, y);

If you don’t pass any values to the constructor, then the new point will be set to (0,0).

You can also set values to the x, y coordinate, using their respective setter methods as follows −

setX(value);setY(value);

Example – Drawing a Complex Path

In this example, we will show how to draw the following shape using the Path, MoveTo and Line classes.

Complex Path

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

importjavafx.application.Application;importjavafx.scene.Group;importjavafx.scene.Scene;importjavafx.stage.Stage;importjavafx.scene.shape.LineTo;importjavafx.scene.shape.MoveTo;importjavafx.scene.shape.Path;publicclassComplexShapeextendsApplication{@Overridepublicvoidstart(Stage stage){//Creating a Path Path path =newPath();//Moving to the starting point MoveTo moveTo =newMoveTo(108,71);//Creating 1st line LineTo line1 =newLineTo(321,161);//Creating 2nd line LineTo line2 =newLineTo(126,232);//Creating 3rd line LineTo line3 =newLineTo(232,52);//Creating 4th line LineTo line4 =newLineTo(269,250);//Creating 4th line LineTo line5 =newLineTo(108,71);//Adding all the elements to the path 
      path.getElements().add(moveTo); 
      path.getElements().addAll(line1, line2, line3, line4, line5);//Creating a Group object  Group root =newGroup(path);//Creating a scene object Scene scene =newScene(root,600,300);//Setting title to the Stage 
      stage.setTitle("Drawing an arc through a path");//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 ComplexShape.java 
java --module-path %PATH_TO_FX%--add-modules javafx.controls ComplexShape

Output

On executing, the above program generates a JavaFX window displaying the following output −

Drawing Arc through Path

Following are the various path elements (classes) provided by JavaFX. These classes exist in the package javafx.shape. All these classes inherit the class PathElement.

S.NoShape & Description
1LineToThe path element line is used to draw a straight line to a point in the specified coordinates from the current position. It is represented by a class named LineTo. This class belongs to the package javafx.scene.shape.
2HlineToThe path element HLineTo is used to draw a horizontal line to a point in the specified coordinates from the current position. It is represented by a class named HLineTo. This class belongs to the package javafx.scene.shape.
3VLineToThe path element vertical line is used to draw a vertical line to a point in the specified coordinates from the current position. It is represented by a class named VLineTo. This class belongs to the package javafx.scene.shape.
4QuadCurveToThe path element quadratic curve is used to draw a quadratic curve to a point in the specified coordinates from the current position. It is represented by a class named QuadraticCurveTo. This class belongs to the package javafx.scene.shape.
5CubicCurveToThe path element cubic curve is used to draw a cubic curve to a point in the specified coordinates from the current position. It is represented by a class named CubicCurveTo. This class belongs to the package javafx.scene.shape.
6ArcToThe path element Arc is used to draw an arc to a point in the specified coordinates from the current position. It is represented by a class named ArcTo. This class belongs to the package javafx.scene.shape.

Comments

Leave a Reply

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