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
相关产品推荐
相关产品推荐

