饼状图我已经做完了,利用ChartFactory.createPieChart3D生成了3d的饼图,现在有问题就是,饼图上的各部分信息都显示正确,每一饼快的显示信息也没有问题,可是就是我把图片显示在页面之中后,每一小块到解释信息之间有根线相连,现在这部分线太长了,使得我的图片的每块的显示信息的文字总是或多或少的少点,
这怎么解决呢?无论我怎么调整图片的width,都显示不完全.这是什么属性决定定的呢?
另附上我的代码(同网上教程并无大区别):
- Java code
/** * 饼状图 * * @param dataset * 数据集 * @param chartTitle * 图标题 * @param charName * 生成图的名字 * @param pieKeys * 分饼的名字集 * @param paramName * 图片传递名 * @return */ public void createValidityComparePimChar(Map<Integer, Integer> values, String chartTitle, String charName, String[] pieKeys, String paramName) { PieDataset dataset = getPieDataSet(pieKeys, values); // 利用工厂类来创建3D饼图 JFreeChart chart = ChartFactory.createPieChart3D(chartTitle, dataset, true, true, false); // 使下说明标签字体清晰,去锯齿类似于 // chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);的效果 chart.setTextAntiAlias(false); // 图片背景色 chart.setBackgroundPaint(Color.white); // 设置图标题的字体重新设置title(否组有些版本Title会出现乱码) chart.getTitle().setFont((new Font("隶书", Font.CENTER_BASELINE, 20))); // 设置图例(Legend)上的文字(//底部的字体) chart.getLegend().setItemFont(new Font("隶书", Font.CENTER_BASELINE, 15)); PiePlot3D plot = (PiePlot3D) chart.getPlot(); // 图片中显示百分比:默认方式 // 指定饼图轮廓线的颜色 plot.setBaseSectionOutlinePaint(Color.BLACK); plot.setBaseSectionPaint(Color.BLACK); // 设置无数据时的信息 plot.setNoDataMessage("无对应的数据,请重新查询。"); // 设置无数据时的信息显示颜色 plot.setNoDataMessagePaint(Color.red); // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位 plot.setLabelGenerator(new StandardPieSectionLabelGenerator( "{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%"))); // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例 plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator( "{0}:共{1}条,占总体的{2}")); plot.setLabelFont(new Font("宋体", Font.TRUETYPE_FONT, 10)); // 指定图片的透明度(0.0-1.0) plot.setForegroundAlpha(1.0f); // 指定显示的饼图上圆形(false)还椭圆形(true) plot.setCircular(false, true); // 设置第一个 饼块section 的开始位置,默认是12点钟方向 plot.setStartAngle(90); // 设置分饼颜色(不设置它会自己设置) // plot.setSectionPaint(pieKeys[0], new Color(244, 194, 144)); // plot.setSectionPaint(pieKeys[1], new Color(144, 233, 144)); try { HttpServletRequest request = ParameterWrapper.getWrapper() .getRequest(); HttpSession session = request.getSession(); String filename = ServletUtilities.saveChartAsPNG(chart, 800, 450, null, session); String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; // 前台JSP根据el表达式读取图片 setParameter(paramName, graphURL); } catch (Exception e) { e.printStackTrace(); } finally { try { } catch (Exception e) { e.printStackTrace(); } } }
------解决方案--------------------
下面的解释怎样才能让它每一条一换行呢?求解。。。