1. 程式人生 > >java swing jfreechart

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);
    }