【Java开源代码栏目提醒】:以下是网学会员为您推荐的Java开源代码-CakeChart.java,希望本篇文章对您学习有所帮助。
/*
* CakeChart.java
*
* Created on 2007骞?鏈?2鏃? 涓嬪崍5:29
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package com.sample;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.geom.Arc2D;
import java.awt.geom.Rectangle2D;
import java.util.Date;
/**
*
* @author hyl
*/
public class CakeChart extends java.applet.Applet {
//鍒濆鏁版嵁
private double data[]={311.,650,713.,427.};
private String percent[]=new String[data.length]; //姣忎釜鏁版嵁鎵鍗犵櫨鍒嗘瘮
private int radian[]=new int[data.length]; //姣忎釜鏁版嵁鎵瀵瑰簲鐨勫姬搴︽暟
private double max,min;
//鍒濆鍖栨瘡鍧楅ゼ鐨勯鑹?
private int dia=240;//璁剧疆楗煎浘閫忔槑搴?
private Color c1=new Color(0,255,0,dia);
private Color c2=new Color(255,255,0,dia);
private Color c3=new Color(255,0,0,dia);
private Color c4=new Color(255,128,64,dia);
private Color colors[]={c1,c2,c3,c4};
//缁熻鍥剧殑瀹藉害鍜岄珮搴?
private int width=600;
private int height=400;
//瀹氫箟鏍囬璧峰鍧愭爣鍙橀噺
private int titleStart_x;
private int titleStart_y;
//瀹氫箟鍦嗗績鍧愭爣
private int oval_x=60;
private int oval_y=90;
//瀹氫箟妞渾鐨勯暱杞村拰鐭酱
private int long_axes=280;
private int short_axes=200;
//瀹氫箟鍥句緥鍖哄煙璧风偣鍧愭爣
private int cutlineRect_x=70;
private int cutlineRect_y=450;
//瀹氫箟鍥惧掑尯鍩熺煩褰㈢殑瀹藉害鍜岄珮搴?
private int cutlineRect_width=120;
private int cutlineRect_heigth=180;
//瀹氫箟鏃ユ湡鍙橀噺
private Date date=new Date();
//瀹氫箟缁熻鍥惧叾浠栨樉绀轰俊鎭殑瓒呭鍧愭爣
private int drawDateInfo_x;
private int drawDateInfo_y;
//瀹氫箟鏍囬\X\Y杞翠俊鎭?
private String title="姘存灉閿閲忕粺璁?(楗煎舰缁熻鍥? ";
private String drawDateInfo="缁樺浘鏃ユ湡锛?;
//鍙岀紦鍐茶缃?
private Image offScreenImage =null;
private Graphics offScreenBuffer =null;
public CakeChart() {
}
public void init() {
offScreenImage=this.createImage(width,height);
offScreenBuffer=offScreenImage.getGraphics();
NumberBudget();
CoorBudget();
}
public void NumberBudget() {
//姹傛暟鎹腑鐨勬渶澶у煎拰鏈灏忓?
max=data[0];
min=data[0];
for(int mm=0;mm<data.length;mm++) {
if(data[mm]>max)
max=data[mm];
if(data[mm]<min)
min=data[mm];
}
//瀵规暟鎹繘琛屾眰鍜岃繍绠?
float allData_sum=0;
for(int s=0;s<data.length;s++) {
allData_sum+=data[s];
}
//璁$畻姣忎釜鏁版嵁鍗犳绘暟鐨勭櫨鍒嗘瘮
for(int p=0;p<data.length;p++) {
percent[p]=String.valueOf(Math.round(data[p]/allData_sum*100))+"%";
}
//璁$畻姣忎釜鏁版嵁鎵瀵瑰簲鐨勫姬搴︽暟
for(int r=0;r<data.length;r++) {
radian[r]=Math.round((float)data[r]/allData_sum*360);
}
}
public void CoorBudget() {
//棰勭畻鏍囬淇℃伅鐨勮捣濮嬪潗鏍?
titleStart_x=22;
titleStart_y=(width/2)-(title.length()*15/2);
//鍒濆鍖栫粺璁″浘鍏朵粬鏄剧ず淇℃伅鐨勮捣濮嬪潗鏍?浣嶇疆鍥哄畾)
drawDateInfo_x=390;
drawDateInfo_y=5;
}
public void update(Graphics g) {
paint(g);
}
public void paint(Graphics g) {
PaintBackground(offScreenBuffer);
PaintChart(offScreenBuffer);
g.drawImage(offScreenImage,0,0,this);
}
public void PaintBackground(Graphics g) {
//娓愬彉鑳屾櫙鍒濆棰滆壊
Color BackStartColor=Color.white;
Color BackLastColor=new Color(162,189,230);
Color titleColor=Color.black;
Color otherInfoColor=new Color(41,78,118);
//鏍囬鑳屾櫙棰滆壊
Color titleBackColor=new Color(147,179,225);
//缁熻鍥句腑蹇冨尯鍩熼鑹?
Color cutlineColor=new Color(0,128,255,50);
//鍥句緥鏁版嵁棰滆壊
Color cutDataColor=Color.white;
Font titleFont=new Font("榛戜綋",Font.BOLD,18);
Font otherFont=new Font("瀹嬩綋",Font.PLAIN,12);
String year="";
String month="";
String day="";
Graphics2D g2=(Graphics2D)g;
RenderingHints hints = new RenderingHints(null);
hints.put(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHints(hints);
GradientPaint gradient=new GradientPaint(0,0,BackStartColor,0,400,BackLastColor,false);
g2.setPaint(gradient);
Rectangle2D rect=new Rectangle2D.Double(0,0,width,height);
g2.fill(rect);
//缁樺埗鏍囬鑳屾櫙
g2.setColor(titleBackColor);
g2.fill3DRect(0,0,width,30,true);
//缁樺埗鍥句緥鍖哄煙鑳屾櫙
g2.setColor(cutlineColor);
g2.fillRect(cutlineRect_y,cutlineRect_x,cutlineRect_width,cutlineRect_heigth);
g2.setColor(Color.white);
g2.drawRect(cutlineRect_y,cutlineRect_x,cutlineRect_width,cutlineRect_heigth);
//缁樺埗缁熻鍥炬爣棰?
g2.setFont(titleFont);
g2.setColor(titleColor);
g2.drawString(title,titleStart_y,titleStart_x);
//鏄剧ず缁熻鍥惧叾瀹冧俊鎭?
g2.setFont(otherFont);
g2.setColor(otherInfoColor);
g2.drawString(drawDateInfo,drawDateInfo_y,drawDateInfo_x);
//鏄剧ず缁樺埗鏃ユ湡
year=Integer.toString(1900+date.getYear());
month=Integer.toString(date.getMonth()+1);
day=Integer.toString(date.getDate());
g2.drawString(year+"骞?+month+"鏈?+day+"鏃?,drawDateInfo_y+60,drawDateInfo_x);
//鏄剧ず鏁版嵁鐧惧垎姣?
int colorRectWH=15;
int space=5; //鍥句緥涓皬鑹插潡涔嬮棿鐨勯棿闅旇窛绂?
int addData=cutlineRect_x;
for(int i=0;i<data.length;i++) {
g2.setColor(colors[i]);
g2.fill3DRect(cutlineRect_y,addData,colorRectWH,colorRectWH,true);
if(data[i]==max || data[i]==min)
g2.setColor(Color.red);
else
g2.setColor(cutDataColor);
int temp=i+1;
g2.drawString(String.valueOf(data[i])+" ("+temp+"瀛e害)",cutlineRect_y+20,addData+colorRectWH-space);
addData+=colorRectWH+space;
}
}
public void PaintChart(Graphics g) {
int start=0;
int rVal=192;
int gVal=192;
int bVal=192;
int frameCount=60;
Graphics2D g2=(Graphics2D)g;
RenderingHints hints = new RenderingHints(null);
hints.put(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHints(hints);
for(int t=20;t>=0;t--) {
rVal=t*255/frameCount;
gVal=t*255/frameCount;
bVal=t*255/frameCount;
g2.setColor(new Color(rVal,gVal,bVal,50));
g2.drawOval(oval_x,oval_y+t,long_axes,short_axes);
}
for(int a=0;a<data.length;a++) {
Arc2D arc = new Arc2D.Float(Arc2D.PIE);
g2.setColor(colors[a]);
arc.setFrame(oval_x,oval_y,long_axes,short_axes);
arc.setAngleStart(start);
arc.setAngleExtent(radian[a]);
g2.fill(arc);
if(data[a]==max || data[a]==min)
g2.setColor(Color.white);
else
g2.setColor(new Color(223,223,223,150));
g2.draw(arc);
start+=radian[a];
}
}
}
上一篇:
CakeButton.java
下一篇:
临床前药物安全性评价中毒性病理学新技术的应用