You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX如何基于4-9的用户输入每次仅显示对应边数的形状

JavaFX 单次仅展示一个对应边数图形的实现方案

你当前代码的问题是每次点击按钮都直接向根容器root中追加新的形状节点,没有删除上一次生成的旧形状,因此会出现多个形状叠加展示的问题,按照以下方案修改即可实现需求:

  • 首先单独定义一个专属容器用于存放图形,避免清空旧形状时误删输入框、按钮等其他交互控件
  • 每次触发按钮点击事件后,先清空专属容器内的所有旧节点,再将新生成的形状加入容器

具体修改步骤

1. 初始化专属图形容器

将以下代码添加到你的界面逻辑中,容器作为类的成员变量定义:

// 放在类内部、方法外部,作为成员变量
private Pane shapeContainer = new Pane();

// 界面初始化阶段,将输入框、提交按钮、图形容器依次加入根节点
// 假设你原本已经把text输入框、button按钮加入root,补充添加图形容器即可
root.getChildren().add(shapeContainer);

2. 修改按钮点击事件逻辑

button.setOnAction(e ->  {
    try {
        int num = Integer.parseInt(text.getText());
        // 先清空上一次生成的所有旧形状
        shapeContainer.getChildren().clear();

        if (num ==4) {
            Rectangle rect = new Rectangle();
            rect.setX(200);
            rect.setY(200);
            rect.setWidth(100);
            rect.setHeight(100);
            rect.setStroke(Color.BLACK);
            rect.setFill(num % 2 == 0 ? Color.YELLOW : Color.GREEN);
            shapeContainer.getChildren().add(rect);
        } else if (num == 5) {
            Polygon pentagon = new Polygon();
            pentagon.getPoints().addAll(new Double[] {200.0, 50.0,400.0, 50.0,450.0, 150.0,400.0, 250.0,200.0, 250.0 });
            pentagon.setStroke(Color.BLACK);
            pentagon.setFill(num % 2 == 0 ? Color.YELLOW : Color.GREEN);
            shapeContainer.getChildren().add(pentagon);
        } else if (num == 6) {
            Polygon hexagon = new Polygon();
            hexagon.getPoints().addAll(new Double[] {200.0, 50.0,400.0, 50.0,450.0, 150.0,400.0, 250.0,200.0, 250.0,150.0, 150.0 });
            hexagon.setStroke(Color.BLACK);
            hexagon.setFill(num % 2 == 0 ? Color.YELLOW : Color.GREEN);
            shapeContainer.getChildren().add(hexagon);
        } else if (num == 7) {
            Polygon heptagon = new Polygon();
            heptagon.getPoints().addAll(new Double[] {200.0, 50.0,400.0, 50.0,450.0, 150.0,400.0, 250.0,200.0, 250.0, 250.0,200.0,150.0, 150.0});
            heptagon.setStroke(Color.BLACK);
            heptagon.setFill(num % 2 == 0 ? Color.YELLOW : Color.GREEN);
            shapeContainer.getChildren().add(heptagon);
        } else if (num == 8) {
            Polygon octagon = new Polygon();
            octagon.getPoints().addAll(new Double[] {200.0, 50.0,400.0, 50.0,450.0, 150.0,400.0, 250.0,200.0, 250.0, 250.0,200.0, 150.0, 200.0, 200.0, 250.0});
            octagon.setStroke(Color.BLACK);
            octagon.setFill(num % 2 == 0 ? Color.YELLOW : Color.GREEN);
            shapeContainer.getChildren().add(octagon);
        } else if (num == 9) {
            // 补充九边形坐标逻辑即可支持9条边的图形
            Polygon nonagon = new Polygon();
            // 自行填写九边形的坐标点
            nonagon.setStroke(Color.BLACK);
            nonagon.setFill(Color.GREEN);
            shapeContainer.getChildren().add(nonagon);
        } else {
            Alert error = new Alert(Alert.AlertType.ERROR);
            error.setHeaderText("无效输入");
            error.setContentText("请输入4到9之间的整数");
            error.showAndWait();
        }
    } catch (NumberFormatException error) {
        Alert alert = new Alert(Alert.AlertType.ERROR);
        alert.setHeaderText("无效输入");
        alert.setContentText("请输入合法数字");
        alert.showAndWait();
    }
});

如果你的根节点root没有其他交互控件,也可以直接在添加新形状前调用root.getChildren().clear()清空所有节点,但该方式会把输入框、按钮也一并删除,因此更推荐使用专属容器的方案。

内容的提问来源于stack exchange,提问作者PlumChy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 21:45:03