分类: Oracle
2008-04-23 17:33:59
本文的其余部分主要用于阐释某些 JFreeChart 特性以及 JFreeChart 是多么容易上手。本文通过一系列代码示例以及所生成图表的快照来阐释 JFreeChart 的可用性及特性。介绍每个示例时,还会介绍与每个具体示例有关的方面以及其他常用的 JFreeChart 概念。
本文的大多数示例都涉及到使用 JFreeChart 根据 Oracle 数据库快捷版提供的 HR 模式中存储的数据创建图表。由于我们要绘制数据库中存储的数据的图表,因此面向 JDBC 的数据集类尤为便利。这第一个示例显示了如何使用饼形图绘制每个部门的员工数量的图表。
清单 1 演示了根据数据库中存储的数据创建图表是多么容易。databaseAccess.getOracleDbConnection() 方法(未在此处显示)是一个简单方法,它提供了一个 Oracle 数据库连接(返回一个 java.sql.Connection)。
清单1:使用 JFreeChart 的 JDBCPieDataset 创建一个饼形图
/** * Create pie chart representing percentage of employees in each department * that has at least one employee. * * @return Pie chart; null if no image created. */ public JFreeChart createNumberEmpsPerDeptPieChart() { JFreeChart pieChart = null; final String QUERY_NUMBER_EMPLOYEES_PER_DEPARTMENT = "SELECT departments.department_name, count(*) AS num_employees " + "FROM departments, employees " + "WHERE employees.department_id = departments.department_id " + "GROUP BY departments.department_name"; final String TITLE_EMPS_PER_DEPT = “Employees Per Department”; try { PieDataset pieDataset = new JDBCPieDataset( databaseAccess.getOracleDbConnection(), QUERY_NUMBER_EMPLOYEES_PER_DEPARTMENT ); pieChart = ChartFactory.createPieChart( TITLE_EMPS_PER_DEPT, // chart title pieDataset, true, // legend displayed true, // tooltips displayed false ); // no URLs } catch (SQLException sqlEx) // checked exception { System.err.println("Error trying to acquire JDBCPieDataset."); System.err.println("Error Code:" + sqlEx.getErrorCode()); System.err.println("SQLSTATE:" + sqlEx.getSQLState()); sqlEx.printStackTrace(); } return pieChart; } |
如清单 1 所示,从数据库生成一个饼形图只需要两条重要的 Java 代码语句。创建相应的数据集,然后将其传递给 ChartFactory 的 createPieChart 方法,该方法返回包含所生成的饼形图的 JFreeChart。构造一个 JDBCPieDataset,并传递一个数据库连接和一个数据库 SQL 查询字符串。由于该具体类实现 PieDataset 接口,因此我们可以通过接口将其传递给 createPieChart 方法。该代码清单中 SQLException 的 catch 块是必需的,因为 JDBCPieDataset 构造器抛出检查到的 SQLException 异常。
以 JFreeChart 类的实例形式创建了一个图表之后,我们可以对该图表进行一些操作。对创建的图表可以做的最简单的操作之一是将其作为图像文件写入文件系统。清单 2 中的代码阐释了如何使用 ChartUtilities 将新创建的 JFreeChart 作为一个 PNG 格式的图像写入文件系统。
清单 2:将图表写入 PNG 文件
/** * Write .png file based on provided JFreeChart. * * @param aChart JFreeChart. * @param aFileName Name of file to which JFreeChart will be written.. * @param aWidth Width of image. * @param aHeight Height of image. */ public void writePngBasedOnChart( JFreeChart aChart, String aFileName, int aWidth, int aHeight ) { try { ChartUtilities.writeChartAsPNG( new FileOutputStream(aFileName), aChart, aWidth, aHeight); } catch (IOException ioEx) { System.err.println("Error writing PNG file " + aFileName); } } |
该代码清单只有一条重要的 Java 代码语句,用于将 JFreeChart 图表将作为 PNG 文件写出。这条语句调用 ChartUtilities.writeChartAsPNG 方法,向其传递清单 1 中新创建的 JFreeChart 图表,以及指明要将该图像写入到的文件的名称以及图像的长度和宽度的字符串。注意,这个通用方法可以接受任何 JFreeChart 图表,因此可用于所有图表类型。在本示例中,我们构造了一个饼形图(如图 5 所示)。从该图表可以很快看出绝大多数员工在 Shipping 或 Sales 部门工作。
图5:根据 DB 查询创建的 PNG 格式饼形图 |
如果不算用于处理异常、获得一个数据库连接以及返回类的“基础架构”代码行,直接从数据库创建图 5 中的图表只需三条重要的 Java 代码语句。这三条语句对应于使用 JFreeChart 从数据库生成基本图表通常所需的三个步骤:
◆用一个有效的数据库连接和相应的数据库 SQL 查询字符串创建相应的面向 JDBC 的数据集的实例。
◆将上一步骤中的面向 JDBC 的数据集传递给所需图表类型对应的 ChartFactory.create***Chart 方法。
◆以适当的格式显示新创建的 JFreeChart(第一个示例中的 PNG 文件)。
本文的其余部分将介绍其他显示生成的图表的方法以及其他类型图表的示例。