—- 附:stockapplet.java
import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.*;
public class stockapplet extends java.applet.applet implements runnable
{ //以下是公用变量的声明部分
int move_length=0,move_sum=0;
string filename,name_str,content_date;
int sp[]=new int[2000];
int kp[]=new int[2000];
int jd[]=new int[2000];
int jg[]=new int[2000];
int mid_worth[]=new int[2000];
string mydate[]=new string[2000];
double cjl[]=new double[2000];
double maxcjl,midcjl;
label label[]=new label[10];
int maxworth,minworth;
int x_move0,x_move1,maxlength=0;
int x0,y0,x,y,record_num;
boolean mouse_move,name_change=true;
int jx_five1,jx_five2,jx_ten1,jx_ten2;
public void init()
{
textfield text1=new textfield();
thread m_pointthread=null;
setlayout(null); //声明布局管理器
this.setbackground(color.white); //设置背景色
this.setforeground(color.black); //设定文字颜色
for(int i=1;i< 10;i++) //以下循环用于向布局中添加标签
{
label[i]=new label();
this.add(label[i]);
label[i].reshape(i*80-65,10,50,15);
if(i==2){label[i].reshape(80,10,70,15);}
if(i==7){label[i].reshape(510,10,80,15);}
if(i >7){label[i].reshape((i-8)*490+45,380,70,15);}
}
filename="000001"; //程序启动时的默认股票代码
name_str="上证指数";
this.add(text1); //向布局中添加文本框
text1.reshape(150,385,70,20);
text1.gettext(); //取得文本框中输入的内容
}
public void start()
{ //创建并启动多线程
if (m_pointthread==null)
{
m_pointthread=new thread(this);
m_pointthread.start();
}
}
public void run()
{ //运行多线程
graphics m_graphics;
m_graphics=getgraphics();
m_graphics.setxormode(color.white);
while(true) //绘制“十字”游标
{
try
{
if(mouse_move==true)
{
if(x0 >50 & x0< 600){m_graphics.drawline(x0,30,x0,380);}
if(y0 >30 & y0< 380){m_graphics.drawline(50,y0,600,y0);}
if(x >50 & x< 600){m_graphics.drawline(x,30,x,380);}
if(y >30 & y< 380){m_graphics.drawline(50,y,600,y);}
mouse_move=false;
x0=x;
y0=y;
}
}catch(nullpointerexception npe){}
}
}
public boolean action(event evt,object arg) //监测事件
{
filename=text1.gettext(); //取得新文件名
repaint();
//将各变量恢复初始状态
name_change=true;
move_length=0;
move_sum=0;
maxlength=0;
maxcjl=0;
return true;
}
public boolean keydown(event evt,int key) //检测键盘事件
{
if(key==10) //检测是否是回车键
{
event event=new event(text1,event.action_event,"text1");
deliverevent(event);
return true;
}
return false;
}
public boolean mousedown(event evt,int x_d,int y_d) //检测按下鼠标按键事件
{
x_move0=x_d; //记录鼠标当前的横座标
x0=x_d; //把当前座标传递给另一线程
y0=y_d;
return true;
}
public boolean mouseup(event evt,int x_up,int y_up) //检测释放鼠标按键事件
{
int screen=520; //定义在页面上的显示区域
x_move1=x_up; //记录鼠标当前的横座标
move_length=((int)(x_move1-x_move0)/10)*10; //计算鼠标移动距离
move_sum=move_sum+move_length;
if(move_sum< 0){move_sum=0;} //控制k线的拖动范围
if(move_sum >maxlength-screen){move_sum=maxlength-screen-10;}
x0=x_up; //把当前座标传递给另一线程
y0=y_up;
maxworth=jg[move_sum];
minworth=jd[move_sum];
maxcjl=cjl[move_sum];
//以下循环用于查找页面显示区域内的最高、最低值及成交量
for(int i=screen+move_sum;i >move_sum;i-=10)
{
if(maxworth< jg[i]){maxworth=jg[i];}
if(minworth >jd[i]){minworth=jd[i];}
if(maxcjl< cjl[i]){maxcjl=cjl[i];}
}
midcjl=maxcjl/2;
for(int i=1;i< 7;i++) //计算出在纵座标上显示的中间值
{
mid_worth[i]=minworth+(maxworth-minworth)/7*(7-i);
}
repaint();
return true;
}
public boolean mousemove(event evt,int x_m,int y_m) //检测鼠标移动事件
{
int axsis,mnumberr;
mouse_move=true;
axsis=560+move_sum-((int)(x_m/10))*10; //设定横座标范围
if(axsis >maxlength){axsis=maxlength;}
//在以下区域内,把鼠标当前横座标处的各种股票参数显示在相应的标签上
if(x_m >50&x_m< 600)
{
label[2].settext(mydate[axsis]);
label[3].settext(string.valueof((float)kp[axsis]/100));
label[4].settext(string.valueof((float)jg[axsis]/100));
label[5].settext(string.valueof((float)jd[axsis]/100));
label[6].settext(string.valueof((float)sp[axsis]/100));
label[7].settext(string.valueof((int)cjl[axsis]));
label[8].settext(mydate[510+move_sum]);
mnumberr=move_sum;
if(move_sum >30){mnumberr=move_sum-30;}
label[9].settext(mydate[mnumberr]);
x=x_m; //把当前座标传递给另一线程
y=y_m;
}
return true;
}
public void stop() //当页面关闭或转向其他页面时,释放系统资源
{
if (m_pointthread!=null)
{
m_pointthread.stop();
m_pointthread=null;
}
}
public void paint(graphics g) //绘图方法
{
if(name_change==true) //若改变了查询股票的代码
{
readdata(); //则重新读取数据
name_change=false;
}
paintframe(g); //调用绘制页面区域方法
paintdata(g); //调用绘制k线数据方法
x0=-1;
y0=-1;
}
private void paintframe(graphics g) //绘制页面区域方法
{
int nwidth =600;
int nheight=260;
g.setcolor(color.white);
g.fillrect(0,0,600,420);
g.setcolor(color.black);
g.fillrect(50,30,550,350);
g.setcolor(color.white);
g.drawline(50,nheight,nwidth,nheight); //画出上下两区域间的分隔线
g.setcolor(color.black); //设置字体颜色
for(int i=1;i< 7;i++) //绘出纵座标中间数值
{
g.drawstring(string.valueof((float)mid_worth[i]/100),10,55+i*30);
}
g.drawstring(string.valueof((int)maxcjl),2,270);
g.drawstring(string.valueof((int)midcjl),8,325);
g.drawstring("0",40,380);
}
public void paintdata(graphics g) //绘制k线数据方法
{
int sppoint[]=new int[2000];
int kppoint[]=new int[2000];
int jgpoint[]=new int[2000];
int jdpoint[]=new int[2000];
double cjlpoint[]=new double[2000];
int left_start=40,redraw=250; //设置绘图左边界及参数
int i=0;
int jxtemp1=0,jxtemp2=0;
//以下语句在布局区域内绘出固定信息
g.setcolor(color.red);
g.drawstring("牡丹江",5,45);
g.drawstring("信息港",5,60);
g.setcolor(color.black);
g.drawstring("开盘",150,20);
g.drawstring("最高",230,20);
g.drawstring("最低",310,20);
g.drawstring("收盘",390,20);
g.drawstring("成交量",470,20);
g.drawstring("要查询其他股票,请输入股票代码,然后回车。",230,400);
for(int n=maxlength;n >=0;n-=10) //该循环用于在绘图区域内作图
{ //计算股票各参数在绘图区域内要显示的相对值
kppoint[n]=((kp[n]-minworth)*200/(maxworth-minworth));
sppoint[n]=((sp[n]-minworth)*200/(maxworth-minworth));
jgpoint[n]=((jg[n]-minworth)*200/(maxworth-minworth));
jdpoint[n]=((jd[n]-minworth)*200/(maxworth-minworth));
cjlpoint[n]=(cjl[n]*120/maxcjl);
for(int num=0;num< 5;num++) //计算五日均线
{
jxtemp1=jxtemp1+(sppoint[n+(num+1)*10]);
jxtemp2=jxtemp2+(sppoint[n+num*10]);
}
jx_five1=jxtemp1/5;
jx_five2=jxtemp2/5;
jxtemp1=0;
jxtemp2=0;
for(int num=0;num< 10;num++) //计算十日均线
{
jxtemp1=jxtemp1+(sppoint[n+(num+1)*10]);
jxtemp2=jxtemp2+(sppoint[n+num*10]);
}
jx_ten1=jxtemp1/10;
jx_ten2=jxtemp2/10;
jxtemp1=0;
jxtemp2=0;
if(n< 520+move_sum) //若位于显示区域内,则绘制k线
{
i=i+10; //横座标按10象素递增
g.setcolor(color.white);
g.drawline(i+left_start,220-jx_five1,i+left_start+10,220-jx_five2);
g.setcolor(color.yellow);
g.drawline(i+left_start,220-jx_ten1,i+left_start+10,220-jx_ten2);
if(kp[n]< =sp[n]) //如果开盘价小于收盘价,则绘制阳线
{ //绘制空心矩形
g.setcolor(color.red);
g.drawrect(i+left_start,redraw-sppoint[n],8,(sppoint[n]-kppoint[n]));
//绘制最高、最低价
if(sppoint[n]==kppoint[n]){g.drawrect(i+left_start,redraw-sppoint[n],8,1);}
if(jgpoint[n] >sppoint[n]){g.drawline(i+left_start+4,redraw-sppoint[n], i+left_start+4,redraw-jgpoint[n]);}
if(jdpoint[n]< kppoint[n]){g.drawline(i+left_start+4,redraw-jdpoint[n], i+left_start+4,redraw-kppoint[n]);}
//在下方对应位置绘制成交量实心矩形
g.fillrect(i+left_start,380-(int)cjlpoint[n],8,(int)cjlpoint[n]);
}
else //如果开盘价大于收盘价,则绘制阴线
{ //绘制实心矩形
g.setcolor(color.green);
g.fillrect(i+left_start,redraw-kppoint[n],8,(kppoint[n])-sppoint[n]);
//绘制最高、最低价
g.drawline(i+left_start+4,redraw-kppoint[n],i+left_start+4,redraw-jgpoint[n]);
g.drawline(i+left_start+4,redraw-sppoint[n],i+left_start+4,redraw-jdpoint[n]);
//在下方对应位置绘制成交量实心矩形
g.fillrect(i+left_start,380-(int)cjlpoint[n],8,(int)cjlpoint[n]);
}
if(i >540){n=0;} //如果显示区域已全部绘制完毕,则退出循环
}
}
}
public void readdata() //读取股票数据的方法
{
int piont=1,piont_num;
integer tempinteger;
float tempfloat , content_cjl;
float content_num[]=new float[5];
int count_number[]=new int[10];
string content;
try
{ //定位文件的url地址
url urlc=new url("http://127.0.0.1/temp/"+filename+".txt");
//打开数据流
bufferedreader bis=new bufferedreader(new inputstreamreader(urlc.openstream()));
name_str=bis.readline(); //读取股票的汉字名称
label[1].settext(name_str); //在相应标签内显示
while((content=bis.readline())!=null) //按行读取整个文本文件内容
{
piont_num=content.indexof( ,piont); //查找空格位置
content_date=content.substring(1,piont_num); //取出日期字符串
mydate[maxlength]=content_date;
piont=piont_num+1;
for(int i=1;i< 5;i++) //从读入的一行中分离出对应数值
{
piont_num=content.indexof( ,piont);
content_num[i]=new float(content.substring(piont,piont_num));
piont=piont_num+1;
}
kp[maxlength]=(int)(content_num[1].floatvalue()*100);
jg[maxlength]=(int)(content_num[2].floatvalue()*100);
jd[maxlength]=(int)(content_num[3].floatvalue()*100);
sp[maxlength]=(int)(content_num[4].floatvalue()*100);
//最后取出成交量的数值
content_cjl=new float(content.substring(piont,content.length()-1));
cjl[maxlength]=(int)content_cjl.floatvalue();
piont=1;
piont_num=0;
maxlength=maxlength+10; //读取下一行(记录数以10为单位递增)
}
maxworth=jg[move_sum];
minworth=jd[move_sum];
maxcjl=cjl[move_sum];
//找出在页面布局内的最高、最低值及最大成交量
for(record_num=540+move_sum;record_num >move_sum;record_num-=10)
{
if(maxworth< jg[record_num]){maxworth=jg[record_num];}
if(minworth >jd[record_num]){minworth=jd[record_num];}
if(maxcjl< cjl[record_num]){maxcjl=cjl[record_num];}
}
midcjl=maxcjl/2;
for(int i=1;i< 7;i++) //计算中间值
{
mid_worth[i]=minworth+(maxworth-minworth)/7*(7-i);
}
bis.close(); //关闭数据流
repaint();
}catch(nullpointerexception npe){ //捕捉可能出现的异常
}catch(ioexception e){}
}
}
__________________________
我用javac stockapplet.java编译出来8个错误,想想也是,没人把完全正确的程序帖出来的,靠这个吃饭的,总要保留一点。