分类: Oracle
2008-04-23 17:36:54
虽然该 servlet 示例显示了某些图表创建的自定义,但是本文前面的大多数示例都直接使用了 JFreeChart 生成的图表,而没有进行任何自定义。利用 JFreeChart,开发人员可以自定义图表,但是这会增加复杂性。该示例显示的是一些相当简单的自定义,但是也可以进行功能强大得多也复杂得多的自定义。事实上,只要您愿意编写足够多的代码,自定义几乎是没有限制的。
在该示例中,生成的直线图将具有一个透明的背景(透明性支持是 PNG 格式的众多优势中的一个),并将其系列绘图颜色由默认的红色改为蓝色。直线图或许不是显示 HR 模式中每个 Oracle 数据库对象类型的数量的最佳图表类型,但是使用直线图为我们提供了一个演示 JFreeChart 的三维直线图功能的机会。
下面显示了三个图像。第一个(图 12)是使用 Oracle 数据库快捷版附带的基于 Web 的管理工具的屏幕截图,它按对象类型显示了 HR 模式中的模式对象的数量。下一个图像(图 13)显示 JFreeChart 使用默认的颜色(灰色背景和红色绘图色)未进行任何自定义现成生成的直线图,第三个图像(图 14)显示基于相同数据的自定义 JFreeChart 图表。这两个 JFreeChart 生成的图像都显示了各自在浏览器中显示的图表,背景颜色故意设置为较暗的阴影以使自定义图表的背景更明显。
图 14 中显示的图表具有一个透明的背景,这在该图与图 13 比较时最容易看到。但是,只有图表的外部是透明的。具有实际图形的绘图部分称为绘图区,在两种情况下都是白色的。可以使用与更改整体图表的背景相同的方式来更改绘图区的背景颜色。按照在与在图表自身上调用 setBackgroundPaint 方法相同的方式在绘图区上调用 setBackgroundPaint 方法,就生成了图 14。
图12:Oracle 数据库快捷版Web工具对HR数据库对象的显示 |
图13:显示HR模式中每个对象的数量的直线图 |
图14:与图13中显示的是同一个图表,但是具有透明的背景颜色和蓝色轮廓颜色 |
下一个代码清单显示生成自定义的三维直线图的代码。
清单 13: 生成具有背景透明性的 PNG 文件
/** * Write .png file with transparent background based on provided JFreeChart. * * @param aChart JFreeChart. * @param aFileName Name of file to which JFreeChart will write chart. * @param aWidth Width of image. * @param aHeight Height of image. */ public void writePngTransparentBasedOnChart( JFreeChart aChart, String aFileName, int aWidth, int aHeight ) { final String fileExtension = ".png"; try { aChart.setBackgroundPaint( new Color(255,255,255,0) ); CategoryItemRenderer renderer = aChart.getCategoryPlot().getRenderer(); renderer.setSeriesPaint(0, Color.blue.brighter()); renderer.setSeriesVisible(0, true); // default renderer.setSeriesVisibleInLegend(0, true); // default ChartUtilities.writeChartAsPNG( new FileOutputStream(aFileName + fileExtension), aChart, aWidth, aHeight, null, true, // encodeAlpha 0 ); } catch (IOException ioEx) { System.err.println( "Error writing PNG file " + aFileName + fileExtension); } } |