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

如何通过Controller为FXML定义的LineChart组件初始化数据?

问题原因
  • 你在initData方法中对@FXML注入的lineChart执行了重新实例化操作:this.lineChart = new LineChart<>(x, y);,这会让变量指向一个全新的、没有挂载到当前场景的LineChart实例,后续所有数据添加操作都作用在这个不可见的新实例上,界面上FXML生成的原有LineChart没有得到任何修改,所以显示空白。
  • X轴范围计算逻辑错误:你用来计算X轴上下限的比较器逻辑颠倒,且错误取了value值作为上限,最终生成的X轴范围完全不符合数据要求,即使数据能正确添加也会显示异常。
修复方案

直接修改Controller.java的initData方法即可,Main类不需要做任何调整,修改后完整代码如下:

package exercise;

import javafx.fxml.FXML;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;

import java.util.HashMap;
import java.util.Map;

public class Controller {

    @FXML
    private LineChart<Number, Number> lineChart;

    public void initData() {
        Map<Integer, Integer> map = initMap();
        // 修正X轴范围计算逻辑,正确取年份的最小、最大值
        int minYear = map.keySet().stream().min(Integer::compareTo).get();
        int maxYear = map.keySet().stream().max(Integer::compareTo).get();
        
        NumberAxis x = new NumberAxis(minYear, maxYear, 4);
        NumberAxis y = new NumberAxis();
        x.setLabel("Year");
        y.setLabel("Ranking");
        
        // 移除LineChart重新实例化代码,直接修改已有实例的轴配置
        lineChart.setXAxis(x);
        lineChart.setYAxis(y);
        lineChart.setTitle("Chart");

        // 补充泛型声明,消除编译警告
        XYChart.Series<Number, Number> data = new XYChart.Series<>();
        data.setName("Ranks");
        map.forEach((key, value) -> data.getData().add(new XYChart.Data<>(key, value)));

        lineChart.getData().add(data);
    }

    private HashMap<Integer, Integer> initMap() {
        HashMap<Integer, Integer> values = new HashMap<>();
        values.put(2007, 73);
        values.put(2008, 68);
        values.put(2009, 72);
        values.put(2010, 72);
        values.put(2011, 74);
        values.put(2012, 73);
        values.put(2013, 76);
        values.put(2014, 73);
        values.put(2015, 67);
        values.put(2016, 56);
        values.put(2017, 56);
        return values;
    }
}

修改后重新运行程序即可看到LineChart正常加载数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:06:08