在試XML-RPC(這回畫(huà)個(gè)圖吧)
系統(tǒng)
2197 0
上次那個(gè)“小試”實(shí)在太不過(guò)癮,這次我們從服務(wù)器上定時(shí)取出數(shù)據(jù),然后用javascript在瀏覽器上畫(huà)個(gè)圖。
這回我就不具體解釋了,就貼一下程序啦!!
先來(lái)個(gè)圖吧:
?用javascript畫(huà)圖,當(dāng)然不能空手畫(huà)了,找個(gè)庫(kù)吧。wz_jsgraphics,詳細(xì)資料看這里(
http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm#download
)很酷的一個(gè)javascript圖形庫(kù),當(dāng)然除了畫(huà)圖還有別的,不妨試試(我一年前發(fā)現(xiàn)的這東東,現(xiàn)實(shí)才第一次用
)用起來(lái)跟用c畫(huà)圖差不多。
?首先當(dāng)然還是建個(gè)服務(wù)的類:
public
?
class
?DataService?
{
????
public
?
double
?getData()
{
????????Random?r?
=
?
new
?Random();
????????
return
?
20
+
(
10
*
r.nextDouble()
-
5
);
????}
????
????
public
?
static
?
void
?main(String[]?args)
{
????????DataService?ds?
=
?
new
?DataService();
????????
for
(
int
?i
=
0
;i
<
20
;i
++
)
{
????????????System.
out
.println(ds.getData());
????????}
????}
}
Servlet上篇文章里有,我這里就不寫(xiě)了。
然后是一個(gè)html頁(yè)面。
<
html
>
<
head
>
<
title
>
XML-RPC
</
title
>
<
script?
type
="text/javascript"
?src
="./js/init.js"
></
script
>
<
script?
type
="text/javascript"
?src
="./js/lib/urllib.js"
></
script
>
<
script?
type
="text/javascript"
?src
="./js/lib/xml.js"
></
script
>
<
script?
type
="text/javascript"
?src
="./js/lib/xmlrpc.js"
></
script
>
<
script?
type
="text/javascript"
?src
="./js/hello.js"
></
script
>
<
script?
type
="text/javascript"
?src
="./js/wz_jsgraphics.js"
></
script
>
</
head
>
<
body?
onload
="init()"
>
<
input?
type
="button"
?id
="do3"
?value
="start"
?onclick
="startTimer()"
/>
<
input?
type
="button"
?id
="do3"
?value
="stop"
?onclick
="stopTimer()"
/>
<
input?
type
="text"
?id
="result"
?
/>
<
div?
id
="canvas"
?style
="border:1px?solid?#6666FF;?position:relative;height:300px;width:500;?background-color:#CCCCCC"
></
div
>
<
textarea?
id
="debug"
?rows
="10"
?name
="S1"
?cols
="69"
></
textarea
>
</
body
>
</
html
>
重點(diǎn)是這個(gè)div,我們用wz_jsgraphics畫(huà)圖就是往這上面畫(huà),他的作用相當(dāng)于很多畫(huà)圖系統(tǒng)的canvas.其實(shí)主要是提供參考坐標(biāo)。
然后就是重點(diǎn)了hello.js(懶得該名字了)
var
?timerid;
var
?dataservice;
var
?g;
var
?xPoints?
=
?
new
?Array();
var
?y1Points?
=
?
new
?Array();
var
?y2Points?
=
?
new
?Array();
var
?length
=
0
;
startTimer?
=
?
function
(){
????init();
????
if
(timerid
==
null
){
????????timerid?
=
?window.setInterval(
"
doTask()
"
,
800
);?
????}
}
stopTimer?
=
?
function
(){
????window.clearInterval(timerid);
????timerid
=
null
;
}
function
?init(){
????
var
?xmlrpc
=
null
;
????
try
{
????????xmlrpc?
=
?importModule(
"
xmlrpc
"
);
????}
catch
(e){
????????reportException(e);
????????
throw
?
"
importing?of?xmlrpc?module?failed.
"
;
????}
????
????
var
?addr?
=
?
"
http://localhost:8080/Rpc/RpcServer
"
;
????
var
?methods?
=
?[
"
DataService.getData
"
];
????
????
try
{
????????dataservice?
=
?
new
?xmlrpc.ServiceProxy(addr,?methods);
????}
catch
(e){
????????
var
?em;
????????
if
(e.toTraceString){
????????????em?
=
?e.toTraceString();
????????}
else
{
????????????em?
=
?e.message;
????????}
????????alert(
"
Error?trace:?\n\n
"
?
+
?em);
????}
????g?
=
?
new
?jsGraphics(
"
canvas
"
);
????????????
}
function
?doTask(){
????
var
?rslt?
=
?dataservice.DataService.getData();
????document.getElementById(
"
result
"
).value
=
rslt;
????
var
?y1?
=
?
145
*
rslt
/
20
;
????
var
?rslt?
=
?dataservice.DataService.getData();
????
var
?y2?
=
?
145
*
rslt
/
20
;
????
if
(length
<
44
){
????????y1Points[length]
=
y1;
????????y2Points[length]
=
y2;
????????
for
(
var
?i
=
0
;i
<
y1Points.length;i
++
){
????????????xPoints[i]?
=
?
30
+
10
*
i;
????????}
????????length
++
;
????}?
else
?{
????????
for
(
var
?i
=
0
;i
<
y1Points.length
-
1
;i
++
){
????????????y1Points[i]?
=
?y1Points[i
+
1
];
????????????y2Points[i]?
=
?y2Points[i
+
1
];
????????}
????????y1Points[length]
=
y1;
????????y2Points[length]
=
y2;
????}
????g.clear();
????drawbg();
????drawline();
????debug();
}
function
?drawline(){
????g.setStroke(
2
);
????
for
(
var
?i
=
1
;i
<=
y1Points.length;i
++
){
????????g.setColor(
"
yellow
"
);
????????g.drawLine(xPoints[i
-
1
],y1Points[i
-
1
],xPoints[i],y1Points[i])
????????g.setColor(
"
red
"
);
????????g.drawLine(xPoints[i
-
1
],y2Points[i
-
1
],xPoints[i],y2Points[i])
????}
????
//
g.drawPolyline(xPoints,yPoints);
????g.paint();
}
function
?drawbg(){
????g.setStroke(
2
);
????g.setColor(
"
maroon
"
);
????g.drawLine(
30
,
270
,
470
,
270
);
//
x軸
????g.drawLine(
30
,
270
,
30
,
10
);
//
y軸
????g.drawLine(
30
,
10
,
26
,
14
);
//
x軸箭頭
????g.drawLine(
30
,
10
,
34
,
14
);
????g.drawLine(
470
,
270
,
466
,
266
);
//
y軸箭頭
????g.drawLine(
470
,
270
,
466
,
274
);
????
????g.setColor(
"
#000000
"
);
//
畫(huà)刻度
????
var
?x?
=
?
30
;
????
for
(
var
?y?
=
?
270
;y?
>=
?
20
;y?
=
?y?
-
?
50
?){
????????g.drawLine(x
-
1
,y,x
+
1
,y);
????}
????g.setStroke(
1
);
????g.drawLine(
30
,
145
,
470
,
145
);
//
中心線
????
????g.drawString(
"
0
"
,
23
,
271
);
????g.drawString(
"
Time
"
,
430
,
271
);
????g.paint();
}
function
?debug(){
????
var
?debug?
=
?
""
;
????
for
(
var
?i
=
0
;i
<
xPoints.length;i
++
){
????????debug?
+=
?
"
x:
"
+
i
+
"
?
"
+
xPoints[i]
+
"
?y1:
"
+
i
+
"
?
"
+
y1Points[i]
+
"
?y2:
"
+
i
+
"
?
"
+
y2Points[i]
+
"
\n
"
;
????}
????document.getElementById(
"
debug
"
).value
=
debug;
}
其實(shí)沒(méi)什么復(fù)雜的,不過(guò)就是javascript調(diào)試起來(lái)太費(fèi)事了。錯(cuò)又不知道錯(cuò)在哪里。還是喜歡java,調(diào)試起來(lái)容易多了!
其中一些算法我做的也不太好,有很多需要改進(jìn)的地方。主要就是如何把從其服務(wù)器得到的元數(shù)據(jù)轉(zhuǎn)換成畫(huà)圖用的數(shù)據(jù)(兩個(gè)數(shù)組,存放二維坐標(biāo)集)。
我畫(huà)了兩條線,一條線太單薄了,呵呵。兩條線用的x軸坐標(biāo)相同(其實(shí)是時(shí)間),所以就用一個(gè)數(shù)組了。
在試XML-RPC(這回畫(huà)個(gè)圖吧)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元