﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-fastpace-随笔分类-J2EE</title><link>http://www.blogjava.net/fastpace/category/14497.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 14 Dec 2007 05:46:24 GMT</lastBuildDate><pubDate>Fri, 14 Dec 2007 05:46:24 GMT</pubDate><ttl>60</ttl><item><title>BEA World 2007 圆满落幕</title><link>http://www.blogjava.net/fastpace/archive/2007/12/14/167734.html</link><dc:creator>keith</dc:creator><author>keith</author><pubDate>Fri, 14 Dec 2007 04:18:00 GMT</pubDate><guid>http://www.blogjava.net/fastpace/archive/2007/12/14/167734.html</guid><wfw:comment>http://www.blogjava.net/fastpace/comments/167734.html</wfw:comment><comments>http://www.blogjava.net/fastpace/archive/2007/12/14/167734.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fastpace/comments/commentRss/167734.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastpace/services/trackbacks/167734.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有幸成为BEA World 2007全球大会（上海站）的嘉宾，大会在蒙蒙细雨中的上海举行，但这丝毫没有影响到参会者的热情。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有关大会详细报道请访问：<a href="http://middleware.csdn.net/subject2" target="_blank">http://middleware.csdn.net/subject2</a> 
<img src ="http://www.blogjava.net/fastpace/aggbug/167734.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastpace/" target="_blank">keith</a> 2007-12-14 12:18 <a href="http://www.blogjava.net/fastpace/archive/2007/12/14/167734.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BEA Workshop™ Studio 10.1新特性</title><link>http://www.blogjava.net/fastpace/archive/2007/07/16/130496.html</link><dc:creator>keith</dc:creator><author>keith</author><pubDate>Mon, 16 Jul 2007 02:23:00 GMT</pubDate><guid>http://www.blogjava.net/fastpace/archive/2007/07/16/130496.html</guid><wfw:comment>http://www.blogjava.net/fastpace/comments/130496.html</wfw:comment><comments>http://www.blogjava.net/fastpace/archive/2007/07/16/130496.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/fastpace/comments/commentRss/130496.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastpace/services/trackbacks/130496.html</trackback:ping><description><![CDATA[BEA Workshop<span class=superscript>&#8482;</span> Studio 10.1终于看到下载了。版本直接从3.3跳到10.1，大概是为了和Weblogic 10保持一致。遗憾的是10.1版本并没有让人心动的特性。个人感觉只是为了支持新推出的Weblogic Server 10。<br><br>我下载试用了一下，和Weblogic Server 10已经绑定在一起，安装时需要选择BEA_HOME。本以为会对EJB3.0提供可视化，可惜没有，依然和3.3版本一样仅仅对EJB3的JPA部分提供支持。<br><br>以下是BEA Workshop<span class=superscript>&#8482;</span> Studio 10.1增加的新特性：<br><br>
<div>
<div>
<div>
<h3><a id=101 name=101></a>Workshop for WebLogic and Workshop Studio have Merged</h3>
<p>As of version 10.1, all of the functionality of WebLogic for Workshop and Workshop Studio have merged into one IDE.</p>
<p><strong>To migrate</strong> your applications to the new IDE, see <a href="http://edocs.bea.com/wlw/docs101/guide/upgrading/navUpgrading.html"><u><font color=#0000ff>Upgrading to Workshop 10.1</font></u></a>. </p>
<p><strong>New features</strong> include: </p>
<ul>
    <li>Support for multiple web application frameworks in one IDE: <a href="http://edocs.bea.com/wlw/docs101/guide/webapplications/struts/navWorkshopStrutsOpening.htm"><u><font color=#0000ff>Struts</font></u></a>, <a href="http://edocs.bea.com/wlw/docs101/guide/webapplications/jsf/jsf-app-tutorial/Introduction.html"><u><font color=#0000ff>JSF</font></u></a> and <a href="http://edocs.bea.com/wlw/docs101/guide/webapplications/netui/conIntro.html"><u><font color=#0000ff>Beehive</font></u></a>
    <li>Flexible tools for creating and testing <a href="http://edocs.bea.com/wlw/docs101/guide/webservices/navGettingStartedWebService.html"><u><font color=#0000ff>WebLogic web services</font></u></a>
    <li><a href="http://edocs.bea.com/wlw/docs101/guide/ormworkbench/conExploringDatabases.html"><u><font color=#0000ff>DbXplorer and DBXaminer</font></u></a> for working with databases
    <li>ORM mapping support via <a href="http://edocs.bea.com/wlw/docs101/guide/ormworkbench/KodoTutorial/KodoTutIntroduction.html"><u><font color=#0000ff>BEA Kodo</font></u></a> and <a href="http://edocs.bea.com/wlw/docs101/guide/ormworkbench/hibernate-tutorial/0-Tutorial.htm"><u><font color=#0000ff>Hibernate</font></u></a>
    <li>Automatic generation of <a href="http://edocs.bea.com/wlw/docs101/guide/ormworkbench/conGenerateSpring.html"><u><font color=#0000ff>Spring</font></u></a> configuration and DAO classes </li>
</ul>
<h3>Deployment to versions 8.1, 9.x, and 10.0 of WebLogic Server</h3>
<p>Workshop 10.1 now supports deployment to these versions of WebLogic Server: </p>
<ul>
    <li>8.1
    <li>9.0, 9.1, 9.2
    <li>10.0 </li>
</ul>
<h3><strong>Improved Page Flow Support and AppXRay Integration</strong></h3>
<ul type=disc>
    <li>JSP editor with WYSIWYG design view
    <li>Code completion on NetUI tag attributes, both for static values and expressions
    <li>Ctrl+click navigation on NetUI tag attribute values
    <li>Page flow specific validation on NetUI tag attribute values
    <li>Rich property sheet support via with lots of useful &#8220;value pickers&#8221;
    <li>Integration with WTP JSP templates for very easy customization of initial JSP content </li>
</ul>
<h3>Workshop Quick Start Applications</h3>
<p>Instead of creating one project at a time to build up an application structure, Workshop Quick Start Applications let you create multiple projects simulataneously. Project dependencies are created already in place, as is a WebLogic server configuration. For details see <a href="http://edocs.bea.com/wlw/docs101/guide/ideuserguide/ui/uiQuickStartApps.html"><u><font color=#0000ff>Workshop Quick Start Applications</font></u></a>. </p>
<h3>Support for Maven Build Integration </h3>
<p>Workshop's Ant-based build <a href="http://edocs.bea.com/wlw/docs101/guide/ideuserguide/build/conUseCustomAntBuild.html"><u><font color=#0000ff>supports integration</font></u></a> with Maven-based build infrastructures.&nbsp; </p>
<h3>Built on Eclipse 3.2.2 and WTP 1.5.4</h3>
<p>Workshop version 10.1 is built on the <a href="http://www.eclipse.org/" target=_blank><u><font color=#0000ff>Eclipse Platform</font></u></a>, an open source framework that is now widely used for Java development. Workshop extends Eclipse 3.2.2 and the <a href="http://www.eclipse.org/webtools/" target=_blank><u><font color=#0000ff>Web Tools Platform</font></u></a> 1.5.4.</p>
</div>
</div>
</div>
<!-- InstanceEndEditable --><!-- InstanceBeginEditable name="footerBorder" -->
<img src ="http://www.blogjava.net/fastpace/aggbug/130496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastpace/" target="_blank">keith</a> 2007-07-16 10:23 <a href="http://www.blogjava.net/fastpace/archive/2007/07/16/130496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Bea workshop 3.3的facet libraries</title><link>http://www.blogjava.net/fastpace/archive/2006/12/22/89498.html</link><dc:creator>keith</dc:creator><author>keith</author><pubDate>Fri, 22 Dec 2006 05:18:00 GMT</pubDate><guid>http://www.blogjava.net/fastpace/archive/2006/12/22/89498.html</guid><wfw:comment>http://www.blogjava.net/fastpace/comments/89498.html</wfw:comment><comments>http://www.blogjava.net/fastpace/archive/2006/12/22/89498.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/fastpace/comments/commentRss/89498.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastpace/services/trackbacks/89498.html</trackback:ping><description><![CDATA[
		<p>Bea workshop 3.3出来了，连忙上网下载升级，文件不到170多M，用FlashGet很快就下载了。<br /><br />安装后试用，发现Workshop Studio Facet Libraries全是空的，和以前的版本一样需要联网下载。从BEA的网站下载速度不敢恭维，巨慢无比，真让能受不了！！<br /><br />Bea为什么不把facet libraries直接做到安装文件中呢，担心安装包太大？大点没有什么的。这点JB就做得很好，把需要的库都做进光盘了，不需要你再去寻找下载。<br /><br />希望workshop下个版本能预装些libraries！</p>
<img src ="http://www.blogjava.net/fastpace/aggbug/89498.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastpace/" target="_blank">keith</a> 2006-12-22 13:18 <a href="http://www.blogjava.net/fastpace/archive/2006/12/22/89498.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]使用JfreeChart开发图表经验总结(含源码) </title><link>http://www.blogjava.net/fastpace/archive/2006/10/25/77237.html</link><dc:creator>keith</dc:creator><author>keith</author><pubDate>Wed, 25 Oct 2006 09:08:00 GMT</pubDate><guid>http://www.blogjava.net/fastpace/archive/2006/10/25/77237.html</guid><wfw:comment>http://www.blogjava.net/fastpace/comments/77237.html</wfw:comment><comments>http://www.blogjava.net/fastpace/archive/2006/10/25/77237.html#Feedback</comments><slash:comments>33</slash:comments><wfw:commentRss>http://www.blogjava.net/fastpace/comments/commentRss/77237.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fastpace/services/trackbacks/77237.html</trackback:ping><description><![CDATA[
		<p align="center">
				<strong>
						<font size="4">使用JfreeChart开发图表经验总结（含源码）</font>
				</strong>
				<br />Keith He  2005年10月27日</p>
		<br />最近，公司一项目要出很多的图表。由于项目是B/S架构的，所以生成的图表也要考虑能在浏览器上动态显示。<br /><p>生成基于浏览器的图表方式比较多。据我所知道的，常用的有三种：<br />1、VML方式实现。这种方式是通过产生客户端的代码，由客户端根据代码生成相应的图表。但这种方式产生的图表有很多的局限性，如受限于浏览器，有些浏览器可能并不支持VML。另外，没有封装完整的图表开发包。<br />2、通过applet来产生图表。这种方式也对客户端要求比较高，必须要有JRE，而且通过applet生成的图表在加载过程中会有个Java的Log动画。用户看了可能会感觉不太舒服。<br />3、通过服务端直接生成图表的图片。这种方式对客户端几乎没有什么要求，缺点是加重了服务端的负担，对服务端要求就相对高了点。<br /><br />经过比较，根据项目自身特点，我们打算采用第三种方式来开发图表。为了缩短开发周期、节约成本，我们选用了开源的JFreeChart(<a href="http://www.jfree.org/jfreechart/" target="_blank">http://www.jfree.org/jfreechart/</a>)。</p><p>jfreechart是一个免费创建图表的java工具，目前最新版本是JFreeChart-1.0.0-rc1。它可以生成各式各样的图表。这些图表包括饼图、柱状图、线形图、区域图、甘特图等等，基本可以满足各种项目的要求。但在开发过程中我也发现了JFreeChart的一些不足，或者说有些称得上是BUG。总体说来，JFreeChart还是个优秀的开源项目。</p><p>关于JFreeChart生成图表的文章比较多了，我主要谈谈使用JFreeChart的一些比较棘手问题以及解决方法。同时也会将问题所用到的源码（<font color="#ff0000">JFreeChart-1.0.0-rc1+Struts1.2.4</font>）从项目中抽象出来一起提供给大家。</p><p><strong>一、 图片上热点链接中文乱码的解决方法</strong></p><p>这个问题是在我查阅关于JFreeChart相关资料时出现频率最高的一个问题。其实这个乱码问题不能怪罪于JFreeChart。有人甚至就因此认为JFreeChart对中文支持不太完善，JFreeChart可要叫了：我是冤枉的！</p><p>我们来找出问题产生的原因，这个问题也就不难解决了。</p><p>首先查看一下出现问题页面的Html源文件，你会发现在源文件的开头多出了一段map代码，代码类似于这样：</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">map </span><span style="COLOR: #ff0000">id</span><span style="COLOR: #0000ff">="chart-30928.png"</span><span style="COLOR: #ff0000"> name</span><span style="COLOR: #0000ff">="chart-30928.png"</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">area </span><span style="COLOR: #ff0000">shape</span><span style="COLOR: #0000ff">="poly"</span><span style="COLOR: #ff0000"> coords</span><span style="COLOR: #0000ff">="179,163,176,154,174,145"</span><span style="COLOR: #ff0000"> title</span><span style="COLOR: #0000ff">="洗衣机=315(29.86%)"</span><span style="COLOR: #ff0000"> alt</span><span style="COLOR: #0000ff">=""</span><span style="COLOR: #0000ff">/&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />…………<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;/</span><span style="COLOR: #800000">map</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">html</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">&lt;</span><span style="COLOR: #800000">head</span><span style="COLOR: #0000ff">&gt;</span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />…………</span></div><p><br />这部分map代码其实是JFreeChart产生的，是用来产生图片上的热点链接，这也是问题产生的根源所在。你的Jsp页面通过&lt;%@ page contentType="text/html; charset=UTF-8" %&gt;或者&lt;%@ page contentType="text/html; charset=GBK" %&gt;来设置contentType这无可厚非，但map并不是由这个jsp页面产生的。它是JFreeChart通过PrintWriter产生的。查看一下你生成图片的Chart源码，其中有ChartUtilities.writeImageMap(<font color="#ff0000">pw</font>, filename, info, false)这样的语句。这是用来向页面写入map代码的。默认情况下，map代码会以服务器默认编码(ISO-8859-1)输出。这就和你的Jsp编码不一致，从而产生乱码。</p><p>原因找到了，问题也就不难解决的。设置PrintWriter的contentType与Jsp的contentType保存一致就可以了。代码如下（笔者的Web应用是基于Struts框架的）：</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #008000">//</span><span style="COLOR: #008000">PieMothAciton.java</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />    </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> ActionForward execute(ActionMapping mapping, ActionForm form,<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />            HttpServletRequest request, HttpServletResponse response)<br /><img id="Codehighlighter1_173_616_Open_Image" onclick="this.style.display='none'; Codehighlighter1_173_616_Open_Text.style.display='none'; Codehighlighter1_173_616_Closed_Image.style.display='inline'; Codehighlighter1_173_616_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_173_616_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_173_616_Closed_Text.style.display='none'; Codehighlighter1_173_616_Open_Image.style.display='inline'; Codehighlighter1_173_616_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">throws</span><span style="COLOR: #000000"> Exception </span><span id="Codehighlighter1_173_616_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"></span><span id="Codehighlighter1_173_616_Open_Text"><span style="COLOR: #000000">{    <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置输出编码格式</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        </span><span style="COLOR: #ff0000">response.setContentType("text/html;charset=UTF-8");</span><span style="COLOR: #000000"> <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <font color="#ff0000">PrintWriter out </font></span><span style="COLOR: #000000"><font color="#ff0000">=</font></span><span style="COLOR: #000000"><font color="#ff0000"> response.getWriter();<br /></font><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        …………<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String filename </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> chart.generatePieChart3D(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">月统计比例图</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                session, out);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        String graphURL </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> request.getContextPath() <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />                </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">/servlet/DisplayChart?filename=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">+</span><span style="COLOR: #000000"> filename;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        request.setAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">filename</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,filename);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        request.setAttribute(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">graphURL</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,graphURL);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> mapping.findForward(SUCCESS);        <br /><img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><p><br />重新部署你的Web应用，中文乱码文件就可以解决了。</p><p><strong>二、 饼图显示百分比</strong></p><p>在饼图中JFreeChart默认只显示选项和数值，没有显示各项所占比例。由于手头没有1.0版的JFreeChart Developer Guide（这可是要钱的，后来想想即使有，也未必能找到关于百分比这方面的说明），再加上DEMO中的饼图都没有显示百分比，无法参考。后来在网上找到了一个老版本的例子，其中能显示百分比。它是通过在PiePlot中设置的：</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">PiePlot pie;<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />pie.setPercentFormatString(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">#,###0.0#%</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><p>但1.0版本中根本就找不到setPercentFormatString这方法，JFreeChart各版本之间改动比较大，很难兼容。还好它是开源的，把它的源码都搜索了一遍，认真读了一些源码，终于理出了头绪。</p><p>原来在1.0.0-rc1版中显示百分比已经调整到StandardPieItemLabelGenerator构造函数中了，StandardPieItemLabelGenerator有三个构造函数。StandardPieItemLabelGenerator()不显示各项所占比例。另外两个可以显示比例。代码如下：<br /></p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">plot.setLabelGenerator(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> StandardPieItemLabelGenerator(StandardPieItemLabelGenerator.DEFAULT_TOOLTIP_FORMAT));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">或者采用下面自定义样式显示，{0}表示选项，{1}表示数值，{2}表示所占比例</span><span style="COLOR: #008000"><br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">plot.setLegendLabelGenerator(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> StandardPieItemLabelGenerator(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{0}: ({1}M, {2})</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">));<br /><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div><br />效果如下图：<br /><p align="center"><img src="http://www.blogjava.net/images/blogjava_net/fastpace/16577/o_image001.png" /></p><br /><br />默认显示百分比是取整的，如果要让百分比保留二位小数，可以用第三个构造函数：<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">plot.setLabelGenerator(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> StandardPieItemLabelGenerator(“{</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">}</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">{</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">}({</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">})”,<br />                    NumberFormat.getNumberInstance(),<br />                    </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> DecimalFormat(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">0.00%</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)));<br /></span></div><p>效果如下图：</p><p align="center"><img src="http://www.blogjava.net/images/blogjava_net/fastpace/16577/o_image003.png" /></p><p><br /><br /><strong>三、 混合图表（不同类型的图混合显示）</strong></p><p>我们经常用的是柱状图、曲线图、和饼图，这三类型图基本能满足大部分项目的需求。但有些项目比较特殊，可能需要在一张图上同时显示不同类型的图。这在JFreeChart中可以轻松实现。例如我们要做个流量监控的系统，该系统一天中在不同的时间段有不同的阀值（最大值），该阀值表示成阶梯线。而实际流量就是个曲线了。当流量在某个时段内超过阀值时就触发相应的事件（如限流）。要表示阀值和流量的对比关系就需要两种类型的图片在同一张图表上表示，如下图：<br /></p><p align="center"><img src="http://www.blogjava.net/images/blogjava_net/fastpace/16577/o_image005.png" /></p><p><br /><br />首先像创建普通图表一样来创建图片，笔者先创建了一个XYStep Chart。然后创建第二图表的Renderer，再分别将第二图表的Dataset、Renderer添加进第一图表的plot。实例代码如下：</p><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">MultipleChart.java</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000"><br />JFreeChart jfreechart </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ChartFactory.createXYStepAreaChart(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">监控设置</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, <br />                </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">时刻</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, <br />                </span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">流量</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, <br />                xydataset, <br />                PlotOrientation.VERTICAL, <br />                </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">, <br />                </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">, <br />                </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">);<br />        <br />        XYPlot xyplot </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> jfreechart.getXYPlot();<br /><br />…………<br /><br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">设置第二图表的Renderer</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        StandardXYItemRenderer standardxyitemrenderer </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> StandardXYItemRenderer();<br />        standardxyitemrenderer.setToolTipGenerator(</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> StandardXYToolTipGenerator(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">{0}({1}) = {2}</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">, <br />                </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> SimpleDateFormat(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">HH:mm</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">), <br />                </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> DecimalFormat(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">#,##0</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)));        <br />        <br />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">将第二图表的Dataset、Renderer添加进xyplot</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #000000">        xyplot.setDataset(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">, lineDataset);<br />        xyplot.setRenderer(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,standardxyitemrenderer); <br /></span></div><p><br />这样就创建了曲线和阶梯的混合图表。</p><p><strong>四、 其它问题</strong></p><p>1) 版本问题。<br />JFreeChart的各版本变动比较大，这在升级版本时是比较头疼的问题，升级时需要改动你代码的地方可能比较多。因此尽量采用最新的版本，新版本的文档可能比较少，但问题要相对少一些，在旧版中就出现过标注数值重叠在一起这样的问题。好的是JFreeChart是开源的，碰到解决不了的问题可以从源码中找到有参考价值的信息。</p><p>2) 设置背景透明度的BUG<br />不知道这是不是JFreeChart的一个BUG。利用chart.setBackgroundImageAlpha(0.5f)来设置背景透明度，ServletUtilities.saveChartAsPNG保存图片。将chart.setBackgroundImageAlpha(0.5f)注释掉再生成图片，发现两张图片是一样的。也就是说setBackgroundImageAlpha方法无效，具体原因笔者还不太清楚，读者大家可以自己测试看看。</p><p>以上是笔者在项目开发中总结出来的，希望大家多提宝贵意见！<br /><br />附源码：<a href="http://dev2dev.bea.com.cn/bbs/servlet/D2DServlet/download/121-28066-168127-1963/JFeeChartProject_src.rar">JFeeChartProject_src.rar</a><br /></p><img src ="http://www.blogjava.net/fastpace/aggbug/77237.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fastpace/" target="_blank">keith</a> 2006-10-25 17:08 <a href="http://www.blogjava.net/fastpace/archive/2006/10/25/77237.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>