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

ChartPanel调整尺寸时JFreeChart显示拉伸,如何触发重新渲染?

解决方案

该问题由ChartPanel默认的固定范围缓冲渲染机制导致:默认配置下,ChartPanel仅会在面板尺寸落在[宽300800,高200600]区间时重新生成渲染缓冲,超出该区间时会直接拉伸已有缓冲图像,从而出现文字变形、显示模糊的问题。

你可以通过修改ChartPanel的缓冲尺寸限制解决该问题,配置后所有尺寸调整都会触发图表重新渲染,不会再出现拉伸问题:
在初始化ChartPanel后,新增4行配置,取消缓冲尺寸的范围限制即可:

// 取消缓冲绘制的尺寸限制,所有尺寸变化都会触发重新渲染
cp.setMinimumDrawWidth(0);
cp.setMaximumDrawWidth(Integer.MAX_VALUE);
cp.setMinimumDrawHeight(0);
cp.setMaximumDrawHeight(Integer.MAX_VALUE);

修改后的完整可运行代码如下:

public static void main(String[] args) {
    JFrame frm = new JFrame("JFreeChart resizing");
    frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    CategoryDataset ds = new DefaultCategoryDataset();
    JFreeChart chart = ChartFactory.createLineChart("Title", "X axis", "Y axis", ds);
    ChartPanel cp = new ChartPanel(chart);
    // 新增以下配置解决拉伸模糊问题
    cp.setMinimumDrawWidth(0);
    cp.setMaximumDrawWidth(Integer.MAX_VALUE);
    cp.setMinimumDrawHeight(0);
    cp.setMaximumDrawHeight(Integer.MAX_VALUE);
    frm.getContentPane().add(cp, BorderLayout.CENTER);
    
    frm.pack();
    frm.setVisible(true);
}

如果需要更精细的重绘控制,也可以给ChartPanel添加组件尺寸监听器,每次窗口调整时主动触发重绘,该方案可作为上述方案的补充使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:27:03