ireport利用javabean做数据源

更新时间:2023-12-01 08:31:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

ireport利用javabean做数据源

创建javabean

1.创建DailySales.java,一个简单VO bean。

import java.io.Serializable;

public class DailySales implements Serializable {

private static final long serialVersionUID = 1L; private String productNo ; private String productName ; private int number ; private int money ; private int id ;

public DailySales(String productNo, String productName, int number, int money) {

this . productNo = productNo; this . productName = productName; this . number = number; this . money = money; }

public String getProductNo() {

return productNo ; }

public void setProductNo(String productNo) {

this . productNo = productNo; }

public String getProductName() {

return productName ; }

public void setProductName(String productName) {

this . productName = productName; }

public int getNumber() {

return number ; }

public void setNumber( int number) {

this . number = number; }

public int getMoney() {

return money ; }

public void setMoney( int money) {

this . money = money; }

public int getId() {

return id ; }

public void setId( int id) {

this . id = id; } }

2. 创建 DailySalesDataSource.java, 这是报表的数据源。这个类实现了 jasperreports 中提供的数据源接口 JRDataSource, 实现其中的两个方法 :next() 和 getFieldValue(JRField field) 。 import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JRField;

public class DailySalesDataSource implements JRDataSource {

/**

* 测试数据,实际项目中是动态获取,也不一定是数组,可以是其它的数据类型 . */

private Object[][] data = {

{ \ 货号 1\ , \ 物品1 \ , 1,1000}, { \ 货号 2\ , \ 物品 2\ , 2,2000}, { \ 货号 3\ , \ 物品 3\ , 3,3000}, { \ 货号 4\ , \ 物品 4\ , 4,4000}, { \ 货号 5\ , \ 物品 5\ , 5,5000}, { \ 货号 6\ , \ 物品 6\ , 6,6000}, { \ 货号 7\ , \ 物品 7\ , 7,7000}, { \ 货号 8\ , \ 物品 8\ , 8,8000}, { \ 货号 9\ , \ 物品 9\ , 9,9000}, { \ 货号 10\ , \ 物品 10\ , 10,10000} };

private int index = -1; public DailySalesDataSource() { } /**

* 实现了 JRDataSource 中的方法.判断是否还有下一个. */

public boolean next() throws JRException { index ++;

return ( index < data . length ); } /**

* 实现了 JRDataSource 中的方法.

* @param field 是对应报表中的要填充的字段的名称. */

public Object getFieldValue(JRField field ) throws JRException {

Object value = null ;

String fieldName = field .getName();

if ( \ .equals(fieldName)) {

value = index+1 ; }

else if ( \ .equals(fieldName)) {

value = data [ index ][0]; }

else if ( \ .equals(fieldName)) {

value = data [ index ][1]; }

else if ( \ .equals(fieldName)) {

value = data [ index ][2]; }

else if ( \ .equals(fieldName)) {

value = data [ index ][3]; } return value; } }

3 .在 ireport 中使用,取得测试数据源 , 如果不使用 ireport 工具,则只需要上面的两个类。 import java.util.Arrays; import java.util.Collection; /**

* 简单工厂类,取得测试数据 * @author xmlin * */

public class DailySalesFactory {

private static DailySales[] data = {

new DailySales( \ 货号 1\ , \ 物品1 \ , 1,1000), new DailySales( \ 货号 2\ , \ 物品 2\ , 2,2000), new DailySales( \ 货号 3\ , \ 物品 3\ , 3,3000), new DailySales( \ 货号 4\ , \ 物品 4\ , 4,4000), new DailySales( \ 货号 5\ , \ 物品 5\ , 5,5000), new DailySales( \ 货号 6\ , \ 物品 6\ , 6,6000), new DailySales( \ 货号 7\ , \ 物品 7\ , 7,7000), new DailySales( \ 货号 8\ , \ 物品 8\ , 8,8000), new DailySales( \ 货号 9\ , \ 物品 9\ , 9,9000), new DailySales( \ 货号 10\ , \ 物品 10\ , 10,10000) };

public static Object[] getBeanArray() {

return data ; }

public static Collection getBeanCollection() {

return Arrays.asList ( data ); } }

三.使用ireport开发报表样式

1.新建一个项目。

2.设置类路径,在菜单“options”中选择Classpath,点击在弹出框中的add folder,填写javabean编译成的.class文件存放的路径. 点save Classpath完成。如图

3.设置数据源.在菜单"Data"中选择”Connection/Data sources”, 点击在弹出框中的new按钮增加一个数据源.如图

其中Name随便取一个名字,Type of Connection/Data 选择 JavaBeans set data source,如果使用其它的数据源则选择其它的选项.Factory class 为我们刚才创建的Factory类,里面包含取得测试数据的静态方法getBeanCollection().用Test测试是否成功,点Save保存.

4. 设置活动连接.在菜单"Data"中选择”Set Active Connection”. 5.Report Query , 在菜单"Data"中选择” Report Query”,填写javabean,即我们创建的VO bean.如图

6.设计报表. 设计日期字段如图

设计填充字段,如图 设计页数字段如图 设计好的报表样式如图

点菜单"build"中的"compile"进行编译,然后再”execute with connection datasource”就可以看到报表的结果了.

报表设计完成,在ireport的执行路径下会生成一个DailySales.jasper的文件. 四.编写测试类.

生成的DailySales.jasper可以在web服务端生成报表,也可以在肥客户端如swing生成,这里写一个在肥客户端和简单运用.

import java.awt.Dimension; import java.util.HashMap; import java.util.Map;

import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.engine.util.JRLoader; import net.sf.jasperreports.view.JasperViewer; public class TestReport {

public static void main(String[] args) {

TestReport.showReport (); }

private static void showReport() {

String reportPath = \ ; Map parameters = new HashMap(); // 如果报表中有用到变量,在这里给它赋值. //parameters.put(\ 报表标题 \ try {

JasperReportjasperReport = (JasperReport) JRLoader.loadObject (reportPath); JasperPrintjasperPrint = JasperFillManager.fillReport (jasperReport, parameters, new DailySalesDataSource());

JasperViewerjrview = new JasperViewer(jasperPrint); jrview.setPreferredSize( new Dimension(200,100)); jrview.setVisible( true ); }

catch (JRException e) {

e.printStackTrace(); }

catch (Exception e) {

e.printStackTrace(); } } }

本文来源:https://www.bwwdw.com/article/tbft.html

Top