java双缓冲绘图_java双缓冲区绘图,显示曲线动态变化,applet

发布日期:11-06-07 01:54

import java.awt.*;

import java.applet.*;

import java.util.*;

import java.awt.Graphics;

import java.awt.event.*;

public class GraphApplet extends Applet implements Runnable,MouseListener {

private?int delay=20;

private intnWindowWidth=500;//平滑窗口大小

private int alpha=6;//控制显示的参数

private double beta=1.9;//控制斜率的参数

private double hold=10.0;//斜率阈值

private intnMax=40;//阈值,超过此阈值,开始修改斜率

private int nMin=-40;

private intbUp=0;//控制上升还是下降0正常1上升2下降

Thread thread;

private int[]nPosXY;//存放坐标信息的数组,数组下标为x值,相应单元存的为y值

private int nOffset=0;//偏移量

boolean bPause=false;//暂停标志

boolean bFirst=true;//第一次显示

private Image offImg;//声明备用屏幕类型

private Graphics offG;//声明备用屏幕绘图类型

static Random rand = new Random();

private int[] nRand = newint[nWindowWidth];//用于存放产生的随即数,以及平滑处理

public void init()??setBackground(Color.black);

addMouseListener(this);

try???offImg=createImage(getSize().width,getSize().height);//创建备用屏幕

offG=offImg.getGraphics();//获取备用屏幕绘图环境??catch(Exception e)???offG=null;

showStatus("备用屏幕初始化失败!");??//初始化坐标数组

nPosXY=newint[getSize().width];

for(intx=0;x

for(inti=0;i

nRand[i]=rand.nextInt()%(alpha*getSize().height);??nMax=getSize().height/2-nMax;

nMin=getSize().height/2-nMin;

}

public void start()??thread=newThread(this);//启动线程

thread.start();

nOffset=nPosXY.length;

}

public void stop()??thread=null;//停止线程

nPosXY=null;

nRand=null;

removeMouseListener(this);//删除鼠标监听

}

public void run()??Threadcurrent=Thread.currentThread();

while(thread==current)???try????Thread.currentThread().sleep(delay);???catch(InterruptedExceptione)???}

repaint();

if(!bPause)????if(nOffset>=nPosXY.length)?????for(inti=0;i

nOffset++;???}?}

double smooth()??int sum=0;

for(inti=0;i

nRand[i]=nRand[i+1];

if(bUp==0)

sum=rand.nextInt()%(alpha*getSize().height);

else if(bUp==1)

sum=(rand.nextInt()+(int)hold)%(alpha*getSize().height);

else if(bUp==2)

sum=(rand.nextInt()-(int)hold)%(alpha*getSize().height);

nRand[nRand.length-1]=sum;

for(inti=0;i

sum+=nRand[i];

sum/=nWindowWidth;

return-sum+getSize().height/2;

}

double f(double x)??double temp=0.0;

temp=smooth();

hold(temp);

if(temp<=0||temp>=getSize().height)

bPause=true;

return temp;

}

void hold(double x)??if(x==nMax&&bUp==0)

for(inti=0;i

bUp=1;??elseif(x==nMin&&bUp==0)

for(inti=0;i

bUp=2;??else if(bUp==1)

for(inti=0;i

nRand[i]+=hold;

else if(bUp==2)

for(inti=0;i

nRand[i]-=hold;

//??hold*=beta;

//??hold*=1.2;//?return bUp;

}

publicvoid paint(Graphics g)//??hold();//控制斜率

if(bFirst)???offG.clearRect(0,0,getSize().width,getSize().height);

offG.setColor(Color.red);

offG.drawLine(0,nMax-10,getSize().width,nMax-10);

offG.drawLine(0,nMin+10,getSize().width,nMin+10);

offG.setColor(Color.green);

for(inti=0;i

if(offG!=null)

g.drawImage(offImg,0,0,this);???bFirst=false;??else???g.clearRect(0,0,getSize().width,getSize().height);

offG.setColor(Color.red);

offG.drawLine(0,nMax-10,getSize().width,nMax-10);

offG.drawLine(0,nMin+10,getSize().width,nMin+10);

g.setColor(Color.green);

for(inti=0;i

g.drawLine(i,nPosXY[i],i+1,nPosXY[i+1]);??? }

public void update(Graphics g)??if(offG!=null)???paint(offG);//将备用屏幕上的图像画到当前屏幕

g.drawImage(offImg,0,0,this);??else

paint(g);

}

public void mouseEntered(MouseEvent e)??bPause=true;//设置暂停

}

public void mouseExited(MouseEvent e)??bPause=false;//取消暂停

}

public void mouseReleased(MouseEvent e)?}

public void mousePressed(MouseEvent e)?}

public void mouseClicked(MouseEvent e)?}

public String getAppletInfo() {

return "测试绘图";}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值