仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 513|回复: 11
打印 上一主题 下一主题

[学习教程] JAVA网页编程之轻松利用JSP天生数据库饼图

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:28:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
主要缺点就是:速度比较慢,没有C和C++快js|饼图|数据|数据库JSP供应了良多复杂有用的工具,个中包含从数据库中读出数据,发送数据,并可以把了局显现在一个饼状图形。如今让我们看看这一复杂而有用的办法。

你所必要的工具


为了能准确运转这一文章相干的典范,你必需必要JDK1.2或更高的版本、一个干系数据库办理体系、一个JSP收集服务器。我都是在Tomcat调试这些例子,同时我也利用了SunJava2SDK公布的com.sun.image.codec.jpegclasses。

数据库计划
假定你在一家处置发卖奇怪生果的公司下班,公司出卖的生果包含:苹果、桔子、葡萄。如今你的老板想用一个饼状图形显现每种生果的总出卖量,饼状图形能使每种产物的发卖情形一览无余,老板能够敏捷把握公司的产物成友爱况。

表A利用了本文中的两种数据库列表。第一种列表(Products)包括一切发卖产物的称号;第二种列表(Sales)包括每种产物对应的发卖量。

产物(Products)列表包括productID和productname两个域。发卖(Sales)列表包括saleID,productID,和总额。发卖列表中的productID供应了这两个列表之间的联系关系。发卖列表中的总额包括了每次出卖的现金数额,这些数额以浮点型数据呈现。

表B中的getProducts()办法毗连了两个数据库,并把一切的产物称号保留在数组中,我设置以下的数据库划定规矩:

ProductID在产物列表中最共同,也是最关头;
ProductID关于第一个纪录的值为0;
一切以后的一连的纪录都是累加的,以是第二个纪录的productID为1,第三个纪录的productID为2,以此类推。
这些数据库划定规矩同意在product数组中存储数据,以下所示:

arr[rs.getInt("productID")]=rs.getString("productname");

一些数据库办理体系在缺省情形下就同意数据的主动累加大概主动排序。当你在计划数据库时,必定先查明你的数据库办理体系遵守哪些划定规矩,好比主动累加,主动排序等。
猎取总额发卖量


在多半情形下,发卖列表中会有良多个纪录,以是会见数据库的快速性和高效性显得十分主要。如今我们只必要会见数据库中每种产物的总额发卖量。

表C中的getSales()办法与数据库毗连并前往一个数组,这个数组包括每种产物的总额出卖量。当getSales()遍历一切的纪录后,它只存储的是每种产物新的出卖量:

intproduct=rs.getInt("productID");
arr[product]+=rs.getFloat("amount");



pieColor对象
饼状图形上的每种产物应当以分歧的色彩显现。为了到达这一目标,我们创建一个pieColor对象(如表D)所示,这一对象包括有关色彩的数组:

ColorpieColorArray[]={newColor(210,60,60),newColor(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有助于决意图形怎样显现和图形怎样到达最好处置。

为了能以光滑显现,可使用antialiasing办法来处置饼状图形。Antialiasing是一种图形的光滑处置办法。其算法是选择一个特别象素的色彩值并代替交织处的象素,从而可以使线条交织处失掉光滑化。

图A申明了antialiasing办法的效果。能够看出利用antialiasing办法的饼状图形的线条交织处变得很光滑。

图A




同时,还能够创建一个RenderingHints对象,并传送到Graphics2DsetRenderingHints()办法,以下所示:

RenderingHintsrenderHints=newRenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHints(renderHints);
制做可调剂的界限


图A中的饼状图形有一界限,怎样能改动界限的巨细呢?能够先界说intborder=10,然后盘算界限内面积的巨细而完成:

Ellipse2D.Doubleelb=newEllipse2D.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值是正的,则圆弧是以反时针偏向绘制,反之以顺时针绘制。

绘制圆弧
第一步,利用pieColor对象的getPieColor()办法猎取比来饼状圆弧的色彩,并把它付与以后的圆弧::

g2d.setColor(pc.getPieColor());

接着,经由过程不休轮回sales[]数组并使其累加而取得统共的发卖量:

salesTotal+=sales[i];

利用统共发卖量,能够盘算出每种产物发卖情形占统共发卖量的百份量:

floatperc=(sales[i]/salesTotal);

我们盘算sweepAngle便可给圆弧的每部分分派度数:

intsweepAngle=(int)(perc*360);

每部分圆弧画完以后,startAngle便可依据以后的sweepAngle递增。这就确保以后的圆弧部分都是以上一圆弧为入手下手,从而创建一个完全的饼状图形。

显现图标
图标供应了显现饼状图形中各个部分最简便的体例。一个图标的巨细应当与饼状图形中的占据量绝对应。

图B显现了一个完全饼状图形及其对应各个部分的图标,包含产物称号、发卖总量、和各个部分的占据量。

图B




总结
这一文章报告了怎样使用JSP绘制饼状图形的办法及算法,这些办法及算法复杂而有用,开辟职员能够充实天时用这些办法。这一方面完全的文章可拜见于表E。



还是要自己一点一点写代码,然后编译,改错再编译好那。还有最重要的是.net的编译环境非常好,你甚是不需要了解太多工具,对于简单的系统,你可以之了解一些语法就哦了。
小魔女 该用户已被删除
沙发
发表于 2015-1-21 07:46:18 | 只看该作者
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
第二个灵魂 该用户已被删除
板凳
发表于 2015-1-30 11:41:16 | 只看该作者
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
金色的骷髅 该用户已被删除
地板
发表于 2015-1-30 20:01:30 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
爱飞 该用户已被删除
5#
发表于 2015-2-6 15:41:12 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
精灵巫婆 该用户已被删除
6#
发表于 2015-2-16 22:16:00 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
再见西城 该用户已被删除
7#
发表于 2015-2-25 23:39:54 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
乐观 该用户已被删除
8#
发表于 2015-2-28 22:29:52 | 只看该作者
是一种使用者不需花费很多时间学习的语言
分手快乐 该用户已被删除
9#
发表于 2015-3-1 20:25:45 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
若相依 该用户已被删除
10#
发表于 2015-3-10 23:51:15 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
莫相离 该用户已被删除
11#
发表于 2015-3-17 16:09:35 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
不帅 该用户已被删除
12#
发表于 2015-3-24 11:14:45 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 17:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表