能补充这段代码吗并实现以下要求1. (简答题) 形状家族应用: 结合配置文件shape.properties和多态性定义形状家族,至少包括三种形状。并结合JavaFx实现显示形状外观、计算的面积和周长,以及控制形状在界面的位置的变更。import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.scene.shape.Rectangle; import javafx.scene.shape.Polygon; import javafx.stage.Stage; import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; abstract class Shape { protected Color color; protected double area; protected double perimeter; protected double positionX; protected double positionY; public abstract void calculateArea(); public abstract void calculatePerimeter(); public abstract void draw(Pane pane); public void setPosition(double x, double y) { this.positionX = x; this.positionY = y; } } class CircleShape extends Shape { private double radius; public CircleShape(double radius) { this.radius = radius; this.color = Color.RED; } @Override public void calculateArea() { this.area = Math.PI * Math.pow(radius, 2); } @Override public void calculatePerimeter() { this.perimeter = 2 * Math.PI * radius; } @Override public void draw(Pane pane) { Circle circle = new Circle(radius); circle.setFill(color); circle.setLayoutX(positionX); circle.setLayoutY(positionY); pane.getChildren().add(circle); } } class RectangleShape extends Shape { private double width; private double height; public RectangleShape(double width, double height) { this.width = width; this.height = height; this.color = Color.BLUE; } @Override public void calculateArea() { this.area = width * height; } @Override public void calculatePerimeter() { this.perimeter = 2 * (width + height); } @Override public void draw(Pane pane) { Rectangle rectangle = new Rectangle(width, height); rectangle.setFill(color); rectangle.setLayoutX(positionX); rectangle.setLayoutY(positionY); pane.getChildren().add(rectangle); } } class TriangleShape extends Shape { private double[] points; public TriangleShape(double[] points) { this.points = points; this.color = Color.GREEN; } @Override public void calculateArea() { double x1 = points[0]; double y1 = points[1]; doubl

时间: 2023-12-06 09:41:15 浏览: 26
e x2 = points[2]; double y2 = points[3]; double x3 = points[4]; double y3 = points[5]; this.area = Math.abs((x1*(y2-y3)+x2*(y3-y1)+x3*(y1-y2))/2); } @Override public void calculatePerimeter() { double x1 = points[0]; double y1 = points[1]; double x2 = points[2]; double y2 = points[3]; double x3 = points[4]; double y3 = points[5]; double side1 = Math.sqrt(Math.pow(x2-x1, 2) + Math.pow(y2-y1, 2)); double side2 = Math.sqrt(Math.pow(x3-x2, 2) + Math.pow(y3-y2, 2)); double side3 = Math.sqrt(Math.pow(x1-x3, 2) + Math.pow(y1-y3, 2)); this.perimeter = side1 + side2 + side3; } @Override public void draw(Pane pane) { Polygon triangle = new Polygon(points); triangle.setFill(color); triangle.setLayoutX(positionX); triangle.setLayoutY(positionY); pane.getChildren().add(triangle); } } public class ShapeFamilyApp extends Application { private static Properties properties; static { properties = new Properties(); try { properties.load(new FileInputStream("shape.properties")); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) throws Exception { Pane pane = new Pane(); double width = Double.parseDouble(properties.getProperty("pane.width")); double height = Double.parseDouble(properties.getProperty("pane.height")); pane.setPrefSize(width, height); for (int i = 1; i <= 3; i++) { String type = properties.getProperty("shape" + i + ".type"); double x = Double.parseDouble(properties.getProperty("shape" + i + ".x")); double y = Double.parseDouble(properties.getProperty("shape" + i + ".y")); switch (type) { case "circle": double radius = Double.parseDouble(properties.getProperty("shape" + i + ".radius")); CircleShape circle = new CircleShape(radius); circle.setPosition(x, y); circle.calculateArea(); circle.calculatePerimeter(); circle.draw(pane); break; case "rectangle": double widthR = Double.parseDouble(properties.getProperty("shape" + i + ".width")); double heightR = Double.parseDouble(properties.getProperty("shape" + i + ".height")); RectangleShape rectangle = new RectangleShape(widthR, heightR); rectangle.setPosition(x, y); rectangle.calculateArea(); rectangle.calculatePerimeter(); rectangle.draw(pane); break; case "triangle": double[] points = new double[6]; for (int j = 0; j < 6; j++) { points[j] = Double.parseDouble(properties.getProperty("shape" + i + ".point" + (j+1))); } TriangleShape triangle = new TriangleShape(points); triangle.setPosition(x, y); triangle.calculateArea(); triangle.calculatePerimeter(); triangle.draw(pane); break; default: break; } } Scene scene = new Scene(pane); primaryStage.setScene(scene); primaryStage.show(); } } 要求: 1. 至少包括三种形状,这里我们定义了圆形、矩形和三角形三种形状。 2. 使用配置文件shape.properties来定义每个形状的属性,包括类型、位置和其他特定属性。在程序中,我们使用了Java的Properties类来读取配置文件中的属性。 3. 实现了抽象类Shape,并定义了每个形状的具体实现。每个形状都有自己的颜色、面积、周长和位置,并可以在JavaFX的Pane中绘制出来。 4. 在主类ShapeFamilyApp中,读取配置文件中的属性,根据类型创建对应的形状,并设置位置、计算面积和周长,最后在JavaFX的Pane中绘制出来。 5. 在JavaFX中,可以通过拖动形状来改变它们在界面中的位置。

相关推荐

最新推荐

recommend-type

数据结构简答题.docx

湖南地区的专升本数据结构,总结了可能会考的简答题,对专升本要考数据结构的朋友绝对有用,下载即可切身体会
recommend-type

网络攻防期末考试精选简答题.pdf

此文档为网络攻防-信息安全课程精选简答题。包含了网络攻防-信息安全方面的大多数基础理论知识,适合于要期末考试的计算机大学生群体,帮助学生快速找到网络攻防知识重点,助力拿高分!本PDF共13页,包含网络攻防...
recommend-type

机器学习简答题笔记.docx

该文档是我在准备《机器学习》(周志华版)研究生期末考试过程中所作的笔记,里面包含一些可能考的点,同时加上了一些在复习过程中对于不理解知识点的补充,根据自己的自身情况所作的笔记,可能不全,还望海涵!
recommend-type

spring笔试题选择和简答题和springboot+cloud选择题和简答题

spring笔试题选择和简答题和springboot+cloud选择题和简答题
recommend-type

2-springboot cloud 28题选择题和2简答题

2-springboot cloud 28题选择题和2简答题,word后附有答案,面试必需掌握的技能,你值得拥有!
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

SPDK_NVMF_DISCOVERY_NQN是什么 有什么作用

SPDK_NVMF_DISCOVERY_NQN 是 SPDK (Storage Performance Development Kit) 中用于查询 NVMf (Non-Volatile Memory express over Fabrics) 存储设备名称的协议。NVMf 是一种基于网络的存储协议,可用于连接远程非易失性内存存储器。 SPDK_NVMF_DISCOVERY_NQN 的作用是让存储应用程序能够通过 SPDK 查询 NVMf 存储设备的名称,以便能够访问这些存储设备。通过查询 NVMf 存储设备名称,存储应用程序可以获取必要的信息,例如存储设备的IP地址、端口号、名称等,以便能
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。