?? roundpriture.java
字號:
package com.priture;
import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.geom.*;
public class RoundPriture {
//繪圖數(shù)據(jù)
private String pictureType = "png"; //圖片格式
private String pictureTitle = "無標題"; //圖片標題
private int pictureWidth = 460; //圖片寬度
private int pictureHeight = 300; //圖片高度
private String[] title;
private double[] data; //繪圖數(shù)據(jù)
public RoundPriture() {
}
public void draw(HttpServletResponse response) {
double percent = pictureWidth / 460.0; //繪圖百分比
// 清空緩沖區(qū)
response.reset();
// 參數(shù)image的意思是設置返回客戶端的響應數(shù)據(jù)類型為圖象,參數(shù)pictureType為圖片格式
response.setContentType("image/" + pictureType);
// 創(chuàng)建一個指定大小的圖像
BufferedImage image = new BufferedImage(pictureWidth, pictureHeight,
BufferedImage.TYPE_INT_RGB);
// 創(chuàng)建Java2D對象,Java2D即對二維圖表的支持
Graphics2D g2d = image.createGraphics();
//繪制圖片背景
g2d.setPaint(Color.WHITE); //設置顏色
g2d.fillRect(0, 0, pictureWidth, pictureHeight); //參數(shù)含義(x,y,width,height)
//繪制圖框
g2d.setPaint(new Color(0xC9DDF6));//#C9DDF6
int roundSize = (int) (40 * percent);
g2d.fillRoundRect(0, 0, pictureWidth, pictureHeight, roundSize,
roundSize);
//繪制繪圖區(qū)
g2d.setPaint(Color.WHITE);
int a = (int) (30 * percent);
int b = (int) (50 * percent);
g2d.fillRect(a, b, pictureWidth - a * 2, pictureHeight - (a + b));
//定義標題
g2d.setColor(Color.RED);
g2d.setFont(new Font("漢真廣標", Font.BOLD, 16));
//確定標題開始輸出的位置,確保居中顯示
int outputTitleInX = 0;
int titleLength = pictureTitle.length();
if (titleLength % 2 == 0) {
outputTitleInX = (pictureWidth - titleLength * 17) / 2;
} else {
outputTitleInX = (pictureWidth - titleLength * 17) / 2 + 2;
}
g2d.drawString(pictureTitle, outputTitleInX, (int) (36 * percent));
//繪制餅狀圖
double dataSum = 0;
for (int i = 0; i < data.length; i++) {
dataSum = dataSum + data[i];
}
g2d.setFont(new Font("宋體", Font.BOLD, 14));
double startAngle = 0; //開始繪制扇形的角度
double arcAngle = 0; //繪制扇形的角度
int xCenter = pictureWidth / 2; //餅狀圖圓心的x軸坐標
int x = 0;
int y = 0;
String dataDescribe = "";
for (int i = 0; i < data.length; i++) {
int c=(i + 30) * 12;
g2d.setColor(Color.getHSBColor(c+i*14, c-i*18,c+i*24));
startAngle = startAngle + arcAngle;
arcAngle = (data[i] * 360 / dataSum);
//繪制餅狀圖
g2d.fillArc((int) (pictureWidth - (int) (186 * percent)) / 2,
(int) (pictureHeight - (int) (186 * percent)) / 2 +
(b - a) / 2, (int) (186 * percent),
(int) (186 * percent), (int) startAngle, (int) arcAngle);
//繪制定義文字
//定義一個新餅圖,與顯示的是同心圓,但不顯示,繪制的每個扇形角度為顯示的一半
Arc2D.Double arc2d = new Arc2D.Double((int) (pictureWidth -
(int) (200 * percent)) / 2,
(int) (pictureHeight - (int) (200 * percent)) /
2 + (b - a) / 2, (int) (200 * percent),
(int) (200 * percent), (int) startAngle,
arcAngle / 2, Arc2D.PIE);
//演示確定定義文字輸出位置的圓弧
// g2d.setColor(Color.CYAN);
// g2d.draw(arc2d);
//獲取新餅圖的終點坐標
Point2D.Double endPoint = (Point2D.Double) arc2d.getEndPoint();
x = (int) endPoint.getX();
y = (int) endPoint.getY();
dataDescribe = (int) (data[i] * 100 / dataSum) + "%";
//如果終點在圓心的左側,則再向左移動定義文字的長度
if (x < xCenter) {
x = x - (title[i].length() * 14 + dataDescribe.length() * 6) - 8;
}
//輸出定義文字
g2d.drawString(title[i] + " " + dataDescribe, x, y);
}
// 部署圖形
g2d.dispose();
// 利用ImageIO類的write方法對圖像進行編碼,生成png格式的圖象
ServletOutputStream sos = null;
try {
sos = response.getOutputStream();
ImageIO.write(image, "PNG", sos);
sos.close();
} catch (IOException ex) {
}
}
//繪圖數(shù)據(jù)賦值方法set()
public void setPictureType(String pictureType) {
this.pictureType = pictureType;
}
public void setPictureTitle(String pictureTitle) {
this.pictureTitle = pictureTitle;
}
public void setPictureWidth(int pictureWidth) {
this.pictureWidth = pictureWidth;
}
public void setPictureHeight(int pictureHeight) {
this.pictureHeight = pictureHeight;
}
public void setTitle(String[] title) {
this.title = title;
}
public void setData(double[] data) {
this.data = data;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -