JavaFX有其他内置的形状,如:
- Arc
- Circle
- CubicCurve
- Ellipse
- Line
- Path
- Polygon
- Polyline
- QuadCurve
- Rectangle
- SVGPath
- Text
以下代码显示了如何创建路径(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
// @ w w w .Y I I b A i. CO 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
元素实际上从javafx.scene.shape.PathElement
类扩展,它仅在Path
对象的上下文中使用。
所以不能实例化一个LineTo
类放在场景图中。使用To
作为后缀的类是Path
元素,而不是Shape
节点。
例如,MoveTo
和LineTo
对象实例可添加到Path
对象的Path
元素中,而不可以添加到场景的形状。
示例-1
以下代码显示了如何将QuadCurveTo
添加到路径。
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
// at w w W .Y I ib AI.c OM
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)
}
}
上面的代码生成以下结果。
实例-2
使用Path
,MoveTo
和CubicCurveTo
创建曲线 -
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()
}
}
上面的代码生成以下结果。
实例-3
减去两个形状以创建路径,如下代码 -
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.y Ii b A I .c O 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()
}
}
上面的代码生成以下结果。
实例-4
使用VLineTo
创建垂直线,如下代码所示 -
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
// by Ww W.Y I IB A i .C o 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)
}
}
上面的代码生成以下结果。