仓酷云

标题: JAVA编程:在网页上公布统计曲线 [打印本页]

作者: 分手快乐    时间: 2015-1-18 11:25
标题: JAVA编程:在网页上公布统计曲线
JAVA是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由升阳(SunMicrosystems)公司的詹姆斯·高斯林(JamesGosling)等人于1990年代初开发。统计|网页1、弁言
  在冷冷清清的Internet上制造极富本性化的主页、实时公布使人心动的信息
,以便吸引全球分歧肤色、分歧职业的人们驻"足"寓目,乃至乐不思蜀,甚者大方
解囊,是Internet冲浪者心中的妄想。经由过程公道使用HTML剧本言语供应的表格、列
表、字体和段落的格局化、多媒体撑持等,能使网页内容明晰、井井有条、可读性
强,这些已有浩瀚文献叙述,在此不再赘述。

  我们晓得,在各类信息中,统计信息可谓是用得较多、具有相称压服力的信息
,而表达统计数据最直不雅的体例是依据这些数据绘制曲线。文献[1]用相称的篇幅
先容了怎样在Windows操纵体系中编写一个具有OLE服务器才能的统计曲线绘制工
具,而本文的主题则是:怎样使用Java对画图的撑持,编写一个依据统计数据绘制曲
线的小程序(Applet)Plot,经由过程把Plot编译天生的字节码文件Plot.class嵌进到H
TML剧本中,从而完成在网页上公布统计曲线的目标。

  2、Java编程概述

  1.Java言语标准

  Java承继了C++的基础语法,摒弃了一些过期的特性,好比预编译的头文件、宏
、前提编译,数据布局的布局体、列举体和团结体,简单招致平安性成绩的指针,以
及流畅难明的多重承继等,自创了ObjectiveC的接口和Ada的包(package),和内
置了Internet收集所必要的基础特性:布局中立(任何芯片、任何操纵体系能够运
行统一版本的Java程序)、平安性(制止传染病毒和避免不法会见)、多线程和收集
通讯等。现实上,上述被Java丢弃的特性,如指针和类的多重承继,都是因为太庞大
而遭C++程序员咒骂的;而新开展的特性,如布局中立、平安性、多线程和收集通讯
等,是C++程序员极想完成而又十分难完成的特性。

  2.JDK

  Windows程序员必定都晓得做Windows开辟要用WindowsSDK(软件开辟工具),
如今,做Java开辟的程序员也都晓得编写Java小程序要用JDK(Java开辟工具)了。
但是,与SDK次要接纳布局体和函数等面向历程的体例供应Windows编程接口分歧,
JDK接纳包、界面和类等面向对象的体例供应Java编程接口。从这类意义上说,JD
K与MicrosoftVisualC++的MFC,大概BorlandC++的OWL类似:它是一个类库,一
个使用框架,一个无缝集成的办理计划。

  开始公布的JDK应当算JDK1.0.3α,它是1995年Sun公司在环球局限内举行Ja
va程序计划年夜奖赛时随HotJava1.0.3α发放的。在该版本中,通用包完成得对照
少,只要java.lang、java.util和java.io,而其他有关用户界面和收集通讯的包
都在HotJava中供应。此后刊行了1.0版,这是供应给各Java平台开辟公司的,个中
,包全体自力出来,共八个:java.applet、java.awt、java.awt.image、java.
awt.peer、java.io、java.lang、java.net和java.util和一个sun.tools
.debug。本文的程序基于1.0版本编写。因为1.0.3α和1.0两个版本的包布置不同
很年夜,因此用前一个版本编写的程序在后一个版本的编译工具中编译有大概通不外
,要作修正。在1996年8月尾,Sun公司在Internet上公布了1.1版,1.1版在1.0版基
础上稍有改善,两个版本坚持完整的兼容。

  3、计划方针和程序构想

  如今我们回到本文的主题上。起首,思索编写一个Java小程序,它的界面和功
能能够如许来形貌:

  统计题目和统计数据由HTML的param标注供应,统计数据的个数没无限制;
  依据数据的取值画出带刻度的X、Y轴;
  在用线毗连每一个数据点的同时标出该点的坐标值;
  供应绘制三组曲线的选择。

  针对上述请求,思索机关两个类来完成:Curve类用于完成绘制统计曲线的各个
方面;Plot类则派生于Applet,它是本程序的小程序类,经由过程利用Curve类来完成统
计曲线的绘制。鉴于篇幅,上面给出完成要点及其程序。如必要全体源代码的读者
,请与笔者接洽。

  1.Curve类

  Curve类机关次要基于以下几点思索。

  (1)基类。Curve从Java一切类的基类Object派生,那末就能够不显式声了然。


classCurve{
......
}

  (2)画图情况。依据Windows等窗口操纵体系的编程履历,向显现器、打印机等
输入设备画图是经由过程画图情况来完成的。因为Java要面向一切平台,包含Windows
、Unix和Macintosh等,它们的画图情况(如显现器)观点很纷歧样。那末,Java如
何来完成画图呢?本来,Java在java.awt包中经由过程Graphics类来供应了对各类画图
设备的设备情况的笼统类封装。用Windows编程来尴尬刁难照,Graphics所代表的观点
就是WindowsGDI的设备情况(DeviceContext),也就是MFC中CDC类或OWL的TDc类
。有了如许的对照,对Graphics就对照好了解了。也就是,一切绘制直线、矩形、
椭圆、多边形、设置字体、绘制文本等操纵,挪用Graphics类中的响应办法便可。
上面代码是经由过程Curve机关器将小程序类Plot的设备情况对象g传送给Curve,以被
其他各个绘制办法利用:

publicCurve(Graphicsg)
{
myGC=g;
......
}

  (3)绘制算法。绘制算法就是绘制统计曲线的完成办法,包含绘制题目、坐标
轴、数据联线、标出数据点坐标等,和其逆历程:扫除这些绘制(由于当绘制其他
曲线时,得包管革新前一次绘制的一切内容)。鉴于篇幅,上面仅给出显现数据的方
法完成showData.

publicsynchronizedvoidshowData(Vectorv)
{
floatmaxY=0;
myGC.setColor(Color.red);
intxPoint;
intyPoint;
//断定Vector中的最年夜值。
for(inti=0;i<v.size();i++)
{
floattemp=((Float)v.elementAt(i)).floatValue();
if(temp>maxY)
{
maxY=temp;
}
}
//断定第一个数据点的X坐标。
xPoint=xOrigin+(xSpacing/2);
intoldX=0;
intoldY=0;
//在数据点处绘制一个小圆圈。
for(intj=0;j<v.size();j++)
{
yPoint=yOrigin(int)((axisH/maxY)*
((Float)v.elementAt(j)).floatValue());
myGC.fillRect(xPoint,yPoint,3,3);
//在数据点之间联线。
if((oldX!=0)&&(oldY!=0))
{
myGC.drawLine(oldX-xSpacing,oldY,xPoint,yPoint)
;
}
myGC.setColor(Color.blue);
//在数据点边上写出数据值。
StringcoordString=
Float.toString(((Float)v.elementAt(j)).floatValue(
));
myGC.drawString(coordString,xPoint+5,yPoint-4);
myGC.setColor(Color.red);
xPoint+=xSpacing;
oldX=xPoint;
oldY=yPoint;
}
}

  2.Plot类

  Plot类机关次要基于以下几点思索。

  (1)派生于Applet

  一个Java小程序有且只要一个类派生于Applet,这就仿佛在MFC中,必需有且只
有一个类派生于CWinApp一样。别的,与MFC程序纷歧样的是,不论包括派生于Appl
et类的源程叙文件(.java)定名为何,天生的供网页利用的字节码文件(.class
)只与该派生类同名,而与源文件名有关,这一点简单引发搅浑。打个例如,假如包
含Plot类的文件为PlotTest.java,而编译天生的字节码文件名为Plot.class,而不
是PlotTest.class。最初,Plot必需声明为public,这是因为一个编纂单位必需有
且只要一个类声明为public。

publicclassPlotextendsApplet
{
......
}

  (2)用户界面

  今朝,Java在java.awt中供应小程序的用户界面所必要的接口和类(共42个类
和2个接口),个中完成了我们在Windows中见到的各类用户界面,好比,菜单、对话
框,和各类控件,如按钮、列表框、复选框、单选框、编纂框、组合框等。鉴于
本程序请求从3组数据当选择一组举行绘制,必要选用单选框控件。单选框在java
.awt顶用Checkbox和CheckboxGroup两个类团结完成:当Checkbox独自利用时,它是
复选框;而把它增加到CheckboxGroup中则酿成了单选框。

publicvoidinit()
{
......
cbg=newCheckboxGroup();
//单选按钮。
cb1=newCheckbox("数据1",cbg,false);
cb2=newCheckbox("数据2",cbg,false);
cb3=newCheckbox("数据3",cbg,false);
}

  (3)结构办理器

  在Java中,为了使得小程序在各类操纵体系中的用户界面具有分歧的表面,采
用结构办理器(LayoutManager)对用户界面的绝对地位举行办理。Java在java.a
wt包中包括了流结构办理器(FlowLayout)、界限结构办理器(BorderLayout)、卡
片结构办理器(CardLayout)、网格结构办理器(GridLayout)和网格包结构办理器
(GridBagLayout)5个结构办理器。假如但愿3个单选框按钮放在绘制图形的上面
按一行分列,该怎样编写代码呢?能够如许来完成:起首设置Plot小程序为界限结构
,然后为3个单选框按钮创立一个Panel对象cbPanel,用于构造3个控件,并设置cbP
anel为网格结构,最初将cbPanel增加到Plot类中,并设置其偏向为南(South)。

publicvoidinit()
{
......
//设置Plot为界限结构。
setLayout(newBorderLayout());
//为3个控件请求面板对象cbPanel。
cbPanel=newPanel();
//设置网格结构办理器,并按1×3体例分列。
cbPanel.setLayout(newGridLayout(1,3));
//为各按钮请求1个面板。
cb1Panel=newPanel();
cb1Panel.add(cb1);
cb2Panel=newPanel();
cb2Panel.add(cb2);
cb3Panel=newPanel();
cb3Panel.add(cb3);
//增加到一致的1个面板cbPanel中。
cbPanel.add(cb1Panel);
cbPanel.add(cb2Panel);
cbPanel.add(cb3Panel);
//增加cbPanel到Plot中,偏向为:图形在北,按钮在南。
add("South",cbPanel);
}

  (4)读取HTML参数

  由于本程序要用到统计数据和统计题目作为小程序的参数寄存在HTML文档中
,以是在入手下手绘制图形之前,必要从HTML读取这些参数,然后才入手下手显现题目和绘制
统计曲线。个中,读取统计题目和统计数据分离完成。

  ①统计题目,其格局能够是:
    <paramvalue="1-DESC"value="每个月会见者统计">
  1-DESC暗示第一组数据的统计题目,"每个月会见者统计"是题目内容。

publicStringreadStringData(Strings)
{
StringtempString=null;
Integerparam;
booleandatapresent=true;
inti=0;
try
{
tempString=getParameter(s+"-DESC");
}catch(Exceptione)
{
System.out.println(e);
}
returntempString;
}

  ②统计数据,格局能够是:
    <paramvalue="1-2"value="14">
  1-2暗示第一组数据的第二个数据点,14暗示该数据点的值。

publicVectorreadData(Strings)
{
VectortempVector=newVector();
Floatparam;
StringtempData=null;
booleandatapresent=true;
inti=0;
while(datapresent)
{
try{
tempData=getParameter(s+"-"+(i+1));
}
catch(Exceptione)
{
System.out.println(e);
}
if(tempData==null)
{
datapresent=false;
}else{
param=Float.valueOf(tempData);
tempVector.addElement(param);
i+=1;
}
}
returntempVector;
}

  (5)动静轮回

依据Windows编程履历,有效户界面就有动静轮回,以构造动静处置函数句柄对用户
界面收回的动静举行呼应。遗憾的是,在JDK1.0中,尚没有相似MFC中的动静映照
表之类的工具构造动静轮回。不外,Java开展势头迅猛,不久的未来就会有公司将
它完成!如今,我们必要本人来构造它:Applet类有一个action办法,在个中能够通
过if...then语句来对分歧的动静举行呼应。

publicbooleanaction(Evente,Objecto)
{
VectoractionVector=newVector();
StringactionString=newString();
if(e.targetinstanceofCheckbox)
{
//"数据1"收回的动静
if(cbg.getCurrent()==cb1)
{
actionVector=readData("1");
actionString=readStringData("1");
System.out.println("1");
}
//数据2收回的动静
if(cbg.getCurrent()==cb2)
{
actionVector=readData("2");
actionString=readStringData("2");
}
//数据3收回的动静
if(cbg.getCurrent()==cb3)
{
actionVector=readData("3");
actionString=readStringData("3");
}
intcount=actionVector.size();
c.clearHashMarks();
c.clearScreen();
c.drawAxes(curveWidth,curveHeight);
c.makeHashMarks(count);
c.showData(actionVector);
c.makeTitle(actionString);
repaint();
returntrue;
}
returnfalse;
}

  3.HTML文档和程序演示

  上面列出了一个HTML实例,用于察看上述体例的小程序,了局拜见附图。

<html><body><center>
<appletcode="Plot.class"width=350height=200>
<paramname="1-DESC"value="每个月会见者统计">
<paramname="1-1"value="10">
<paramname="1-2"value="4">
<paramname="1-3"value="17">
<paramname="1-4"value="24">
<paramname="1-5"value="9">
<paramname="1-6"value="7">
<paramname="1-7"value="30">
<paramname="2-DESC"value="每一年会见者统计">
<paramname="2-1"value="17">
<paramname="2-2"value="13">
<paramname="3-DESC"value="一次购置税统计">
<paramname="3-1"value="10000">
<paramname="3-2"value="130000">
<paramname="3-3"value="16100">
<paramname="3-4"value="14000">
</applet></center></body>
<address><IMGSRC="imageLiZhenwen.jpg">
LiZhenwen,Zhenwen@Websoft.com
</address></html>
用winrar打包j2ee的程序和用IDE打包应用程序是一样的。按照你的想法,你是不是也希望服务器都整合由一家公司提供呢?
作者: 兰色精灵    时间: 2015-1-21 06:09
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者: 金色的骷髅    时间: 2015-1-28 06:30
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者: 小女巫    时间: 2015-2-1 19:35
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者: 老尸    时间: 2015-2-7 14:01
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
作者: 海妖    时间: 2015-2-19 04:01
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者: 透明    时间: 2015-3-2 21:21
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 只想知道    时间: 2015-3-3 19:44
是一种语言,用以产生「小应用程序(Applet(s))
作者: 谁可相欹    时间: 2015-3-11 12:38
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者: 柔情似水    时间: 2015-3-18 11:23
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者: 再现理想    时间: 2015-3-25 18:38
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2