利用JFrameChart生成報表
案例一:利用application生成(解決中文亂碼問題)
原始碼如下:
package test; import java.awt.Font; import java.io.FileOutputStream; import java.io.IOException; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.title.TextTitle; import org.jfree.data.category.CategoryDataset; import org.jfree.data.category.DefaultCategoryDataset; public class Test { public static void main(String[] args) throws IOException{ CategoryDataset dataset = getDataSet(); JFreeChart chart = ChartFactory.createBarChart3D( "水果產量圖", // 圖表標題 "水果", // 目錄軸的顯示標籤 "產量", // 數值軸的顯示標籤 dataset, // 資料集 PlotOrientation.VERTICAL, // 圖表方向:水平、垂直 true, // 是否顯示圖例(對於簡單的柱狀圖必須是false) false, // 是否生成工具 false // 是否生成URL連結 ); FileOutputStream fos_jpg = null; try { fos_jpg = new FileOutputStream("D:\\fruit.jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg,1,chart,400,300,null); } finally { try { fos_jpg.close(); } catch (Exception e) {} } } /** * 獲取一個演示用的簡單資料集物件 * @return */ private static CategoryDataset getDataSet() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "成都", "蘋果"); dataset.addValue(200, "成都", "梨子"); dataset.addValue(300, "成都", "葡萄"); dataset.addValue(400, "成都", "香蕉"); dataset.addValue(500, "西昌", "蘋果"); dataset.addValue(200, "西昌", "梨子"); dataset.addValue(300, "西昌", "葡萄"); dataset.addValue(400, "西昌", "香蕉"); return dataset; } /** * 獲取一個演示用的組合資料集物件 * @return */ private static CategoryDataset getDataSet2() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "北京", "蘋果"); dataset.addValue(100, "上海", "蘋果"); dataset.addValue(100, "廣州", "蘋果"); dataset.addValue(200, "北京", "梨子"); dataset.addValue(200, "上海", "梨子"); dataset.addValue(200, "廣州", "梨子"); dataset.addValue(300, "北京", "葡萄"); dataset.addValue(300, "上海", "葡萄"); dataset.addValue(300, "廣州", "葡萄"); dataset.addValue(400, "北京", "香蕉"); dataset.addValue(400, "上海", "香蕉"); dataset.addValue(400, "廣州", "香蕉"); dataset.addValue(500, "北京", "荔枝"); dataset.addValue(500, "上海", "荔枝"); dataset.addValue(500, "廣州", "荔枝"); return dataset; } }
增加如下的程式碼,解決漢字亂碼問題:
CategoryPlot categoryplot = (CategoryPlot) chart.getPlot(); NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); CategoryAxis domainAxis = categoryplot.getDomainAxis(); TextTitle textTitle = chart.getTitle(); textTitle.setFont(new Font("黑體", Font.PLAIN, 20)); domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11)); domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12)); numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12)); numberaxis.setLabelFont(new Font("黑體", Font.PLAIN, 12)); chart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));
標題亂碼
chart.getTitle().setFont(new Font("宋體", Font.BOLD,12));
其他
1. CategoryAxis domainAxis = plot.getDomainAxis(); 2. 3. // NumberAxis valueAxis=(NumberAxis) plot.getRangeAxis(); 4. //有人說這個是水平方向設定的 方法。 5. ValueAxis numberaxis = plot.getRangeAxis(); 6. 7. /*------設定X軸座標上的文字-----------*/ 8. domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11)); 9. 10. /*------設定X軸的標題文字------------*/ 11. domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12)); 12. 13. /*------設定Y軸座標上的文字-----------*/ 14. numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12)); 15. 16. /*------設定Y軸的標題文字------------*/ 17. numberaxis.setLabelFont(new Font("黑體", Font.PLAIN, 12)); 18. 19. /*------這句程式碼解決了底部漢字亂碼的問題-----------*/ 20. jfreechart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));
前言
關於Struts2入門以及提高等在這裡就不介紹了,但是關於Struts2的學習有以下推薦:
- struts2-showcase-2.0.6.war:這個是官方自帶的Demo(struts-2.0.6-all.zip\struts-2.0.6\apps目錄下),非常全面,直接部署就可以了(很多朋友Struts2能學很好我估計還是直接從這裡學來的)。
- wiki-WebWork:入了門的朋友應該都知道,strust2由webwork2和struts1.x合併起來的,但主要還是以webwork2為主,所以如果找不到Struts2的資料可以找WebWork資料看看。
- Max On Java的部落格,他的部落格的資料在中文的Struts2算是比較全的了,寫得很詳細。
關於JFreeChart入門等這裡我也不打算介紹了,中文資料很多了。
正題
下面以邊帖圖片和程式碼的方式來講解Struts2與JFreeChart的整合。
搭建環境:首先帖一張工程的目錄結構以及所需的jar包。注意:如果你不打算自己寫ChartResult的話只需要引入struts2-jfreechart-plugin-2.0.6.jar(這個在struts-2.0.6-all.zip可以找到了):
1.依次帖web.xml、struts.xml、struts.properties和struts-jfreechart.xml幾個配置檔案的程式碼:
web.xml
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><filter><filter-name>struts2</filter-name><filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>
struts.xml
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"><struts><include file="struts-jfreechart.xml"/></struts>
struts.properties
struts-jfreechart.xml
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="jFreeChartDemonstration" extends="struts-default"
namespace="/jfreechart"><result-types><result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"></result-type></result-types><action name="JFreeChartAction" class="com.tangjun.struts2.JFreeChartAction"><result type="chart"><param name="width">400</param><param name="height">300</param></result></action></package></struts>
說明:這裡只需要說明下struts-jfreechart.xml,這裡直接呼叫已經寫好的類ChartResult,這個類是繼承自com.opensymphony.xwork2.Result,傳入生成圖片大小的引數width和height就可以了。
2. 新建JFreeChartAction繼承ActionSupport,生成JFreeChart物件並儲存到chart中,注意這個名稱是固定的。
import com.opensymphony.xwork2.ActionSupport;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;
publicclass JFreeChartAction extends ActionSupport {
/**
*
*/privatestaticfinallong serialVersionUID =5752180822913527064L;
//供ChartResult呼叫->ActionInvocation.getStack().findValue("chart")private JFreeChart chart;
@Override
public String execute() throws Exception {
//設定資料 DefaultPieDataset data =new DefaultPieDataset();
data.setValue("Java", new Double(43.2));
data.setValue("Visual Basic", new Double(1.0));
data.setValue("C/C++", new Double(17.5));
data.setValue("tangjun", new Double(60.0));
//生成JFreeChart物件 chart = ChartFactory.createPieChart("Pie Chart", data, true,true, false);
return SUCCESS;
}
public JFreeChart getChart() {
return chart;
}
publicvoid setChart(JFreeChart chart) {
this.chart = chart;
}
}
OK!至此程式碼已經全部貼完。
輸入訪問 http://localhost:8080/Struts2JFreeChart/jfreechart/JFreeChartAction.action
顯示結果如下:
補充
以上生成的圖片是PNG格式的圖片,如果需要自定義圖片格式的話(好像只能支援JPG和PNG格式),那麼自己寫一個ChartResult繼承自StrutsResultSupport,見程式碼:
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.StrutsResultSupport;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import com.opensymphony.xwork2.ActionInvocation;
publicclass ChartResult extends StrutsResultSupport {
/**
*
*/privatestaticfinallong serialVersionUID =4199494785336139337L;
//圖片寬度privateint width;
//圖片高度privateint height;
//圖片型別 jpg,pngprivate String imageType;
@Override
protectedvoid doExecute(String arg0, ActionInvocation invocation) throws Exception {
JFreeChart chart =(JFreeChart) invocation.getStack().findValue("chart");
HttpServletResponse response = ServletActionContext.getResponse();
OutputStream os = response.getOutputStream();
if("jpeg".equalsIgnoreCase(imageType) ||"jpg".equalsIgnoreCase(imageType))
ChartUtilities.writeChartAsJPEG(os, chart, width, height);
elseif("png".equalsIgnoreCase(imageType))
ChartUtilities.writeChartAsPNG(os, chart, width, height);
else
ChartUtilities.writeChartAsJPEG(os, chart, width, height);
os.flush();
}
publicvoid setHeight(int height) {
this.height = height;
}
publicvoid setWidth(int width) {
this.width = width;
}
publicvoid setImageType(String imageType) {
this.imageType = imageType;
}
}
如此的話還需要小小的修改一下struts-jfreechart.xml:
<!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd"><struts><package name="jFreeChartDemonstration" extends="struts-default"
namespace="/jfreechart"><!-- 自定義返回型別 --><result-types><!--
<result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"></result-type>
--><result-type name="chart" class="com.tangjun.struts2.chartresult.ChartResult"></result-type></result-types><action name="JFreeChartAction" class="com.tangjun.struts2.JFreeChartAction"><!--
<result type="chart">
<param name="width">400</param>
<param name="height">300</param>
</result>
--><result type="chart"><param name="width">400</param><param name="height">300</param><param name="imageType">jpg</param></result></action></package></struts>
OK!顯示的效果是一樣的,只是圖片格式不一樣,當然這裡面你可以做更多操作!
相關推薦
利用JFrameChart生成報表
案例一:利用application生成(解決中文亂碼問題) 原始碼如下: package test; import java.awt.Font; import java.io.FileOutputStream; import java.io.IOException
C# 利用ReportViewer生成報表
ces 聯系 rtp 構造 code winform images 參數 class 本文主要是利用微軟自帶的控件ReportViewer進行報表設計的小例子 涉及知識點: ReportViewer :位於Microsoft.Reporting.WinForms命名空間,
【FreeMarker】利用freemarker生成word版報表
前言: 在很多業務系統中,都需要生成月報,週報的報表。freemarker就很適合生成word版報表,freemarker就是利用word本身自帶的xml格式進行文字替換,圖片替換等操作的,當然除了簡單的替換文字之外,他還有其他的高階用法,詳情請見fre
利用RTFtemplate生成rtf報表
RTFTemplate巧妙的利用了word的“域”和書籤實現了報表模板的設計。通過向rtf插入特定型別的域欄位,用來標記將會被報表引擎用實際資料或者邏輯替代的部分。 通常單一的值用:Mergefield代替。 迴圈和條件採用:bookmark替代。 RefTemplate底
利用反射生成SQL語句
mman com inf get bool 通過 公開 public .get // 修改學員信息的方法 public bool ModifyStudent(MODEL.Students model) { // 利用反映獲取類對所有屬性,用來動態生成SQL語句
利用dw取報表格式代碼,沒有格式信息
格式 是否 blog 編輯 大小 解決方法 目前 excel表 excel 1、向dw中復制表樣板時,註意在dw中設置,編輯,首選項,選擇復制黏貼的樣式,不然出現的代碼是不加表格的2、對於表格的大小是否跟隨內容變動,暫時還未解決問題分析:應該屬於excel表格的設置問題,先
利用letsencrypte生成證書時,create virtual environment失敗
letsencrypt oserror ./letsencrypt-auto certonly --standalone利用letsencrypt生成證書時 ,出現下面錯誤提示0 upgraded, 0 newly installed, 0 to remove and 6 not upgraded.
利用python生成交換機的VRF配置文件
cnblogs pan 運行 成交 交換機 sting write quit spa 為了快速生成有規律的VRF,寫了一個python腳本,可以快速生成如下的VRF配置。 ip vpn-instance vpn0ipv4-family route-distinguish
利用Javascript生成txt文本文件
nec clas utf-8 blog immediate exp alt eve ongui <script type="text/javascript"> // 將字符串用txt的格式報存 ie中會出現中文亂碼的問題 var saveAs = sa
【本地服務器】利用openssl生成證書
.html num href 創建證書 inf blog article nop cmd (一)下載openssl軟件,解壓,進入bin目錄 下載地址 (二)1.在當前bin目錄,按住shift鍵右擊,選擇"在此處打開命令窗口" 2.打開
利用meterpreter生成一個簡單的android木馬
是我 linux 學習過程 手機 命令 簡單的 lin 軟件 bubuko 這個學習過程我是在kali linux下進行的,成功的感染了自己的手機,當然了apk包沒改簽名也沒有加小圖標,所以只能當是一個實驗吧。 首先使用這個命令: 使用這個命令,可以生成一個apk包,但是
C# 利用SharpZipLib生成壓縮包
helper 管理 .com rep text har bzip2 reading int 本文通過一個簡單的小例子簡述SharpZipLib壓縮文件的常規用法,僅供學習分享使用,如有不足之處,還請指正。 什麽是SharpZipLib ? SharpZipLib是一個C#的
使用Python定時執行一任務,自動登錄某web系統,生成報表,然後發送郵件給指定人員
sel web mail word 發送郵件 查詢條件 xxxxx receive emp 一、項目需求 每周從A系統生成一張Excel報表,發送此報表給指定人員,相關人員依據此報表去完成後續的工作。 項目限制: 1、無法通過E
Java實驗--課上提到的隨機數生成原理簡單實現(不利用庫生成隨機數的簡單算法)
9.png 技術分享 當前 span col 分享 args 簡單 返回 對於隨機數的實驗,根據課程上的教程,有如下的公式: 對應的變量參數的說明: 其中對應的Mouduls變量對應的就是公式中a的值,在公式中的含義就是相當於要循環多少個數才重復的一個值。 Mult
【VBA】【一天的心血,收藏一下】一鍵生成報表2
Public batch$ Sub crAddReport() '獲取窗體單選框選擇 UserForm1.Show If UserForm1.OptionButton1.Value = True Then batch = "一" ElseIf Us
【VBA】【一天的心血,收藏一下】一鍵生成報表
Sub crDelReport() t1 = Timer Application.ScreenUpdating = False Call importLog Call findBrokenStation Call nowCrRe
如何利用OpenSSL生成證書
此文已由作者趙斌授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 一、前言 最近為了測試內容分發網路(Content Delivery Network,簡稱 CDN)新增的新功能,支援HYTTPS安全加速功能,需要對證書的有效性進行驗證,於是乎需要自己生成合法的、非法的、過期的證書。
使用python獲取整月每一天的系統監控資料生成報表
1.安裝阿里開源監控工具tsar tsar官方網站 wget -O tsar.zip https://github.com/alibaba/tsar/archive/master.zip --no-check-certificate unzip tsar.zip cd tsar m
java 利用ID生成六位唯一驗證碼
package com.hqjl.componentconfig.util; import java.util.Random; /** * @author chunying */ public class ShareCodeUtil { /** * 邀請碼生成器,演算法原理: * 1)
利用itertools生成密碼字典,多執行緒撞庫破解rar壓縮檔案密碼
指令碼功能: 利用itertools生成密碼字典(迭代器形式) 多執行緒併發從密碼字典中取出密碼進行驗證 驗證成功後把密碼寫入檔案中儲存 #!/usr/bin/env python # -*- coding: UTF-8 -*- # Author:Leslie-x import itert