JFreeChart setDefaultFillPaint不生效问题求助
问题解决思路
核心问题分析
你遇到的情况有两个关键原因:
ChartUtils.applyCurrentTheme(chart)的调用顺序错误,主题会覆盖你后续设置的渲染器属性。- 默认的
LineAndShapeRenderer仅负责绘制折线和数据点形状,不支持填充折线下方的区域,你设置的setDefaultFillPaint只是针对数据点形状的填充,而你又把形状设为了不可见(Ellipse2D.Double(0, 0, 0, 0)),所以完全看不到效果。
修改后的代码示例
JFreeChart chart = ChartFactory.createLineChart( "# of Sales by Month", // chart title "Month", // domain axis label "# of Sales", // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation true, // include legend true, // tooltips false // urls ); // 先应用主题,再做自定义设置,避免主题覆盖你的配置 ChartUtils.applyCurrentTheme(chart); // 配置图表背景 chart.setBackgroundPaint(Color.BLUE); CategoryPlot plot = (CategoryPlot) chart.getPlot(); plot.setRangePannable(true); plot.setRangeGridlinesVisible(true); plot.setBackgroundAlpha(1); plot.setBackgroundPaint(Color.BLUE); NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis(); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); // 替换为支持区域填充的AreaRenderer AreaRenderer renderer = new AreaRenderer(); plot.setRenderer(renderer); // 设置折线下方区域的填充色 renderer.setSeriesFillPaint(0, Color.GREEN); // 配置折线样式 renderer.setSeriesStroke(0, new BasicStroke(3.0f)); renderer.setSeriesOutlineStroke(0, new BasicStroke(2.0f)); // 隐藏数据点形状(如果不需要) renderer.setSeriesShape(0, null); return chart;
关键修改点说明
- 调整主题应用顺序:把
ChartUtils.applyCurrentTheme(chart)移到所有自定义配置之前,确保你的设置能覆盖主题默认值。 - 替换渲染器:使用
AreaRenderer替代默认的LineAndShapeRenderer,该渲染器专门支持折线与基线之间的区域填充。 - 明确设置系列填充色:通过
setSeriesFillPaint指定目标系列的填充颜色,优先级高于默认填充设置。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

