📄 graph.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class graph extends Applet {
String strParameter;
int cols;
int items;
double data[][];
double dataMax;
double dataMin;
double dataAbs;
final Color cb=new Color(0,0,100);
final Color cf=Color.yellow;
int w;//apple宽
int h;//apple高
int y0;//原点
int x0;//原点
int lenw;//横坐标长
int lenh;//纵坐标长
int sp;//余白
int spitem;//item间余白
int spcol;//col间余白
int hbarMax;//
int wbar;
Color citem[];
String itemname[];
String colname[];
Font font1;
Font font2;
Font font3;
Font font4;
String unit;
public void init() {
/////////定义颜色组/////////
citem=new Color[9];
citem[0]=new Color(107,163,246);
citem[1]=new Color(0,200,0);
citem[2]=new Color(230,0,0);
citem[3]=Color.pink;
citem[4]=Color.yellow;
citem[5]=Color.cyan;
citem[6]=Color.magenta;
citem[7]=Color.white;
font1=new Font("Times New Roman",1,18);//年度文字
font2=new Font("Times New Roman",1,12);//棒上文字
font3=new Font("Times New Roman",1,14);//图例文字
font4=new Font("Times New Roman",0,11);//小文字
/*
w=getSize().width;
h=getSize().height;
sp=w/20;
spitem=5;
spcol=20;
x0=sp;
y0=h-sp;
lenw=w-x0-sp;
lenh=y0-sp;
hbarMax=lenh*3/4;
*/
unit="";
////取得单位////////
strParameter=getParameter("unit");
if (strParameter!=null)
unit=strParameter;
else
unit="10,000 yuan";
////取得图形年度数/////
strParameter=getParameter("cols");
if (strParameter!=null)
cols=Integer.valueOf(strParameter).intValue();
else
cols=0;
////取得图形项目数////
strParameter=getParameter("items");
if (strParameter!=null)
items=Integer.valueOf(strParameter).intValue();
else
items=0;
if (items>0){
//////取得项目名////////
itemname=new String[items];
strParameter=getParameter("itemname");
for (int i=0;i<items;i++){
itemname[i]=getdata(strParameter);
strParameter=cutdata(strParameter);
}
System.out.println("ok");
//////取得年度名//////////
colname=new String[cols];
strParameter=getParameter("colname");
for (int i=0;i<cols;i++){
colname[i]=getdata(strParameter);
strParameter=cutdata(strParameter);
}
//wbar=(lenw-spcol*cols-spitem*cols*items)/cols/items;
/////取得图形数据////////
strParameter=getParameter("data");
data=new double[items][cols];
dataMax=0;
dataMin=9999999;
for (int i=0;i<items;i++)
for (int j=0;j<cols;j++)
{
data[i][j]=Float.valueOf(getdata(strParameter)).floatValue();
if (data[i][j]>dataMax)
dataMax=data[i][j];
if (data[i][j]<dataMin)
dataMin=data[i][j];
strParameter=cutdata(strParameter);
}
if (dataMax==0)
dataMax=9999999;
dataAbs=dataMax;
if (dataMin<0)
if (dataMax+dataMin<0)
dataAbs=-dataMin;
}//end if items>0
}
public void paint(Graphics g){
setBackground(cb);
setForeground(cf);
if (items>0){
w=getSize().width;
h=getSize().height;
sp=w/20;
spitem=1;
spcol=10;
x0=sp;
if (dataMin>0)
y0=h-sp;
else
y0=(int)(h*dataMax/(dataMax-dataMin))-sp;
lenw=w-x0-sp;
lenh=y0-sp;
//hbarMax=y0-lenh*(items+2)/20-sp;
hbarMax=y0*(int)(dataAbs/dataMax)-lenh*(items+2)/20-sp;
if(items>1)
wbar=(lenw-spcol*cols-spitem*cols*items)/cols/items;
else
wbar=(lenw-spcol*cols-spitem*cols*items)/cols/items/2;
g.drawLine(x0,y0,x0+lenw,y0);
g.drawLine(x0,y0,x0,y0-lenh);
//////////图例////////////////
for (int i=0;i<items;i++){
g.setColor(citem[i]);
if (h<300)
g.setFont(font4);
else if (h>500)
g.setFont(font1);
else
g.setFont(font3);
g.fill3DRect(x0+lenw*3/5,sp+i*lenh/20,wbar,lenh/30,true);
g.draw3DRect(x0+lenw*3/5,sp+i*lenh/20,wbar,lenh/30,true);
g.setColor(cf);
g.drawString(itemname[i],x0+lenw*3/5+wbar+spitem,sp+i*lenh/20+lenh/30);
g.setFont(font2);
}
g.setColor(cf);
////////绘制棒图///////////////
for (int i=0;i<items;i++)
{
for (int j=0;j<cols;j++)
{
drawbar(i,j,data[i][j],citem[i],g);
}
}
/////////单位/////////////////
g.setFont(font2);
g.setColor(Color.yellow);
g.drawString("単位:"+unit,x0+3,sp);
/////////年度相关/////////////
for( int i=0;i<cols;i++){
g.drawLine(x0+i*(lenw/cols),y0,x0+i*(lenw/cols),y0+3);
g.setFont(font1);
g.drawString(colname[i],x0+spitem+i*(lenw/cols),y0+15);
g.setFont(font2);
}
g.drawString("0",x0-spitem-5,y0);
}//
else
{
g.drawString("No Items Selected",40,20);
}
}//end paint()
public String getdata(String stra){
return stra.substring(0,stra.indexOf("/"));
}
public String cutdata(String stra){
return stra.substring(stra.indexOf("/")+1);
}
public void drawbar(int item,int col,double bardata,Color cbar,Graphics g){
g.setColor(cbar);
if (bardata>0)
g.fill3DRect(x0+col*lenw/cols+item*(wbar+spitem)+spitem,y0-(int)(bardata*hbarMax/dataAbs)-2,wbar,(int)(bardata*hbarMax/dataAbs),true);
else
g.fill3DRect(x0+col*lenw/cols+item*(wbar+spitem)+spitem,y0,wbar,-(int)(bardata*hbarMax/dataAbs),true);
if (bardata>0)
g.draw3DRect(x0+col*lenw/cols+item*(wbar+spitem)+spitem,y0-(int)(bardata*hbarMax/dataAbs)-2,wbar,(int)(bardata*hbarMax/dataAbs),true);
else
g.draw3DRect(x0+col*lenw/cols+item*(wbar+spitem)+spitem,y0,wbar,-(int)(bardata*hbarMax/dataAbs),true);
if (bardata>0)
g.drawString(String.valueOf((int)bardata),x0+col*lenw/cols+item*(wbar+spitem)+spitem,y0-(int)(bardata*hbarMax/dataAbs)-10);
else
g.drawString(String.valueOf((int)bardata),x0+col*lenw/cols+item*(wbar+spitem)+spitem,y0-(int)(bardata*hbarMax/dataAbs)+10);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -