0% found this document useful (0 votes)
152 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
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
152 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
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