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

JavaFX PieChart已存在数据更新需求:点击添加按钮合并重复项

JavaFX PieChart 合并同名项数值解决方案

要实现点击添加按钮时合并同名项的数值,只需修改btnAdd()方法的逻辑:先检查现有数据中是否存在同名项,存在则累加数值,不存在再新增项。同时建议加上输入校验,避免非数字输入导致程序崩溃。

修改后的完整代码如下:

package charts;

import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.chart.PieChart;
import javafx.scene.control.TextField;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;


public class PieChartController implements Initializable {
    
    @FXML
    private TextField name, value;
    @FXML
    private PieChart pieChart;
    
    private ObservableList<PieChart.Data> data;
    
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        data = FXCollections.observableArrayList();
        pieChart.setData(data);
    }
    
    @FXML
    private void btnAdd() {
        String itemName = name.getText().trim();
        String valueStr = value.getText().trim();
        
        // 输入校验:名称和数值不能为空,且数值必须是正整数
        if (itemName.isEmpty() || valueStr.isEmpty()) {
            showAlert("输入错误", "名称和数值不能为空");
            return;
        }
        
        int addValue;
        try {
            addValue = Integer.parseInt(valueStr);
            if (addValue <= 0) {
                showAlert("输入错误", "数值必须大于0");
                return;
            }
        } catch (NumberFormatException e) {
            showAlert("输入错误", "请输入有效的整数数值");
            return;
        }
        
        // 查找是否存在同名项
        boolean found = false;
        for (PieChart.Data item : data) {
            if (item.getName().equals(itemName)) {
                // 累加数值,PieChart.Data的pieValue是可观察属性,修改后图表自动刷新
                item.setPieValue(item.getPieValue() + addValue);
                found = true;
                break;
            }
        }
        
        // 未找到同名项则新增
        if (!found) {
            data.add(new PieChart.Data(itemName, addValue));
        }
        
        // 清空输入框,优化操作体验
        name.clear();
        value.clear();
    }
    
    // 弹窗提示辅助方法
    private void showAlert(String title, String message) {
        Alert alert = new Alert(AlertType.WARNING);
        alert.setTitle(title);
        alert.setHeaderText(null);
        alert.setContentText(message);
        alert.showAndWait();
    }
}

关键逻辑说明:

  • 输入校验:先过滤空输入,再校验数值格式,避免非法输入导致程序异常
  • 同名项匹配:遍历现有数据列表,通过getName()匹配项名称
  • 自动刷新图表:PieChart.Data的pieValue是可观察属性,调用setPieValue()更新后图表会自动同步,无需重复调用pieChart.setData(data)
  • 用户体验优化:操作完成后清空输入框,添加错误提示弹窗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 05:00:14