使用内部类在JavaFX中绘制三角形的技术实现问题
修复你的JavaFX内部类三角形生成代码
嘿,我看了你这段尝试用内部类生成三角形并在JavaFX中显示的代码,发现几个可以优化和补全的点,咱们来一步步修正:
原代码的问题点
- 你定义的
InnerClass已经继承了Polygon,但又额外声明了一个Polygon triangle成员变量,这完全没必要——直接使用this(也就是当前InnerClass实例本身)就可以操作多边形的点了。 - 代码没写完,底边左顶点的坐标没有补充完整,而且等边三角形的高计算可以更简洁直观。
修正后的完整代码
import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene.shape.Polygon; import javafx.stage.Stage; public class OuterClass extends Application { // 内部类直接继承Polygon,无需额外定义Polygon变量 public class InnerClass extends Polygon { InnerClass(double x, double y, double side) { // 计算等边三角形的高:(√3/2)*边长 double height = (Math.sqrt(3) / 2) * side; // 三个顶点坐标:以(x,y)为中心 double topX = x; double topY = y - height / 2; double rightX = x + side / 2; double rightY = y + height / 2; double leftX = x - side / 2; double leftY = y + height / 2; // 直接给当前Polygon实例添加顶点 getPoints().addAll( topX, topY, rightX, rightY, leftX, leftY ); // 设置样式方便查看 setFill(Color.LIGHTBLUE); setStroke(Color.BLACK); setStrokeWidth(2); } } @Override public void start(Stage primaryStage) { Pane root = new Pane(); // 创建内部类实例:中心在(300,200),边长200 InnerClass triangle = new InnerClass(300, 200, 200); root.getChildren().add(triangle); Scene scene = new Scene(root, 600, 400); primaryStage.setTitle("JavaFX Triangle from Inner Class"); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } }
关键说明
- 移除冗余变量:因为
InnerClass本身就是Polygon的子类,直接调用getPoints()添加顶点即可,不需要再实例化另一个Polygon对象。 - 简化高的计算:把原代码的复杂计算简化为直接计算等边三角形的高,逻辑更清晰。
- 补全启动逻辑:添加了完整的JavaFX窗口启动代码,确保修改后的代码可以直接运行看到效果。
内容的提问来源于stack exchange,提问作者TABindenter
相关产品推荐
相关产品推荐

