首页 > 编程语言 >JavaFX史上最全教程 - Shape - JavaFX路径

JavaFX史上最全教程 - Shape - JavaFX路径

时间:2024-11-15 18:45:41浏览次数:3  
标签:JavaFX 最全 javafx scene shape Shape new import stage

JavaFX有其他内置的形状,如

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

以下代码显示了如何创建路径。

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;

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();
    }
}

路径元素实际上从javafx.scene.shape.PathElement类扩展,它仅在Path对象的上下文中使用。

所以你不能实例化一个LineTo类放在场景图中。具有 To 作为后缀的类是路径元素,而不是Shape节点。

例如,MoveTo和LineTo对象实例是添加到Path对象的Path元素,而不是可以添加到场景的形状。

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

例子

  • 以下代码显示了如何向路径添加 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;

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);
  }
}

  • 使用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();
  }
}

  • 减去两个形状以创建路径
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);
    }
    
    @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();
    }
}

  • 使用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;

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);
    }
}

标签:JavaFX,最全,javafx,scene,shape,Shape,new,import,stage
From: https://blog.csdn.net/GaoshangD1209/article/details/143670452

相关文章

  • 【linux命令】史上最全Linux命令,结合用例通俗易懂(网络管理命令)
    前言:目前关于Linux命令的文章往往存在内容不全的问题,导致初学者和中级用户在使用过程中遇到困难。许多文章仅涵盖基础命令,而缺乏对系统管理、网络配置、包管理和脚本编写等重要主题的详细讲解。此外,实际操作中的常见问题及其解决方案也常常未被提及,使得用户在遇到困难时无法......
  • 【Xmanager 8软件下载与安装教程】(功能最全面的X服务器)
    1、安装包「Xmanager8」:链接:https://pan.quark.cn/s/4bc243c8df30提取码:1GUR2、安装教程(建议关闭杀毒软件与本地防护设置)1)       双击Xmanager-8.0.0055r.exe安装,弹窗安装对话框  2)       点击下一步  3)       选择‘我接受。。’,点......
  • 最全JAVA面试八股文,终于整理完了
    1、Java线程具有五中基本状态(1)新建状态(New):当线程对象对创建后,即进入了新建状态,如:Threadt=newMyThread();(2)就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是......
  • 2024 年 Java 面试最全攻略:程序员求职跳槽必刷题目 1000+,横扫一切技术盲点!
    写在前面马上又要到收割Offer的季节,你准备好了吗?曾经的我,横扫各个大厂的Offer。还是那句话:进大厂临时抱佛脚是肯定不行的,一定要注重平时的总结和积累,多思考,多积累,多总结,多复盘,将工作经历真正转化为自己的工作经验。面经分享今天给大家分享一个面试大厂的完整面经,小伙......
  • 【全网最全】2024年亚太赛数学建模C题论文分享(点赞收藏下,后续会更新)
     您的点赞收藏是我继续更新的最大动力!一定要点击文末的卡片,那是获取资料的入口!针对中国新能源汽车发展趋势的分析摘 要中国新能源电动汽车在近年来取得了快速发展,并成为中国的标志性产业之一。本文围绕新能源电动汽车的发展,提出了六个问题,并提供了对应的分析和数学建模......
  • IDEA最新最全设置教程(包括常用的插件)
    一、目的统一安装一些必要的插件,方便大家开发。统一代码格式、注释格式、统一字符集编码。新加入的同事可以快速适应和熟悉,不需要在讲解IDEA配置问题。二、IDEA要修改的设置     新项目设置和设置1.Java编译版本  这里请使用自己的JDK2.统一I......
  • 2024年末最新最全国内外15种项目管理工具推荐,超级建议产品经理收藏!
    以下是15款项目管理工具各参数特点详细表格,可以让大家更清晰一目了然的看到:工具名称功能特点适用场景优点禅道开源项目管理工具,支持需求、任务、bug跟踪、版本管理等功能。软件开发团队、敏捷开发团队免费开源,功能全面,适合国内团队,界面友好。Jira强大的敏捷项......
  • 最全面的输入法教程:后话
    最后,本文就来讲讲一些更加进阶的场景,以及一些感想。‍特殊场景如果你有输入生僻字的需求,可以看看这篇文章:【技术贴】快速输入生僻字-知乎此外除了输入汉字,学术方面还有时候得输入数学公式,此时就可以考虑用LaTex了,具体可以看我这篇文章:《Markdown与数学公式》。‍‍输......
  • 客户关系管理(CRM)是什么?CRM定义最全解读!
    有企业就有业务,有业务就有客户,所以客户关系管理(CRM)系统是企业管理中不可或缺的一部分,它帮助企业有效管理与客户之间的关系,提升客户满意度和忠诚度。本文将重点探讨CRM的概念和不同的定义,希望能够帮助大家全面了解CRM的各个方面,心急的小伙伴可以先看目录:CRM系统是什么?CRM系统的......
  • 2024年Java后端开发最全面试攻略,不管你工作几年,都得看看
    互联网公司的面试,从形式上说,一般分为2~3轮技术面+1轮HR面,不过某些公司没有HR面试。在技术面试中,面试官一般会就你所应聘的岗位进行相关知识的考察,也叫基础知识和业务逻辑面试,只要回答的不是特别差,面试官通常会继续跟你聊聊项目,这个时候就开始了项目面试。也就是说,技......