java swing jfreechart
* 建立JFreeChart傳入資料集
*/
private void createPieChart(List<Object[]> listChartIn, List<Object[]> listChartOut)
{
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (Object[] str : listChartIn)
{
dataset.addValue((Number) str[1], "1", EbsiCode.get("IAE001", Utility.isNull(str[0]) ? "" : (String) str[0])); // 輸入資料
}
for (Object[] str : listChartOut)
{
dataset.addValue((Number) str[1], "2", EbsiCode.get("IAE001", Utility.isNull(str[0]) ? "" : (String) str[0])); // 輸入資料
}
JFreeChart chart = ChartFactory.createBarChart("", "", "", dataset, PlotOrientation.VERTICAL, false, false, false); //建立一個JFreeChart
ChartPanel panel = EbsiChartUtil.createBarChart(dataset); // 呼叫公共樣式和處理亂碼的方法
// 將產生的圖片顯示在Jpanel上
panelPiechart.setLayout(new java.awt.BorderLayout());
panelPiechart.add(panel, BorderLayout.CENTER);
}
public static final Color BACKGROUND_PAINT = new Color(236, 233, 216); // 背景色
private EbsiChartUtil()
{
}
/**
* 建立一個3D的餅狀圖
*
* @param dataset 資料集
*
* @return jfreechart圖表
*/
public static ChartPanel createPieChart3D(DefaultPieDataset dataset)
{
StandardChartTheme standardChartTheme = new StandardChartTheme("CN"); // 建立主題樣式
standardChartTheme.setRegularFont(new Font("宋書", Font.PLAIN, 15)); // 設定字型
ChartFactory.setChartTheme(standardChartTheme); // 應用主題樣式
JFreeChart chart = ChartFactory.createPieChart3D("", dataset, false, true, false);
chart.setBackgroundPaint(BACKGROUND_PAINT);// 設定背景色
PiePlot pieplot = (PiePlot) chart.getPlot();
pieplot.setOutlinePaint(new Color(236, 233, 216)); // 設定邊框顏色
pieplot.setBackgroundAlpha(0f); // 設定透明度
pieplot.setNoDataMessage("當前沒有有效的資料");
DecimalFormat df = new DecimalFormat("0.00%"); // 設定小數格式
NumberFormat nf = NumberFormat.getNumberInstance(); // 獲得一個NumberFormat物件
StandardPieSectionLabelGenerator sp1 = new StandardPieSectionLabelGenerator("{0} {2}", nf, df); // 獲得StandardPieSectionLabelGenerator物件
pieplot.setLabelGenerator(sp1); // 設定餅圖顯示百分比
return new ChartPanel(chart);
}
public static ChartPanel createBarChart(DefaultCategoryDataset dataset)
{
StandardChartTheme standardChartTheme = new StandardChartTheme("CN"); // 建立主題樣式
standardChartTheme.setExtraLargeFont(new Font("隸書", Font.BOLD, 10)); // 設定標題字型
standardChartTheme.setRegularFont(new Font("微軟雅黑", Font.PLAIN, 12)); // 設定圖例的底部字型
standardChartTheme.setLargeFont(new Font("宋書", Font.PLAIN, 10)); // 設定軸向的字型
ChartFactory.setChartTheme(standardChartTheme);
JFreeChart chart = ChartFactory.createBarChart("", "", "", dataset, PlotOrientation.VERTICAL, false, false, false); // 建立一個JFreeChart
CategoryPlot pieplot = chart.getCategoryPlot();// 獲取條形的物件
pieplot.setBackgroundAlpha(0);// 設定圖形的背景顏色
pieplot.setNoDataMessage("當前沒有有效的資料");
chart.setBackgroundPaint(new Color(236, 233, 216));
//設定條形柱上顯示數量
BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition( // 設定柱子上顯示的數字在上方顯示
ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
renderer.setItemLabelAnchorOffset(10D);// 設定柱形圖上的文字偏離值
renderer.setBaseItemLabelsVisible(true);
renderer.setMaximumBarWidth(0.05);// 設定柱子寬度
renderer.setBaseOutlinePaint(Color.BLACK); // 設定柱子邊框顏色
pieplot.setRenderer(renderer);
pieplot.setOutlinePaint(new Color(236, 233, 216)); // 設定圖片邊框顏色
// X 軸
CategoryAxis domainAxis = pieplot.getDomainAxis();
domainAxis.setTickLabelPaint(Color.BLUE); // 字型顏色
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 橫軸上的label斜顯示
return new ChartPanel(chart);
}
/**
* 柱子數大於10根 設定chartpanel大小 add by hello
* @param dataset
* @return
*/
public static ChartPanel createBarChartMore(DefaultCategoryDataset dataset)
{
StandardChartTheme standardChartTheme = new StandardChartTheme("CN"); // 建立主題樣式
standardChartTheme.setExtraLargeFont(new Font("隸書", Font.BOLD, 10)); // 設定標題字型
standardChartTheme.setRegularFont(new Font("微軟雅黑", Font.PLAIN, 12)); // 設定圖例的底部字型
standardChartTheme.setLargeFont(new Font("宋書", Font.PLAIN, 10)); // 設定軸向的字型
ChartFactory.setChartTheme(standardChartTheme);
JFreeChart chart = ChartFactory.createBarChart("", "", "", dataset, PlotOrientation.VERTICAL, true, false, false); // 建立一個JFreeChart
CategoryPlot pieplot = chart.getCategoryPlot();// 獲取條形的物件
pieplot.setBackgroundAlpha(0);// 設定圖形的背景顏色
pieplot.setNoDataMessage("當前沒有有效的資料");
chart.setBackgroundPaint(new Color(236, 233, 216));
//設定條形柱上顯示數量
BarRenderer3D renderer = new BarRenderer3D();
renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition( // 設定柱子上顯示的數字在上方顯示
ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER));
renderer.setItemLabelAnchorOffset(10D);// 設定柱形圖上的文字偏離值
renderer.setBaseItemLabelsVisible(true);
renderer.setMaximumBarWidth(0.1);// 設定柱子寬度
renderer.setBaseOutlinePaint(Color.BLACK); // 設定柱子邊框顏色
pieplot.setRenderer(renderer);
pieplot.setOutlinePaint(new Color(236, 233, 216)); // 設定圖片邊框顏色
// X 軸
CategoryAxis domainAxis = pieplot.getDomainAxis();
domainAxis.setTickLabelPaint(Color.BLUE); // 字型顏色
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 橫軸上的label斜顯示
return new ChartPanel(chart, dataset.getColumnCount()*75, 300, dataset.getColumnCount()*75, 300, dataset.getColumnCount()*75, 300, true, true, true, true, true, true);
}