下載後打開jfreechart-1.x.x-demo.jar
打開後,找一個自己喜歡的,然後在source資料夾搜尋你選到的檔名,就有原始檔可看,直接複製到Eclipse,即可得到和畫面一樣的結果
這裡模擬一個較簡單的
DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("Samsung", new Double(27.8)); dataset.setValue("Others", new Double(55.3)); dataset.setValue("Nokia", new Double(16.8)); dataset.setValue("Apple", new Double(17.1)); JFreeChart jfc = ChartFactory.createPieChart("Phone Person", dataset); try { ChartUtilities.saveChartAsJPEG(new File("D:/test.jpg"), jfc, 800, 600); System.out.println("成功!"); } catch (IOException e) { e.printStackTrace(); System.err.println("失敗!"); }
setValue(Comparable, Number)
Comparable的兒子包括8個基本型別的Wrapper類別,還有String、Date都是
以上設定如果有中文,也不會出錯,但中文會變成「□」,所以要增加了以下的方法:
DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("象棋", 12); dataset.setValue("跳棋", 25); dataset.setValue("五子棋", 30); dataset.setValue("孔明棋", 5); // 中文標題 JFreeChart jfc = ChartFactory.createPieChart("棋類使用率圖", dataset); jfc.getTitle().setFont(new Font("標楷體", Font.BOLD, 28)); // 圖裡的中文 PiePlot plot = (PiePlot) jfc.getPlot(); plot.setLabelFont(new Font("微軟正黑體", Font.PLAIN, 16)); // 圖底的中文 jfc.getLegend().setItemFont(new Font("新細明體", Font.ITALIC, 20)); try { ChartUtilities.saveChartAsJPEG(new File("D:/test.jpg"), jfc, 800, 600); System.out.println("成功!"); } catch (IOException e) { e.printStackTrace(); System.err.println("失敗!"); }
如果本機沒有對應的字體也不會報錯,看起來是有預設的字體
※在Struts2裡使用JFreeChart
1.首先要有jfreechart-1.x.x.jar,還有Struts2合併JFreeChart的struts2-jfreechart-plugin-2.x.x.jar2.struts.xml
<constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /> <package name="basicstruts2" extends="struts-default" namespace="/"> <result-types> <result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"> <param name="height">200</param> <param name="width">200</param> </result-type> </result-types> </package>
3.JFreeChartAction.java
@ParentPackage("basicstruts2") @Namespace("/struts2") @Action("picture") @Results({ @Result(name = "success", type = "chart") }) public class JFreeChartAction extends ActionSupport { private JFreeChart chart; public JFreeChart getChart() { return chart; } public String productPic() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("象棋", 12); dataset.setValue("跳棋", 25); dataset.setValue("五子棋", 30); dataset.setValue("孔明棋", 5); // 中文標題 chart = ChartFactory.createPieChart("棋類使用率圖", dataset); chart.getTitle().setFont(new Font("標楷體", Font.BOLD, 28)); // 圖裡的中文 PiePlot plot = (PiePlot) chart.getPlot(); plot.setLabelFont(new Font("微軟正黑體", Font.PLAIN, 16)); // 圖底的中文 chart.getLegend().setItemFont(new Font("新細明體", Font.ITALIC, 20)); try { ChartUtilities.saveChartAsJPEG(new File("D:/test.jpg"), chart, 200, 200); System.out.println("成功!"); } catch (IOException e) { e.printStackTrace(); System.err.println("失敗!"); } return SUCCESS; } }
在瀏覽器輸入http://localhost:8080/Struts2Demo/struts2/picture!productPic.action即可看到畫面
struts.xml裡的寬高是瀏覽器看到的寬高
JFreeChartAction.java的寬高是輸出檔案的寬高
我試的結果,名字一定要叫chart,不然會報錯
官方也有提供做法,但有地方要修改如下:
struts.xml不用動
ViewModerationChartAction.java因為沒有RandomUtils,所以改成以下:
Random random = new Random(); for (int i = 0; i <= 100; i++) { dataSeries.add(i, random.nextInt()); }
return SUCCESS即可,不用super,這樣就能產生報表了
其他更深入的寫法,就看JFreeChart官方網站了,它的教學指南是要花錢買的
沒有留言:
張貼留言