javafx绘制圆_JavaFX中线一些概念描述

8805de47e5b3c507d7e0b20963e0123c.png

为了在JavaFX场景上渲染图形,我们需要基本的形状和颜色。

Node 类是所有JavaFX场景图形节点的基本基类。它提供了转换,翻译和应用效果到任何节点的能力。

javafx.scene.shape.Shape 类是 Node 类的后代。

所有较旧的JavaFX 2.x Builder类在JavaFX 8中已弃用。

JavaFX线

当在JavaFX场景图形上绘制时,使用屏幕坐标空间(系统)渲染线。

屏幕坐标系将(0,0)放在左上角。

x坐标沿x轴移动点。从上到下移动点时,y坐标值增加。

下图显示了右侧的屏幕坐标系。

16d78fa16ce92db2402393acec7ca0f2.png

在JavaFX中,场景图形对象(如线,圆和矩形)是Shape类的派生类。

所有形状对象可以在两个成形区域之间执行几何操作,例如减法,相交和并集。

要在JavaFX中绘制线条,我们将使用 javafx.scene.shape.Line 类。

要创建一个 Line 对象,我们需要指定一个开始(x,y)坐标和结束坐标。

创建线节点时,有两种方法来设置起点和终点。

第一种方法使用具有参数startX,startY,endX和endY的构造函数所有参数的数据类型为 double 。

以下代码使用构造函数创建具有起点(100,10)和终点(10,110)的线。

Line line = new Line(100, 10, 10, 110);

创建行节点的第二种方法是使用空构造函数来实例化 Line 类,然后使用setter方法设置每个属性。

以下代码显示如何创建线对象和使用setter方法设置行的起点和终点。

Line line = new Line(); line.setStartX(100); line.setStartY(10); line.setEndX(10); line.setEndY(110);

在场景图上绘制的线节点默认为1.0的笔触宽度和黑色的笔触颜色。

所有形状的笔触颜色都为null,这意味着除了Line,Polyline和Path节点之外没有颜色。

要创建不同种类的线,我们可以设置属性继承自父类 javafx.scene.shape.Shape 的属性。

下表显示了我们可以在一行上设置的属性。

要检索或修改每个属性,您将使用其适当的getter和setter方法。

属性数据类型 / 说明filljavafx.scene.paint.Paint

用于填充形状内的颜色。smoothBoolean

True表示打开反锯齿,false表示关闭反锯齿。strokeDashOffsetDouble

将距离设置为虚线图案。strokeLineCapjavafx.scene.shape.StrokeLineCap

在线或路径的末尾设置帽样式。有三种样式:

  • StrokeLineCap.BUTT
  • StrokeLineCap.ROUND
  • StrokeLineCap.SQUARE

strokeLineJoinjavafx.scene.shape.StrokeLineJoin

当线相遇时设置装饰。有三种类型:

  • StrokeLineJoin.MITER
  • StrokeLineJoin.BEVEL
  • StrokeLineJoin.ROUND

strokeMiterLimitDouble

设置斜角接缝的限制以及斜角接缝装饰StrokeLineJoin.MITER。strokejavafx.scene.paint.Paint

设置形状的笔划线的颜色。strokeTypejavafx.scene.shape.StrokeType

设置在Shape节点的边界周围绘制描边的位置。有三种类型:

  • StrokeType.CENTERED
  • StrokeType.INSIDE
  • StrokeType.OUTSIDE

strokeWidthDouble

设置线的宽度。

例子

以下代码创建一个Line对象,并使用setter方法设置开始和结束坐标。

import javafx.application.Application;import javafx.scene.Scene;import javafx.scene.layout.VBox;import javafx.scene.shape.Line;import javafx.stage.Stage;public class Main extends Application { @Override public void start(Stage stage) { VBox box = new VBox(); final Scene scene = new Scene(box,300, 250); scene.setFill(null);  Line line = new Line(); line.setStartX(0.0f); line.setStartY(0.0f); line.setEndX(100.0f); line.setEndY(100.0f);  box.getChildren().add(line);  stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); }}

上面的代码生成以下结果。

f79dbf6febdd630bfedb53b5828a8483.png

例2

以下代码设置更多的线属性,包括笔触颜色,笔触宽度和线帽。

之后,它还设置了线的破折号样式。

import javafx.application.Application;import javafx.scene.Group;import javafx.scene.Scene;import javafx.scene.paint.Color;import javafx.scene.shape.Line;import javafx.scene.shape.StrokeLineCap;import javafx.stage.Stage;public class Main extends Application { @Override public void start(Stage primaryStage) { primaryStage.setTitle("Drawing Lines"); Group root = new Group(); Scene scene = new Scene(root, 300, 150, Color.GRAY); Line redLine = new Line(10, 10, 200, 10); redLine.setStroke(Color.RED); redLine.setStrokeWidth(10); redLine.setStrokeLineCap(StrokeLineCap.BUTT); redLine.getStrokeDashArray().addAll(15d, 5d, 15d, 15d, 20d); redLine.setStrokeDashOffset(10); root.getChildren().add(redLine); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); }}

上面的代码生成以下结果。

3c303a89cb70a4be8127f84c470fbc91.png
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 JavaFX 中的 Canvas 类来实现鼠标拖拽绘制形的功能。具体步骤如下: 1. 创建 Canvas 对象,并设置其宽度和高度。 2. 为 Canvas 对象添加鼠标事件监听器,监听鼠标按下、拖拽和释放事件。 3. 在鼠标按下事件处理方法中,记录下当前鼠标的坐标。 4. 在鼠标拖拽事件处理方法中,计算出的半径和心坐标,并使用 GraphicsContext 对象绘制形。 5. 在鼠标释放事件处理方法中,清除 Canvas 上的形。 下面是一个简单的示例代码,可以在 JavaFX 应用程序中运行: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.stage.Stage; public class DrawCircle extends Application { private double startX, startY; private Canvas canvas; @Override public void start(Stage primaryStage) { // 创建 Canvas 对象 canvas = new Canvas(400, 400); // 添加鼠标事件监听器 canvas.setOnMousePressed(e -> { startX = e.getX(); startY = e.getY(); }); canvas.setOnMouseDragged(e -> { double radius = Math.sqrt(Math.pow(e.getX() - startX, 2) + Math.pow(e.getY() - startY, 2)); double centerX = (e.getX() + startX) / 2; double centerY = (e.getY() + startY) / 2; // 绘制形 GraphicsContext gc = canvas.getGraphicsContext2D(); gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight()); gc.setFill(Color.BLUE); gc.setStroke(Color.BLACK); gc.setLineWidth(1); gc.fillOval(centerX - radius, centerY - radius, 2 * radius, 2 * radius); gc.strokeOval(centerX - radius, centerY - radius, 2 * radius, 2 * radius); }); canvas.setOnMouseReleased(e -> { // 清除形 GraphicsContext gc = canvas.getGraphicsContext2D(); gc.clearRect(0, 0, canvas.getWidth(), canvas.getHeight()); }); // 创建场景并显示 StackPane root = new StackPane(canvas); Scene scene = new Scene(root, 400, 400); primaryStage.setScene(scene); primaryStage.setTitle("Draw Circle"); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 在这个示例中,当用户按下鼠标并拖拽时,程序会根据鼠标的位置计算出形的半径和心坐标,并使用 GraphicsContext 对象绘制形。当用户释放鼠标时,程序会清除 Canvas 上的形。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值