分享
 
 
 

第二部分:使用Jasperreport作为报表控件开发胖客户端报表应用

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

第二部分:使用Jasperreport作为报表控件开发胖客户端报表应用

文章将会涉及3个方面的内容:

第一部分:使用iReport制作报表的详细过程(Windows环境下)

第二部分:使用Jasperreport作为报表控件开发胖客户端报表应用

第三部分:使用Jasperreport作为报表控件开发Web报表应用

1、概述

我们对第一部分的内容做个简要的回忆,第一部分主要是介绍使用iReport如何制作一个数据报表,我认为文章比较详细的介绍“如何从零到满足大部分需求报表出现”。但是文中没有涉及Jasperreport的任何内容,目的是让你纯粹的理解如何做报表,因为做报表和把报表内嵌到应用程序编程是可以分工的,便于整合也便于分解。

我们知道iReport是一个Jasperreport的前端开发工具,iReport用来制作和预览报表,为应用使用报表提供足够的前端支持。现在简要的介绍Jasperreport是如何工作的,这样你可以更好的理解iReport是如何帮助Jasperreport实现前端的工作,其实这些工作在我们看来就是“脏活”,为什么呢?看看下面的资料就知道了。

通过上图你大概已经明白Jasperreport的工作原理了。首先是要有一个XML文件(一般是以jrxml后缀),那么这个XML文件从那里来呢?做什么用呢? 这个XML文件就是报表的定义文件,整个报表的每一个细节都在这个XML文件之中定义,一个简单报表的xml文件就有几百行,你可以手工编辑这个XML文件(一行一行,一段一段的编辑吧――这就是所谓的“脏活”)。如果是手工制作这个XML文件,单从效率上考虑就不允许,特别是现在很多应用系统的开发时间变得越来越紧张,总是会在时间上出问题。节省时间最好的办法就是充分的利用自动化工具,詹姆斯.马丁的软件工程思想也是反复的强调过程的自动化,如何做到自动化呢?就是充分的利用自动化工具集成到开发流程,说了一大堆不就是为了说要用iReport来做报表吗!这是我们第一部分已经完成的工作,但是这里重要的是理解Jasperreport的工作原理。

2、结合Jbuilder开发胖客户端报表应用

2.1、建立Application

参考Jbuilder有关资料。只要是普通Window窗口应用即可。

2.2、引入JasperReports需要的库文件

通过jbuilder9【Tool】-【configure Libraries】-按最左边的【New】-输入一个名称,比如Report-【add】按钮,导航到iReport的lib目录,把lib目录里面的所有文件引入。如图:

按两次OK回到Jbuilder的开发界面。

2.3、向工程添加Report系列库文件

通过右击工程,选择【properties】-【paths】Label-【Required Libraries】Label-【Add】按钮-选择“Report”-按两次OK回到Jbuilder的开发界面。这样就添加完成了需要的库文件了。这么做是比较理想的,但是报表运行时可能不需要iReport的lib下所有的jar文件。

2.4、在主界面上添加需要的组件

在主Frame添加一个Button和一个Label以及一个TextBox,当然你也可以通过创建菜单连接,如图:

这个窗体时用来做测试用的,实际的界面可能很复杂,其中的TextBox就是为报表的变量做准备的。这里填写的值就是要传递给报表的变量,也就是第一部分定义的带$P{}符号的变量,程序会把他们对应起来。Button的单击事件代码如下:

/**

* RptDialog对话框是用来承载报表的显示。

* @param e

*/

void jButton1_actionPerformed(ActionEvent e) {

//请创建一个对话框类RptDialog

RptDialog dlg = new RptDialog(this.jGroupID.getText());

Dimension dlgSize = dlg.getPreferredSize();

Dimension frmSize = getSize();

Point loc = getLocation();

dlg.setLocation( (frmSize.width - dlgSize.width) / 2 + loc.x,

(frmSize.height - dlgSize.height) / 2 + loc.y);

dlg.setModal(true);

dlg.pack();

dlg.show();

}

RptDialog是接下来制作的一个Dialog对象,通过Jbuilder新建一个Dialog对象并命名RptDialog。RptDialog的代码如下:

import java.awt.*;

import javax.swing.*;

import dori.jasper.engine.*;

import dori.jasper.view.*;

import dori.jasper.engine.util.JRLoader;

import java.sql.Connection;

import java.io.File;

import java.util.Map;

import java.util.HashMap;

import mytest.trac.CommectionDB;

/**

* <p>Title: RptDialog </p>

* <p>Description: 报表承载对话框</p>

* <p>Copyright: Copyright (c) 2004</p>

* <p>Company: *****</p>

* @author 李克喜

* @version 1.0

*/

public class RptDialog extends JDialog {

JPanel ReportPan = new JPanel();

BorderLayout borderLayout1 = new BorderLayout();

//Bug项目名称

String proname = "";

//显示报表需要的控件

JRViewer jrview;

public RptDialog(String GroupID) {

proname = GroupID;

try {

jbInit();

pack();

}

catch (Exception ex) {

ex.printStackTrace();

}

}

private void jbInit() throws Exception {

ReportPan.setLayout(borderLayout1);

getContentPane().add(ReportPan);

//装载报表,在Jbuilder工程的目录创建一个Reports文件夹,并把报表的jasper文件搁置在该文件夹。

String reportPath = System.getProperty("user.dir") + "\\Reports\\ BugsRpt.jasper";

JasperReport jasperReport =

(JasperReport) JRLoader.loadObjectFromLocation(reportPath);

//创建数据库的连接,参考java的JDBC编程资料创建连接方式

CommectionDB conndb = new CommectionDB();

//注意:这个连接要求与制作报表时使用的连接一致

Connection conn = conndb.getDbConnection();

//报表配置参数,前文提过的SQL语句的Where条件参数就是与这里对应。

//条件的值可能是通过多种方式得到的,比如上一个页面传递过来的

Map parameters = new HashMap();

//ProjectName就是iReport的变量$P{ProjectName}的名称,参考第一部分的5.6添加参数和使用参

proname就是从界面上获取的值。

parameters.put("ProjectName ", proname);

JasperPrint jasperPrint =

JasperFillManager.fillReport(

jasperReport,

parameters,

conn

);

//装载过程,注意其中的红体字部分

jrview = new dori.jasper.view.JRViewer(jasperPrint);

ReportPan.setLayout(borderLayout1);

ReportPan.setPreferredSize(new Dimension(800, 600));

getContentPane().add(ReportPan, BorderLayout.CENTER);

ReportPan.add(jrview,null);

}

}

到这里,所有需要设置和编程的工作基本完成了。

3、运行

确定数据库已经启动了,在JBuilder运行应用程序。在TextBox输入有意义的组值,比如“BugWin系统”,这是我的测试值,实际情况是根据你的需要来确定的。单击Button,系统会弹出对话框,运行结果和第一部分6.2、预览报表结果一致。

4、总结

随着结束的进步,应用环境的不断变化,胖客户端的应用可能会逐渐退出主流,但是它的存在是必要的。所以我要写胖客户端的应用方面的报表使用技术。文中简要明了的介绍了如何使用Jasperreport编程报表程序。希望对你有一点帮助。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有