上一篇中用純java的方式寫了一個柱狀圖,可是結果非常的難看,下面用第三方插件來搞定這個問題,就是jfreechart,據說java做界面簡直就是搓到爆,僅僅就是好奇一下,just so so
好了,jfeechart安裝的過程我就不說了,網上到處都是,僅僅給出我的代碼和結果
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.junit.experimental.categories.Categories;
public class b
{
/*
* 這個程序用來顯示上一個程序中的柱狀圖
* 利用第三方庫jfreechart
*/
public static void main(String[] argv)
{
BufferedImage img = new BufferedImage(100, 100, BufferedImage.TYPE_INT_BGR);
TextTitle title = new TextTitle("柱狀圖");
CategoryDataset data = getdata();
JFreeChart chart = ChartFactory.createBarChart3D("柱狀圖", "數", "例子", data);
ChartFrame frame = new ChartFrame("柱狀圖",chart);
/*frame.pack();
frame.setVisible(true);*/
// 自定義設定背景色
// chart.setBackgroundPaint(Color.getHSBColor(23,192,223));
chart.setBackgroundPaint(Color.WHITE);
// 獲得 plot:3dBar爲CategoryPlot
CategoryPlot categoryPlot = chart.getCategoryPlot();
// 設定圖表數據顯示部分背景色
categoryPlot.setBackgroundPaint(Color.BLACK);
// 橫座標網格線
categoryPlot.setDomainGridlinePaint(Color.RED);
// 設置網格線可見
categoryPlot.setDomainGridlinesVisible(true);
// 縱座標網格線
categoryPlot.setRangeGridlinePaint(Color.RED);
// 重要的類,負責生成各種效果
// BarRenderer3D renderer=(BarRenderer3D) categoryPlot.getRenderer();
// 獲取縱座標
NumberAxis numberaxis = (NumberAxis) categoryPlot.getRangeAxis();
// 設置縱座標的標題字體和大小
numberaxis.setLabelFont(new Font("黑體", Font.CENTER_BASELINE, 24));
// 設置叢座標的座標值的字體顏色
numberaxis.setLabelPaint(Color.BLACK);
// 設置叢座標的座標軸標尺顏色
numberaxis.setTickLabelPaint(Color.RED);
// 座標軸標尺顏色
numberaxis.setTickMarkPaint(Color.BLUE);
// 叢座標的默認間距值
// numberaxis.setAutoTickUnitSelection(true);
// 設置叢座標間距值
numberaxis.setAutoTickUnitSelection(false);
numberaxis.setTickUnit(new NumberTickUnit(150));
// 獲取橫座標
CategoryAxis domainAxis = categoryPlot.getDomainAxis();
// 設置橫座標的標題字體和大小
domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 13));
// 設置橫座標的座標值的字體顏色
domainAxis.setTickLabelPaint(Color.RED);
// 設置橫座標的座標值的字體
domainAxis.setTickLabelFont(new Font("宋體", Font.PLAIN, 30));
// 設置橫座標的顯示
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(0.4));
// 這句代碼解決了底部漢字亂碼的問題
chart.getLegend().setItemFont(new Font("黑體", 0, 16));
// 設置圖例標題
Font font = new java.awt.Font("黑體", java.awt.Font.CENTER_BASELINE, 50);
//TextTitle title = new TextTitle("項目狀態分佈");
title.getBackgroundPaint();
title.setFont(font);
// 設置標題的字體顏色
title.setPaint(Color.RED);
chart.setTitle(title);
frame.pack();
frame.setVisible(true);
/*Image image = frame.createImage(500, 500);
Graphics g = image.getGraphics();
String filename = "D:\\3.jpg";
File file = new File(filename);
if(!file.exists())
{
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
FileOutputStream s = null;
try {
s = new FileOutputStream(file);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
ImageIO.write(img, "JPEG", s);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
}
private static CategoryDataset getdata()
{
DefaultCategoryDataset data = new DefaultCategoryDataset();
data.addValue(1, "1", "1");
data.addValue(2, "2", "2");
data.addValue(3, "3", "3");
data.addValue(4, "4", "4");
data.addValue(5, "5", "5");
data.addValue(6, "6", "6");
data.addValue(7, "7", "7");
data.addValue(8, "8", "8");
data.addValue(9, "9", "9");
data.addValue(10, "10", "10");
return data;
}
}