0% found this document useful (0 votes)
189 views

JavaFX Tutorial - JavaFX Path

The document discusses using JavaFX Path objects to draw shapes. It provides 4 examples showing how to use different PathElement subclasses like MoveTo, LineTo, QuadCurveTo and CubicCurveTo to generate lines, curves and complex shapes by adding elements to a Path object. It also demonstrates subtracting one shape from another to create a Path and using VLineTo to draw a vertical line.

Uploaded by

Javier Guzman
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
189 views

JavaFX Tutorial - JavaFX Path

The document discusses using JavaFX Path objects to draw shapes. It provides 4 examples showing how to use different PathElement subclasses like MoveTo, LineTo, QuadCurveTo and CubicCurveTo to generate lines, curves and complex shapes by adding elements to a Path object. It also demonstrates subtracting one shape from another to create a Path and using VLineTo to draw a vertical line.

Uploaded by

Javier Guzman
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 9

JavaFX has other built-in shapes, such as

Arc
Circle
CubicCurve
Ellipse
Line
Path
Polygon
Polyline
QuadCurve
Rectangle
SVGPath
Text

The following code shows how to create a Path.

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.CheckBox;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;
//from w w w . j a v a 2 s. c o m
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage stage) {
Scene scene = new Scene(new Group());
stage.setTitle("Checkbox Sample");
stage.setWidth(230);
stage.setHeight(120);

Path path = new Path();


path.getElements().add(new MoveTo(0.0f, 50.0f));
path.getElements().add(new LineTo(100.0f, 100.0f));

VBox vbox = new VBox();


vbox.getChildren().addAll(path);
vbox.setSpacing(5);

HBox root = new HBox();


root.getChildren().add(vbox);
root.setSpacing(40);
root.setPadding(new Insets(20, 10, 10, 20));

((Group) scene.getRoot()).getChildren().add(root);

stage.setScene(scene);
stage.show();
}
}

Path elements actually extend from the javafx.scene.shape.PathElement class,


which is used only in the context of a Path object.
So you won't be able to instantiate a LineTo class to be put in the scene graph.
The classes with To as a suffix are path elements, not Shape nodes.
For example, the MoveTo and LineTo object instances are Path elements
added to a Path object, not shapes that can be added to the scene.
The code above generates the following result.
Example
The following code shows how to add QuadCurveTo to a Path.

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.QuadCurveTo;
import javafx.stage.Stage;
//from w w w .j a va2s .co m
public class Main extends Application {
@Override
public void start(Stage stage) {
Group root = new Group();
Scene scene = new Scene(root, 300, 150);
stage.setScene(scene);
stage.setTitle("");

Path path = new Path();

MoveTo moveTo = new MoveTo();


moveTo.setX(0.0f);
moveTo.setY(50.0f);
QuadCurveTo quadTo = new QuadCurveTo();
quadTo.setControlX(25.0f);
quadTo.setControlY(0.0f);
quadTo.setX(50.0f);
quadTo.setY(50.0f);

path.getElements().add(moveTo);
path.getElements().add(quadTo);

root.getChildren().add(path);

scene.setRoot(root);
stage.show();
}

public static void main(String[] args) {


launch(args);
}
}

The code above generates the following result.

Example 2
Using Path, MoveTo and CubicCurveTo to create curve

/*w w w . j a va 2 s.c o m*/


import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.shape.CubicCurveTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.stage.Stage;

public class Main extends Application {


public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage stage) {
stage.setTitle("ComboBoxSample");
Scene scene = new Scene(new Group(), 450, 250);

Path path = new Path();

MoveTo moveTo = new MoveTo();


moveTo.setX(0.0f);
moveTo.setY(0.0f);

CubicCurveTo cubicTo = new CubicCurveTo();


cubicTo.setControlX1(0.0f);
cubicTo.setControlY1(0.0f);
cubicTo.setControlX2(100.0f);
cubicTo.setControlY2(100.0f);
cubicTo.setX(100.0f);
cubicTo.setY(50.0f);
path.getElements().add(moveTo);
path.getElements().add(cubicTo);

Group root = (Group) scene.getRoot();


root.getChildren().add(path);
stage.setScene(scene);
stage.show();
}
}

The code above generates the following result.

Example 3
Subtract two shapes to create a Path

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.DropShadow;
import javafx.scene.effect.DropShadowBuilder;
import javafx.scene.paint.Color;
import javafx.scene.shape.*;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);//from w w w . ja v a 2 s. co m
}

@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Shapes");
Group root = new Group();
Scene scene = new Scene(root, 300, 300, Color.WHITE);

Ellipse bigCircle = EllipseBuilder.create()


.centerX(100)
.centerY(100)
.radiusX(50)
.radiusY(75/2)
.strokeWidth(3)
.stroke(Color.BLACK)
.fill(Color.WHITE)
.build();

Ellipse smallCircle = EllipseBuilder.create()


.centerX(100)
.centerY(100)
.radiusX(35/2)
.radiusY(25/2)

.build();

Shape shape = Path.subtract(bigCircle, smallCircle);


shape.setStrokeWidth(1);
shape.setStroke(Color.BLACK);

shape.setFill(Color.rgb(255, 200, 0));

root.getChildren().add(shape);
primaryStage.setScene(scene);
primaryStage.show();
}
}

The code above generates the following result.

Example 4
Using VLineTo to create vertical line

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.VLineTo;
import javafx.stage.Stage;
/* ww w. j a va2s. co m*/
public class Main extends Application {

@Override
public void start(final Stage stage) {
stage.setTitle("HTML");
stage.setWidth(500);
stage.setHeight(500);
Scene scene = new Scene(new Group());

VBox root = new VBox();

Path path = new Path();


path.getElements().add(new MoveTo(50.0f, 0.0f));
path.getElements().add(new VLineTo(50.0f));

root.getChildren().addAll(path);
scene.setRoot(root);

stage.setScene(scene);
stage.show();
}

public static void main(String[] args) {


launch(args);
}
}

The code above generates the following result.

You might also like