如何用java表格控件FineReport开发java报表

如何用java表格控件FineReport开发java报表,第1张

1

下面我们以一个简单的示例来体会体会一下表单。

最终效果如下:

2

新建表单

点击文件>新建表单,如下图:

拖入组件

如上图所示的效果图,我们可以看到该表单需要有1个下拉框控件以及对应的1个标签控件和一个查询按钮,还需要一个以表格形式显示数据的报表块和显示图表的图表块,此时,我们确定了需要在表单中添加一个报表块,一个图表块,3个控件。

注:在组件介绍中,我们知道控件即可依附于参数面板组件存在,也可以单独以组件的形式存在,在这里可随意使用哪种形式,效果都一样,那么使用依附于参数面板组件存在的形式。

参数组件

从工具栏中将参数组件拖拽至表单主体中,并将相应的三个控件:下拉框、文本控件和查询按钮拖拽至参数组件中,并设置标签控件的控件值为:客户,如下图:

报表块组件

从工具栏中将报表组件也拖拽至表单主体中,如下图:

注:如果组件数量过多,在web端展示的时候自适应在一页内显示会比较拥挤,那么此时可以在右侧下方选中整体框架body,在右侧上方的属性表中将组件缩放修改为自适应原样缩放,如下图:

充满展现区域:是指在web端展示的时候,所有组件自适应充满整个浏览器页面显示,不出现滚动条;

自适应原样缩放:是指在web端展示的时候根据制作表单时候组件大小比例显示,并不缩放充满整个web页面,如果超过页面大小,会出现滚动条。

其详细显示样式请查看表单样式

图表组件

再从工具栏中将图表组件拖曳至报表块组件的下方,如下图:

控件绑定数据

定义数据集

效果图中,新建数据集ds1:SELECT 产品名称,库存量,产品.成本价 ,产品.单价 FROM 订单,订单明细,产品 where 客户ID='${company}'and 订单.订单ID=订单明细.订单ID and 订单明细.产品ID=产品.产品ID,参数company的默认值为VINET,。

注:参数名字必须与客户ID下拉框控件名称保持一致。

客户下拉框控件

选中下拉框控件拖拽到适当位置,下拉框控件名设为“company”,数据字典来自FRDemo数据库的客户表(数据类型选择数据库表,数据库选择FRDemo),实际值和显示值分别为客户ID和客户名称,控件值为VINET:

报表块

参数面板与控件都已经设置好之后,点开报表块里面的触笔按钮,进行报表块编辑界面,如下图:

新建数据集

效果图中,报表块里面要显示订单明细数据,根据客户ID进行过滤,新建数据集ds2:select * from 订单 where 客户ID='${company}',company默认值为VINET.

表样设计

如下图所示,设计表样:

点击左下角的表单按钮回到表单的设计界面,选中报表块,可在右侧的属性表中设置其报表块工具栏是否可见,如下图:

图表块

鼠标选中图表块所在区域,为该图表绑定数据,图表数据源来源于数据集数据源,其分类系列设置如下:

条件属性

由于该图表块类型为组合图,即需要通过图表条件属性来修改不同系列的图表类型,如下图,新增一个条件属性,设置当系列序号为3的时候,其坐标轴为次坐标轴,图表类型为折线图:

使用 JFreeChart 生成各种样式的图表

限于篇幅的问题我们在这里只实现两种常用的图表,其他类型图表读者可以触类旁通。我们先给出柱状图的实现,饼图的实现再来跟柱状图进行比较。

1 柱状图

package lius.chart.demo

import java.io.*

import org.jfree.data.*

import org.jfree.chart.*

import org.jfree.chart.plot.*

/**

* 该类用于演示最简单的柱状图生成

* @author Winter Lau

*/

public class BarChartDemo {

public static void main(String[] args) throws IOException{

CategoryDataset dataset = getDataSet2()

JFreeChart chart = ChartFactory.createBarChart3D(

"水果产量图", // 图表标题

"水果", // 目录轴的显示标签

"产量", // 数值轴的显示标签

dataset, // 数据集

PlotOrientation.VERTICAL, // 图表方向:水平、垂直

true, // 是否显示图例(对于简单的柱状图必须是 false)

false, // 是否生成工具

false // 是否生成 URL 链接

)

FileOutputStream fos_jpg = null

try {

fos_jpg = new FileOutputStream("D:\\fruit.jpg")

ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null)

} finally {

try {

fos_jpg.close()

} catch (Exception e) {}

}

}

/**

* 获取一个演示用的简单数据集对象

* @return

*/

private static CategoryDataset getDataSet() {

DefaultCategoryDataset dataset = new DefaultCategoryDataset()

dataset.addValue(100, null, "苹果")

dataset.addValue(200, null, "梨子")

dataset.addValue(300, null, "葡萄")

dataset.addValue(400, null, "香蕉")

dataset.addValue(500, null, "荔枝")

return dataset

}

/**

* 获取一个演示用的组合数据集对象

* @return

*/

private static CategoryDataset getDataSet2() {

DefaultCategoryDataset dataset = new DefaultCategoryDataset()

dataset.addValue(100, "北京", "苹果")

dataset.addValue(100, "上海", "苹果")

dataset.addValue(100, "广州", "苹果")

dataset.addValue(200, "北京", "梨子")

dataset.addValue(200, "上海", "梨子")

dataset.addValue(200, "广州", "梨子")

dataset.addValue(300, "北京", "葡萄")

dataset.addValue(300, "上海", "葡萄")

dataset.addValue(300, "广州", "葡萄")

dataset.addValue(400, "北京", "香蕉")

dataset.addValue(400, "上海", "香蕉")

dataset.addValue(400, "广州", "香蕉")

dataset.addValue(500, "北京", "荔枝")

dataset.addValue(500, "上海", "荔枝")

dataset.addValue(500, "广州", "荔枝")

return dataset

}

}

2 饼图

package lius.chart.demo

import java.io.*

import org.jfree.data.*

import org.jfree.chart.*

/**

* 用于演示饼图的生成

* @author Winter Lau

*/

public class PieChartDemo {

public static void main(String[] args) throws IOException{

DefaultPieDataset data = getDataSet()

JFreeChart chart = ChartFactory.createPie3DChart("水果产量图", // 图表标题

data,

true, // 是否显示图例

false,

false

)

// 写图表对象到文件,参照柱状图生成源码

}

/**

* 获取一个演示用的简单数据集对象

* @return

*/

private static DefaultPieDataset getDataSet() {

DefaultPieDataset dataset = new DefaultPieDataset()

dataset.setValue("苹果",100)

dataset.setValue("梨子",200)

dataset.setValue("葡萄",300)

dataset.setValue("香蕉",400)

dataset.setValue("荔枝",500)

return dataset

}

}

3将生成的图表移到浏览器上

package lius.chart.demo

import java.io.IOException

import javax.servlet.*

import javax.servlet.http.HttpServlet

import org.jfree.data.*

import org.jfree.chart.*

/**

* 演示通过 servlet 直接输出图表

* @author Winter Lau

*/

public class ChartDemoServlet extends HttpServlet {

public void service(ServletRequest req, ServletResponse res)

throws ServletException, IOException

{

res.setContentType("image/jpeg")

DefaultPieDataset data = getDataSet()

JFreeChart chart = ChartFactory.createPie3DChart("水果产量图",

data,

true,

false,

false

)

ChartUtilities.writeChartAsJPEG(res.getOutputStream(),

100,chart,400,300,null)

}

/**

* 获取一个演示用的简单数据集对象

* @return

*/

private static DefaultPieDataset getDataSet() {

DefaultPieDataset dataset = new DefaultPieDataset()

dataset.setValue("苹果",100)

dataset.setValue("梨子",200)

dataset.setValue("葡萄",300)

dataset.setValue("香蕉",400)

dataset.setValue("荔枝",500)

return dataset

}

}

4高级主题

很多情况我们不仅仅要求可以在浏览器上显示一个图表,我们更需要客户可以直接在图表上做一下交互的 *** 作,例如获取信息提示,点击图表某个部分进行更详细信息的展示等等。例如前面生成的简单柱状图,用户需要在看到柱状图后点击某种水果例如是苹果即可看到各个地区苹果产量的情况。为此就要求该图形具有交互 *** 作的功能。在 HTML 中为了让一个图像具有可交互的功能就必须给该图像定义一个 Map 对象。下表节选一段具有该功能的 HTML 代码:

<MAP NAME="chartMap">

<AREA SHAPE="RECT" COORDS="81,15,126,254" href="?series=0&category=100"

title="100 = 7,048"

onclick="javascript:clickChart('100')return false">

<AREA SHAPE="RECT" COORDS="143,27,188,255" href="?series=0&category=200"

title="200 = 6,721"

onclick="javascript: clickChart ('200')return false">

<AREA SHAPE="RECT" COORDS="205,54,250,255" href="?series=0&category=300"

title="300 = 5,929"

onclick="javascript: clickChart ('300')return false">

<AREA SHAPE="RECT" COORDS="267,85,312,255" href="?series=0&category=400"

title="400 = 5,005"

onclick="javascript: clickChart ('400')return false">

<AREA SHAPE="RECT" COORDS="329,17,374,255" href="?series=0&category=Diet"

title="Diet = 7,017" onclick="javascript:

clickChart ('Diet')return false">

</MAP>

由此就产生了一个问题:如果根据一个图像来生成对应的 MAP 对象。我们回头看看刚才的代码,在创建一个图表对象时候有两个参数,我们举柱状图的例子来讲这两个参数就是 ChartFactory. createBarChart3D 方法中的最后两个参数,这两个参数的类型都是布尔值。这两个参数意思分别是:是否创建工具提示 (tooltip) 以及是否生成 URL。这两个参数分别对应着 MAP 中一个 AREA 的 title 属性以及 href 属性。

可是我想知道的是怎么来产生这个 MAP 啊!哈哈,不要着急,JFreeChart 已经帮我们做好生成 MAP 对象的功能。为了生成 MAP 对象就要引入另外一个对象:ChartRenderingInfo。因为 JFreeChart 没有直接的方法利用一个图表对象直接生成 MAP 数据,它需要一个中间对象来过渡,这个对象就是 ChartRenderingInfo。

HSSFWorkbook wb=new HSSFWorkbook()//创建一个Excel

HSSFSheet sheet=wb.createSheet("sheet1")//创建一个Sheet

HSSFRow row=sheet.createRow(0)//创建一个行

HSSFCell cell=row.createCell((short)0) //创建一个单元格

cell.setEncoding(HSSFCell.ENCODING_UTF_16)

cell.setCellValue("序号")//设置值

cell=row.createCell((short)1)

cell.setEncoding(HSSFCell.ENCODING_UTF_16)

cell.setCellValue("姓")


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7969737.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-12
下一篇2023-04-12

发表评论

登录后才能评论

评论列表(0条)

    保存