我有一个例子,可以给你看看。
public void hisTogram(double sz[],double sz1[],double sz2[],double LeftPace,double MidPace,int type, Graphics g)
{
int i;
do
uble startP1,endP1=0,sPace;
XDLin = (int)(ctlwdth/(valuesSize+1)+0.5);
if(ParaCount==1)
{barwidth=(int)((ctlwdth/valuesSize-10)+0.5) ;
if(barwidth>20)barwidth=20;
if(barwidth<=0)barwidth=1;
}
if(ParaCount==2)
{barwidth=(int)((ctlwdth/valuesSize-10)/2+0.5) ;
if(barwidth>20)barwidth=20;
if(barwidth<=0)barwidth=1;
}
if(ParaCount==3)
{barwidth=(int)((ctlwdth/valuesSize-10)/3+0.5) ;
if(barwidth>20)barwidth=20;
if(barwidth<=0)barwidth=1;
}
if(ParaCount==1)
{
for(i=0;i<valuesSize;i++)
{
if(sz!=(-(Math.pow(10,15)-1)))
{
startP1=(int)(yLocal+0.0001)+XDLin*(i+1)-barwidth/2;
if (sz>0)
endP1=horLine-(sz-dataHLine)/ybc*yStep;
else
if (sz<0)
endP1=horLine;
sPace=Math.abs(sz-dataHLine)/ybc*yStep;
g.setColor(Color.blue);
g.fill3DRect ((int)(startP1+0.5),(int)(endP1+0.5),barwidth,(int)(sPace+0.5),true);
}
}
}
if(ParaCount==2)
{
g.setColor(Color.blue);
for(i=0;i<valuesSize;i++)
{
if(sz!=(-(Math.pow(10,15)-1)))
{
startP1=(int)(yLocal+0.0001)+XDLin*(i+1)-barwidth;
if (sz>0)
endP1=horLine-(sz-dataHLine)/ybc*yStep;
else
if (sz<0)
endP1=horLine;
sPace=Math.abs(sz-dataHLine)/ybc*yStep;
g.fill3DRect ((int)(startP1+0.5),(int)(endP1+0.5),barwidth,(int)(sPace+0.5),true);
}
}
g.setColor(Color.red);
for(i=0;i<valuesSize;i++)
{
if(sz1!=(-(Math.pow(10,15)-1)))
{
startP1=(int)(yLocal+0.0001)+XDLin*(i+1);
if (sz1>0)
endP1=horLine-(sz1-dataHLine)/ybc*yStep;
else
if (sz1<0)
endP1=horLine;
sPace=Math.abs(sz1-dataHLine)/ybc*yStep;
g.fill3DRect ((int)(startP1+0.5),(int)(endP1+0.5),barwidth,(int)(sPace+0.5),true);
}
}
}
if(ParaCount==3)
{
g.setColor(Color.blue);
for(i=0;i<valuesSize;i++)
{
if(sz!=(-(Math.pow(10,15)-1)))
{
startP1=(int)(yLocal+0.0001)+XDLin*(i+1)-barwidth*3/2;
if (sz>0)
endP1=horLine-(sz-dataHLine)/ybc*yStep;
else
if (sz<0)
endP1=horLine;
sPace=Math.abs(sz-dataHLine)/ybc*yStep;
g.fill3DRect ((int)(startP1+0.5),(int)(endP1+0.5),barwidth,(int)(sPace+0.5),true);
}
}
g.setColor(Color.red);
for(i=0;i<valuesSize;i++)
{
if(sz1!=(-(Math.pow(10,15)-1)))
{
startP1=(int)(yLocal+0.0001)+XDLin*(i+1)-barwidth/2;
if (sz1>0)
endP1=horLine-(sz1-dataHLine)/ybc*yStep;
else
if (sz1<0)
endP1=horLine;
sPace=Math.abs(sz1-dataHLine)/ybc*yStep;
g.fill3DRect ((int)(startP1+0.5),(int)(endP1+0.5),barwidth,(int)(sPace+0.5),true);
}
}
g.setColor(Color.yellow);
for(i=0;i<valuesSize;i++)
{
if(sz2!=(-(Math.pow(10,15)-1)))
{
startP1=(int)(yLocal+0.0001)+XDLin*(i+1)+barwidth/2;
if (sz2>0)
endP1=horLine-(sz2-dataHLine)/ybc*yStep;
else
if (sz2<0)
endP1=horLine;
sPace=Math.abs(sz2-dataHLine)/ybc*yStep;
g.fill3DRect ((int)(startP1+0.5),(int)(endP1+0.5),barwidth,(int)(sPace+0.5),true);
}
}
}
for(i=1;i<=valuesSize;i++)
{
g.setColor(Color.gray);
if (valuesSize>10 )
{if((i%2)==1)
{
g.drawLine((int)(yLocal+0.0001)+XDLin*i,(int)ctlhght,(int)(yLocal+0.0001)+XDLin*i,(int)ctlhght+5);
//X
g.drawString(titles[i-1],(int)(yLocal+0.0001)+XDLin*i-(int)(g.getFontMetrics().stringWidth(titles[i-1])/2),(int)ctlhght+15);
}
else
{
g.drawLine((int)(yLocal+0.0001)+XDLin*i,(int)ctlhght,(int)(yLocal+0.0001)+XDLin*i,(int)ctlhght+10);
//X
g.drawString(titles[i-1],(int)(yLocal+0.0001)+XDLin*i-(int)(g.getFontMetrics().stringWidth(titles[i-1])/2),(int)ctlhght+25);
}
}
else
{
g.drawLine((int)(yLocal+0.0001)+XDLin*i,(int)ctlhght,(int)(yLocal+0.0001)+XDLin*i,(int)ctlhght+5);
//X
g.drawString(titles[i-1],(int)(yLocal+0.0001)+XDLin*i-(int)(g.getFontMetrics().stringWidth(titles[i-1])/2),(int)ctlhght+20);
}
}
}