大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> JSP专区 -> 轻松使用JSP生成饼图

轻松使用JSP生成饼图

时间: 2021-07-31 作者:daque

作家: builder.com

jsp供给了很多大略适用的东西,个中囊括从数据库中读出数据,发送数据,并不妨把截止表露在一个饼状图形。此刻让咱们看看这一大略而适用的本领。

你所须要的货色 

转自:动静网创造指南 www.knowsky.com

为了能精确运转这一作品关系的典型,你必需须要jdk 1.2或更高的本子、一个联系数据库处置体例、一个jsp搜集效劳器。我都是在tomcat调节和测试那些例子,同声我也运用了sun java 2 sdk颁布的com.sun.image.codec.jpegclasses。

数据库安排假如你在一家从事出卖陈腐生果的公司上班,公司出卖的生果囊括:苹果、桔子、葡萄。此刻你的东家想用一个饼状图形表露每一种生果的总出卖量,饼状图形能使每一种产物的出卖情景一览无余,东家不妨赶快控制公司的产物拍板情景。

表a运用了正文中的两种数据库列表。第一种列表(products)包括一切出卖产物的称呼;第二种列表(sales)包括每一种产物对应的出卖量。

产物(products)列表包括productid和productname两个域。出卖(sales)列表包括saleid, productid,以及总数。出卖列表中的productid供给了这两个列表之间的关系。出卖列表中的总数包括了每一次出卖的现款数额,那些数额以浮点型数据展示。

转自:动静网创造指南 www.knowsky.com

表b中的getproducts()本领贯穿了两个数据库,并把一切的产物称呼生存在数组中,我树立以次的数据库准则:

productid在产物列表中最特殊,也是最要害;productid对于第一个记载的值为0;一切之后的贯串的记载都是累加的,以是第二个记载的productid为1,第三个记载的productid为2,以该类推。那些数据库准则承诺在product数组中保存数据,如次所示:

轻松使用jsp生成饼图图1

arr[rs.getint("productid")] = rs.getstring("productname");

少许数据库处置体例在缺省情景下就承诺数据的机动累加大概机动排序。当你在安排数据库时,确定先查明你的数据库处置体例按照哪些准则,比方机动累加,机动排序等。 

获得总数出卖量 

在普遍情景下,出卖列表中会有很多个记载,以是考察数据库的赶快性和高效性显得特殊要害。此刻咱们只须要考察数据库中每一种产物的总数出卖量。

表c中的getsales()本领与数据库贯穿并归来一个数组,这个数组包括每一种产物的总数出卖量。当getsales()遍历一切的记载后,它只保存的是每一种产物新的出卖量:

转自:动静网创造指南 www.knowsky.com

int product = rs.getint("productid");arr[product] += rs.getfloat("amount");

 

piecolor东西饼状图形上的每一种产物该当以各别的脸色表露。为了到达这一手段,咱们创造一个piecolor东西(如表d)所示,这一东西包括相关脸色的数组:

color piecolorarray[] = {new color(210,60,60), new color(60,210,60)…}

piecolor类设置了一个setnewcolor()的本领,这一本领不妨使curpiecolor和索引递加,同声它不妨查看索引不要胜过边境范畴,即沿用的本领是:即使curpiecolor过大即赋0值。

更灵验的是,setnewcolor()轮回每一种脸色后,并在第一种脸色下实行以次的代码:

curpiecolor++;if(curpiecolor >= piecolorarray.length){curpiecolor = 0;}

 

renderinghints和antialiasing类java.awt.renderinghints类设置了很多本领以表露二维图形,囊括alpha_interpolation, 颤动,以及antialiasing本领。renderinghints无助于于确定图形怎样表露以及图形怎样到达最好处置。

转自:动静网创造指南 www.knowsky.com

为了能以光滑表露,不妨运用antialiasing本领来处置饼状图形。antialiasing是一种图形的光滑处置本领。其算法是采用一个特出音素的脸色值并代替穿插处的音素,进而不妨使线条穿插处获得光滑化。

图a说领会antialiasing本领的功效。不妨看出运用antialiasing本领的饼状图形的线条穿插处变得很光滑。

图a

转自:动静网创造指南 www.knowsky.com

同声,还不妨创造一个renderinghints东西,并传播到graphics2d setrenderinghints()本领,如次所示:

renderinghints renderhints = new renderinghints(renderinghints.key_antialiasing,    renderinghints.value_antialias_on);g2d.setrenderinghints(renderhints);

制做可安排的边境 

图a中的饼状图形有一面界,怎样能变换边境的巨细呢?不妨先设置int border = 10,而后计划边境内表面积的巨细而实行:

ellipse2d.double elb = new ellipse2d.double(x_pie - border/2, y_pie - border/2, piewidth + border, pieheight + border);

x_pie和y_pie的值代办着掩盖在饼状图形的正方形的左上角。咱们经过边境表面积取一半(border/2)而获得饼状图形的重心。

圆弧(arc)表面从java.awt.graphics 类接受而来的fillarc()本领供给了绘制饼状图形各个局部(或圆弧)的简片面法:

g2d.fillarc(x_position, y_position, width, height, startangle, sweepangle);

x_position,和y_position平头代办着要弥补的圆弧的左上角的x,y的坐标,width和heigh平头代办其简直的尺寸。即使width和height的值十分,饼状图形将是一个圆。即使width和height不十分,那么饼状图形将是一个长圆。

fillarc()本领确定鉴于sweepangle平头值的圆弧的巨细。即使sweepangle值是正的,则圆弧是以反时针目标绘制,反之以顺时针绘制。

轻松使用jsp生成饼图图2

绘制圆弧第一步,运用piecolor东西的getpiecolor()本领获得迩来饼状圆弧的脸色,并把它付与暂时的圆弧::

g2d.setcolor(pc.getpiecolor());

接着,经过连接轮回sales[]数组并使其累加而赢得所有的出卖量:

salestotal += sales[i];

运用所有出卖量,不妨计划出每一种产物出卖情景占所有出卖量的百重量:

float perc = (sales[i]/salestotal);

咱们计划sweepangle即可给圆弧的每一局部调配度数:

int sweepangle = (int)(perc * 360);

每一局部圆弧画完之后,startangle即可按照暂时的sweepangle递加。这就保证暂时的圆弧局部都是之上一圆弧为发端,进而创造一个完备的饼状图形。

表露图标图标供给了表露饼状图形中各个局部最简略的办法。一个图目标巨细该当与饼状图形中的占领量对立应。

图b表露了一个完备饼状图形及其对应各个局部的图标,囊括产物称呼、出卖总量、以及各个局部的占领量。

图b

 

归纳

这一作品报告了怎样运用jsp绘制饼状图形的本领及算法,那些本领及算法大略而适用,开拓职员不妨充溢地运用那些本领。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.