﻿<?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-donghang73-随笔分类-学习笔记</title><link>http://www.blogjava.net/donghang73/category/45585.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 10 Aug 2011 15:40:10 GMT</lastBuildDate><pubDate>Wed, 10 Aug 2011 15:40:10 GMT</pubDate><ttl>60</ttl><item><title>为什么要对url进行encode </title><link>http://www.blogjava.net/donghang73/archive/2011/08/10/356208.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Wed, 10 Aug 2011 05:16:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2011/08/10/356208.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/356208.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2011/08/10/356208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/356208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/356208.html</trackback:ping><description><![CDATA[<div><div id="app-share-content"> <p>发现现在几乎所有的网站都对url中的汉字和特殊的字符，进行了urlencode操作，也就是：</p> <p><a href="http://hi.baidu.com/%BE%B2%D0%C4%C0%CF%C8%CB/creat/blog/">http://hi.baidu.com/%BE%B2%D0%C4%C0%CF%C8%CB/creat/blog/</a></p> <p>这个样子，中间%形式的，肯定就是我的登录用户名称了吧。</p> <p>为什么对这些字符进行了u的编码形式，是为了字符编码（gbk、utf8）还是为了不出现特殊的字符在url中？都知道要转，但是转了的真正好处呢。查看了网上的很多资料，也没有找到更加准确的说法。</p> <p>url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。</p> <p><strong>看一下php的urlencode的说明了。</strong></p> <p>urlencode &#8212; 编码 URL 字符串</p> <div u"=""> <div>string <strong><strong>urlencode</strong></strong> ( <span>string <tt>$str</tt></span> )</div> <p>返回字符串，此字符串中除了 <em>-_.</em> 之外的所有非字母数字字符都将被替换成百分号（<em>%</em>）后跟两位十六进制数，空格则编码为加号（<em>+</em>）。此编码与 WWW 表单  POST 数据的编码方式是一样的，同时与 <em>application/x-www-form-urlencoded</em>  的媒体类型编码方式一样。由于历史原因，此编码在将空格编码为加号（+）方面与 RFC1738 编码（参见 <a href="http://cn.php.net/manual/zh/function.rawurlencode.php">rawurlencode()</a>）不同。此函数便于将字符串编码并将其用于  URL 的请求部分，同时它还便于将变量传递给下一页。</p> <p>标准的英文说明是：</p></div> <blockquote>"...Only alphanumerics [0-9a-zA-Z], the special  characters "$-_.+!*'()," <strong>[not including the quotes - ed]</strong>, and  reserved characters used for their reserved purposes may be used unencoded  within a URL."</blockquote> <blockquote></blockquote> <p>那哪些字符是需要转化的呢？</p> <p><strong>1. ASCII 的控制字符</strong></p> <p>这些字符都是不可打印的，自然需要进行转化。</p> <p><strong>2. 一些非ASCII字符</strong></p> <p>这些字符自然是非法的字符范围。转化也是理所当然的了。</p> <p><strong>3. 一些保留字符</strong></p> <p>很明显最常见的就是&#8220;&amp;&#8221;了，这个如果出现在url中了，那你认为是url中的一个字符呢，还是特殊的参数分割用的呢？</p> <p><strong>4. 就是一些不安全的字符了。</strong></p> <p>例如：空格。为了防止引起歧义，需要被转化为&#8220;+&#8221;。</p> <p>明白了这些，也就知道了为什么需要转化了，而转化的规则也是很简单的。</p> <p>按照每个字符对应的字符编码，不是符合我们范围的，统统的转化为%的形式也就是了。自然也是16进制的形式。</p> <p><strong>和字符编码无关</strong></p> <p>通过urlencode的转化规则和目的，我们也很容易的看出，urleocode是基于字符编码的。同样的一个汉字，不同的编码类型，肯定对应不同的urleocode的串。gbk编码的有gbk的encode结果。</p> <p>apache等服务器，接受到字符串后，可以进行decode，但是还是无法解决编码的问题。编码问题，还是需要靠约定或者字符编码的判断解决。</p> <p>因此，urleocode只是为了url中一些非ascii字符，可以正确无误的被传输，至于使用哪种编码，就不是eocode所关心和解决的问题了。</p> <p>编码问题，不是urlencode所要解决的。<br />转自：<a href="http://apps.hi.baidu.com/share/detail/32230450">http://apps.hi.baidu.com/share/detail/32230450</a></p> <p><strong>参考资料：</strong></p> <p><a href="http://www.blooberry.com/indexdot/html/topics/urlencoding.htm">http://www.blooberry.com/indexdot/html/topics/urlencoding.htm</a>  </p> <p><a href="http://cn.php.net/manual/zh/function.urlencode.php">http://cn.php.net/manual/zh/function.urlencode.php<br /><br /></a></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p></div></div><img src ="http://www.blogjava.net/donghang73/aggbug/356208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2011-08-10 13:16 <a href="http://www.blogjava.net/donghang73/archive/2011/08/10/356208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hibernate.hbm2ddl.auto参数</title><link>http://www.blogjava.net/donghang73/archive/2011/04/17/348442.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Sun, 17 Apr 2011 08:53:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2011/04/17/348442.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/348442.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2011/04/17/348442.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/348442.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/348442.html</trackback:ping><description><![CDATA[<p>&lt;property name="hibernate.hbm2ddl.auto" value="update" /&gt;<br />
<br />
</p>
<p>Hibernate Reference Documentation解释如下：<br />
hibernate.hbm2ddl.auto Automatically validate or export schema DDL to the database when the SessionFactory is created. With create-drop, the database schema will be dropped when the SessionFactory is closed explicitly. &nbsp;eg. validate | update | create | create-drop<br />
<br />
</p>
<p>这个参数的作用主要用于：自动创建|更新|验证数据库表结构。<br />
如果没有此方面的需求建议不设置此属性，默认是不对数据库结构作任何改变<br />
<br />
</p>
<p>其它几个参数的意思:<br />
validate &nbsp; &nbsp;&nbsp;<br />
每次加载hibernate时，验证创建数据库表结构，只会和数据库中的表进行比较，不会创建新表，但是会插入新值。<br />
<br />
</p>
<p>create<br />
每次加载hibernate时都会删除上一次的生成的表，然后根据你的model类再重新来生成新表，哪怕两次没有任何改变也要这样执行，这就是导致数据库表数据丢失的一个重要原因。<br />
<br />
</p>
<p>create-drop<br />
每次加载hibernate时根据model类生成表，但是sessionFactory一关闭,表就自动删除。<br />
<br />
</p>
<p>update<br />
最常用的属性，第一次加载hibernate时根据model类会自动建立起表的结构（前提是先建立好数据库），以后加载hibernate时根据 model类自动更新表结构，即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后，表结构是不会被马上建立起来的，是要等 应用第一次运行起来后才会。</p>
<img src ="http://www.blogjava.net/donghang73/aggbug/348442.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2011-04-17 16:53 <a href="http://www.blogjava.net/donghang73/archive/2011/04/17/348442.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Web中路径问题</title><link>http://www.blogjava.net/donghang73/archive/2011/04/15/348370.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Fri, 15 Apr 2011 09:25:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2011/04/15/348370.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/348370.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2011/04/15/348370.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/348370.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/348370.html</trackback:ping><description><![CDATA[<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">Java中使用的路径，分为两种：绝对路径和相对路径。归根结底，Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法，都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径，从而找到资源的！</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">在开发Web方面的应用时, 经常需要获取 服务器中当前WebRoot的物理路径。</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">如果是Servlet , Action , Controller, 或则Filter , Listener , 拦截器等相关类时， 我们只需要获得ServletContext， 然后通过ServletContext.getRealPath("/")来获取当前应用在服务器上的物理地址。</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">如果在类中取不到ServletContext时， 有两种方式可以做到：</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">1. 利用Java的类加载机制 调用 XXX.class.getClassLoader().getResource(""); 方法来获取到ClassPath , 然后处理获得WebRoot目录，这种方式只能是该class在WebRoot/WEB-INF/classes下才能生效， 如果该class被打包到一个jar文件中， 则该方法失效。这时就应该用下面一种方式。</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">2. spring框架的思路, 在WEB-INF/web.xml中 ， 创建一个webAppRootKey的param, 指定一个值（默认为webapp.root）作为键值， 然后通过Listener , 或者Filter , 或者Servlet 执行String webAppRootKey = getServletContext().getRealPath("/"); 并将webAppRootKey对应的webapp.root 分别作为Key , Value写到System Properties系统属性中。之后在程序中通过System.getProperty("webapp.root")来获得WebRoot的物理路 径。</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">根据第二种的思路，我们还可以再扩展一下。不过对于在部署在一台服务器中的应用来说，若还不是你所需请再往下看。</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">下面是一些得到classpath和当前类的绝对路径的一些方法。你可使用其中的一些方法来得到你需要的资源的绝对路径:</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">1. DebitNoteAction.class.getResource("")</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">得到的是当前类FileTest.class文件的URI目录。不包括自己！</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">如：file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">atacarnet/src/com/evi/modules/atacarnet/action/</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">2. DebitNoteAction.class.getResource("/")</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">得到的是当前的classpath的绝对URI路径。</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">如：file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">3. Thread.currentThread().getContextClassLoader().getResource("")</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">得到的也是当前ClassPath的绝对URI路径</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">如：file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">4. DebitNoteAction.class.getClassLoader().getResource("") 或ClassLoader.getSystemResource("")</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">得到的也是当前ClassPath的绝对URI路径。</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">如：file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">5. 取得服务器相对路径</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">System.getProperty("user.dir")</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">例如:E:\apache-tomcat-5.5.16\apache-tomcat-5.5.16\bin</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">我推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">6. 取得项目中的绝对路径</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">一般用request.getRealPath("/")或request.getRealPath("/config/")</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">但现在不提倡使用request.getRealPath("/")了，大家可试用ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">要取得src的文件非常容易，因为src是默认的相对目录，比如你说要取得src下com目录的test.java文件，你只需要这样就够了</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">File f = new File(com/test.java);</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">但如果我要取得不在src目录或者WebRoot目录下的文件呢，而是要从src或者WebRoot同级的目录中取呢，比如说doc吧</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">我的硬方法是这样实现的：</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">String path = this.getServletContext().getRealPath("/");</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">Properties p = new Properties();</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">p.load(new FileInputStream(new File(path.substring(0,(path.lastIndexOf("<a target="_blank" style="text-decoration: none; color: #336699; ">\\WebRoot</a>&nbsp;") + 1)) + "doc/db.properties")));</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">System.out.println(p.getProperty("driverName"));</p>
<p style="padding-top: 0.9em; padding-right: 0px; padding-bottom: 0.9em; padding-left: 0px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font-family: verdana, sans-serif; font-size: 14px; line-height: 21px; ">转自：<span  style="font-family: Simsun; line-height: normal; font-size: medium; "><a href="http://blog.csdn.net/c5153000/archive/2011/03/23/6272195.aspx">http://blog.csdn.net/c5153000/archive/2011/03/23/6272195.aspx</a></span></p>
<img src ="http://www.blogjava.net/donghang73/aggbug/348370.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2011-04-15 17:25 <a href="http://www.blogjava.net/donghang73/archive/2011/04/15/348370.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JFreeChart实例，带详细注释</title><link>http://www.blogjava.net/donghang73/archive/2010/07/25/jfreechart_bar.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Sun, 25 Jul 2010 14:44:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2010/07/25/jfreechart_bar.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/327102.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2010/07/25/jfreechart_bar.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/327102.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/327102.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近用到了JFreeChart，现将实例代码贴出来，大家可以参考一下，代码中如有错误或可以改进的地方，还请大家指正。通过下面的代码，可以很清晰地看出JFreeChart的结构，核心即为chart, plot, XXXAxis, renderer，了解了它们的常用方法后，会发现其实JFreeChart使用起来是很简单方便的。废话不多说了，还是直接看示例吧。&nbsp;1.柱状图...&nbsp;&nbsp;<a href='http://www.blogjava.net/donghang73/archive/2010/07/25/jfreechart_bar.html'>阅读全文</a><img src ="http://www.blogjava.net/donghang73/aggbug/327102.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2010-07-25 22:44 <a href="http://www.blogjava.net/donghang73/archive/2010/07/25/jfreechart_bar.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache 和Subversion集成安装与配置[转]</title><link>http://www.blogjava.net/donghang73/archive/2010/07/25/327098.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Sun, 25 Jul 2010 14:17:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2010/07/25/327098.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/327098.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2010/07/25/327098.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/327098.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/327098.html</trackback:ping><description><![CDATA[<span style="color: red">1,apache_2.0.63-win32-x86-no_ssl.msi</span><br />
<span>下载:<a class="smarterwiki-linkify" href="http://apache.mirror.phpchina.com/httpd/binaries/win32/apache_2.0.63-win32-x86-no_ssl.msi">http://apache.mirror.phpchina.com/httpd/binaries/win32/apache_2.0.63-win32-x86-no_ssl.msi</a></span><br />
<span style="color: red">2,svn-1.4.5-setup.exe</span><br />
<span>下载地址:<a class="smarterwiki-linkify" href="http://subversion.tigris.org/files/documents/15/39559/svn-1.4.5-setup.exe">http://subversion.tigris.org/files/documents/15/39559/svn-1.4.5-setup.exe</a></span><br />
当然,你也可以选择安装TortoiseSVN.但是我没有装,因为我的源码管理都是用netbeans完成的.<br />
<br />
好了,准备的两个软件都下载下来以后,就可以开始安装了.<br />
<span>首先安装apache,一般来说直接点下一步就可以了,在设置domain以及host的时候,设置为localhost就可以了,Email你可以填你自己的Email,也可以随便填一个.安装apache要注意的是,你的电脑上80端口不能被占用, 否则你的http服务是启动不起来的,我就遇到过这事,因为我用了skype,它在本机上打开了80和443端口来监听,搞得我一开始装不好,总是启动不起来,后来才发现是skype占用了80端口,于是把skype的设置改了以后,重装apache才成功.装好apache以后,这个时候,它已经在运行了,你可以在浏览器的地址栏输入<a class="smarterwiki-linkify" href="http://localhost%e7%9c%8b%e7%9c%8b,%e6%98%af%e5%90%a6%e5%ae%89%e8%a3%85%e6%88%90%e5%8a%9f,%e5%a6%82%e6%9e%9c%e5%ae%89%e8%a3%85%e6%88%90%e5%8a%9f%e7%9a%84%e8%af%9d,%e8%bf%99%e4%b8%aa%e6%97%b6%e5%80%99%e6%b5%8f%e8%a7%88%e5%99%a8%e9%87%8c%e9%9d%a2%e5%ba%94%e8%af%a5%e6%98%af%e5%8f%af%e4%bb%a5%e7%9c%8b%e5%88%b0%e4%b8%80%e4%b8%aa%e9%a1%b5%e9%9d%a2%e7%9a%84/">http://localhost看看,是否安装成功,如果安装成功的话,这个时候浏览器里面应该是可以看到一个页面的</a>.</span><br />
然后,再安装svn-1.4.5-setup.exe,也很简单,一步一步点下步就可以了, 在安装的过程中,它会默认选中一些选项,其中就有一个是是否对apache的HTTP服务器提供支持的选项,这个默认是勾上的,不要去反选它,其它的你可以反选掉.然后svn就宣布安装成功了.你可以到CMD下面去试一下svn这个命令,如果有输出,则说明安装成功了,如果提示svn 不是内部或外部命令，也不是可运行的程序或批处理文件。那就说明没有装好.或者没有把这个命令加入到path中,所以最好的办法是到svn的安装目录下的 bin里面去看一下.<br />
两者都装好了以后,就开始配置,当然,配置也是最重要的.<br />
首先要建立一个数据仓库,我们假设建在E盘,数据仓库最好不要建在C盘,因为C盘重装系统以后就格了.我们先在E盘下面建立一个目录叫svnroot,然后在svnroot下面再建立一个我们专门放我们工程的目录,比如叫MyProject.于是我们在E盘下面就有了这个一个文件夹:<span style="color: rgb(255,0,0)">E:\svnroot\MyProject</span>, 然后我们用svnadmin的命令,使这个文件夹变成我们的数据仓库,命令如下:<br />
<span style="color: rgb(8,23,255)">svnadmin create E:\svnroot\MyProject</span><br />
如果运行成功的话,什么也没有输出,这个时候,我们再来到MyProject文件夹下面,我们会发现多了几个文件夹和文件,我们打开<span style="color: rgb(255,0,0)">conf</span>文件夹,然后再打开<span style="color: rgb(255,0,0)">svnserve.conf</span>文件,找到如下行# password-db = passwd,然后把它前面的#去掉,表示MyProject是需要密码验证的.但是我们密码设在哪里呢,这个时候我们再打开conf文件夹下面的 passwd文件,用文本编辑器打开,在[users]下面加上我们需要启动的人员的用户和密码,比如<br />
<span style="color: rgb(8,23,255)">[users]<br />
hadeslee=hadeslee1234<br />
tom=123456</span><br />
这个的话,我们就启动了两个用户,一个叫hadeslee,密码是hadeslee1234,一个叫tom,密码是123456.然后我们保存<span style="color: rgb(255,0,0)">passwd</span>文件.然后,我们再建一个文件,叫<span style="color: rgb(255,0,0)">access.auth</span>,这个文件是设置访问权限的,里面内容如下:<br />
<span style="color: rgb(8,23,255)">[MyProject:/]<br />
hadeslee = rw<br />
[MyProject:/module1]<br />
tom=rw<br />
hadeslee=rw</span><br />
这表示,MyProject下面的所有子目录hadeslee都是有权限读写的,但是tom只有权限读写此项目下面的module1目录,这个各自的访问权限就分的更细致了.有关于MyProject文件夹下面的设置,我们就告一段落了,我们现在开始设置apache,使它能和subvertion一起工作.<br />
<br />
首先来到Subersion的安装目录,进入它的bin目录,我们会发现如下两个文件:<br />
<span style="color: rgb(255,8,54)">mod_authz_svn.so<br />
mod_dav_svn.so</span><br />
我们把这两个文件复制一下,粘帖到 apache的安装目录下的modules文件中,然后我们再打开apache安装目录下的conf文件夹,打开httpd.conf文件.增加如下两行：<br />
<span style="color: rgb(0,16,255)">LoadModule dav_svn_module modules/mod_dav_svn.so<br />
LoadModule authz_svn_module modules/mod_authz_svn.so</span><br />
注意，由于dav_svn需要dav_module的支持，所以要确保下面这一行没有被注释，并且保证在dav_svn之前加载：<br />
<span style="color: rgb(0,16,255)">LoadModule dav_module modules/mod_dav.so</span><br />
然后模块的设置就完成了,下面我们要设置SVN的目录,以使我们的apache能知道访问不同的URL的时候,它去哪里寻找这个URL所对应的SVN目录.<br />
在<span style="color: rgb(0,16,255)"><span style="color: rgb(255,0,0)">httpd.conf</span></span>文件中,增加如下内容:<br />
<span style="color: rgb(0,16,255)">&lt;Location /svn/MyProject&gt;<br />
DAV svn<br />
SVNPath E:/svnroot/MyProject<br />
<br />
AuthzSVNAccessFile E:/svnroot/MyProject/conf/access.auth<br />
Satisfy Any<br />
Require valid-user<br />
<br />
AuthType Basic<br />
AuthName "Subversion repositories"<br />
AuthUserFile&nbsp; E:/svnroot/MyProject/conf/users.auth<br />
Require valid-user<br />
&lt;/Location&gt; </span><br />
<br />
添加完上面这些,我们会发现<span style="color: rgb(0,16,255)"><span style="color: rgb(255,0,0)">access.auth</span></span>是我们刚才新建的,可是<span style="color: rgb(0,16,255)"><span style="color: rgb(255,0,0)">users.auth</span></span>我们并没有新建啊.怎么就把它加进去了.不要急,现在我们就来生成<span style="color: rgb(0,16,255)"><span style="color: rgb(255,0,0)">users.auth</span></span>文件.<br />
<br />
进入 apache的安装目录的bin文件夹,输入如下命令:<br />
<br />
<span style="color: rgb(255,0,48)">D:\Program Files\Apache Group\Apache2\bin&gt;<span style="color: rgb(0,16,255)">htpasswd -cb users.auth hadeslee hadeslee1234</span><br />
Automatically using MD5 format.<br />
Adding password for user hadeslee<br />
<br />
D:\Program Files\Apache Group\Apache2\bin&gt;<br />
<br />
</span>我们就会发现在bin目录生成了users.auth,我们可以看到,hadeslee用户名已经被添加进去了,密码是用MD5加密过的.然后我们还要增加用户呢,可以用如下方法:<br />
<span style="color: rgb(255,0,0)">D:\Program Files\Apache Group\Apache2\bin&gt;<span style="color: rgb(0,16,255)">htpasswd -b users.auth tom 123456</span><br />
Automatically using MD5 format.<br />
Adding password for user tom<br />
<br />
D:\Program Files\Apache Group\Apache2\bin&gt;</span><br />
<br />
只是在生成密码的时候,小了一个c的参数,因为c表示重新生成一个这样的文件,我们第一次的时候是要加的,后面我们要添加用户的时候,就不用这个c了.然后打开<span style="color: rgb(0,16,255)"><span style="color: rgb(255,0,0)">users.auth</span></span>,会发现两个用户都已经在里面了,这个时候,我们把<span style="color: rgb(0,16,255)"><span style="color: rgb(255,0,0)">users.auth</span></span>移到<span style="color: rgb(255,0,0)"><span style="color: rgb(0,16,255)"><span style="color: rgb(255,0,0)">E:/svnroot/MyProject/conf/</span></span></span>里面去,使我们上面的设置生效.<br />
<br />
这个时候,我们的设置就完成了.可以在浏览器里面输入<span style="color: rgb(255,0,0)"><span style="color: rgb(0,16,255)"><span style="color: rgb(255,0,0)"><span style="color: rgb(255,0,0)"><span style="color: rgb(0,16,255)"><span><a class="smarterwiki-linkify" href="http://localhost/svn/MyProject">http://localhost/svn/MyProject</a></span></span></span></span></span></span>试试看.<br />
<br />
如果以后我们还要加入其它的项目呢,可以有两点解决方式<br />
1,把以后的项目也导入到我们的MyProject的仓库中,这个的话,就不用改什么配置了<br />
2,新建一个数据仓库,然后只要按上面的步骤,把新的&lt;Location...&gt;设置放到 httpd.conf里面就可以了.<br />
当然,验证文件,访问权限文件,还有访问SVN的密码都要自己按上面的方法再设一遍.<br />
<br />
祝大家能够设置成功:)<br />
<br />
转自：http://www.blogjava.net/hadeslee/archive/2008/03/12/185788.html
<img src ="http://www.blogjava.net/donghang73/aggbug/327098.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2010-07-25 22:17 <a href="http://www.blogjava.net/donghang73/archive/2010/07/25/327098.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jad_反编译Class文件</title><link>http://www.blogjava.net/donghang73/archive/2010/07/22/326867.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Thu, 22 Jul 2010 14:05:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2010/07/22/326867.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/326867.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2010/07/22/326867.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/326867.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/326867.html</trackback:ping><description><![CDATA[<span style="font-size: 14pt"><span style="font-family: 宋体; font-size: 12pt">1、下载<span lang="EN-US">jadclipse插件<br />
注意：jadclipse_3.1.0.jar版本，该版本支持eclipse3.1M6～3.2M2<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jadclipse_3.2.0.jar版本，该版本支持eclipse3.2M3和eclipse3.2M4.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jadclipse_3.2.4.jar版本，该版本支持eclipse3.2M5～3.3M5<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jadclipse_3.3.0.jar版本，该版本支持eclipse3.3M6及以上<br />
<br />
2、下载jad.exe，并将下载好的jad.exe拷贝到jre的bin的目录下，或者把jad的执行文件的绝对路径加入到环境变量PATH中。<br />
<br />
3、配置jadClipse，在在%ECLIPSE_HOME%\目录下建立myplugins\jadclipse\eclipse\plugins的目录结构,将jadclipse_3.3.0.jar(用于Eclipse3.5)放到plugins目录下面,再在%ECLIPSE_HOME%\links目录下面建立jadclipse.link的文件(名字可以随便取)，jadclipse.link的内容为：path=..\\jadclipse（注意一定要双反斜杠"\\"）<br />
<br />
4、重新启动eclipse，查看 window-&gt;preferences-&gt;java-&gt;jadClipse，如果出现jadClipse则说明上述配置成功，否则检查上述配置。<br />
<br />
5、Path to decomplier:指定反编译工具的jad文件所在的位置。（可以指定为jre的bin的目录下的jad.exe）<br />
<br />
6、把*.class文件的associated editors设置为jadClipse Class File Viewer做为默认项</span> <br />
<br />
<span style="font-size: 12pt">另：批量反编译<br />
在cmd中，进入到class文件所在路径下，输入命令：jad -o -r -s java -d src *.class<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数的含义：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o：覆盖旧文件，而且不用提示确认。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -r：重新加载生成包结构。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -s：定义输出文件的扩展名。jad为默认扩展名，我们反编译后当然是要.java源文件了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -d：输出文件的目录。src表示反编译后的所有文件都放在src目录下。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *.class：指定解析该文件夹下的所有以.class结尾的文件，即解析class文件</span></span></span>
<img src ="http://www.blogjava.net/donghang73/aggbug/326867.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2010-07-22 22:05 <a href="http://www.blogjava.net/donghang73/archive/2010/07/22/326867.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>myeclipse中UTF-8设置</title><link>http://www.blogjava.net/donghang73/archive/2010/07/20/326677.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Tue, 20 Jul 2010 14:03:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2010/07/20/326677.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/326677.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2010/07/20/326677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/326677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/326677.html</trackback:ping><description><![CDATA[<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 12" />
<meta name="Originator" content="Microsoft Word 12" />
<link rel="File-List" href="file:///C:%5CUsers%5CDonghang%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml" /><!--[if gte mso 9]><![endif]-->
<link rel="themeData" href="file:///C:%5CUsers%5CDonghang%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx" />
<link rel="colorSchemeMapping" href="file:///C:%5CUsers%5CDonghang%5CAppData%5CLocal%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml" /><!--[if gte mso 9]><xml>
Normal
0
7.8 磅
0
2
false
false
false
EN-US
ZH-CN
X-NONE
</xml><![endif]--><!--[if gte mso 9]><![endif]--><style>
<!--
/* Font Definitions */
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:""@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{
mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:"Calibri","sans-serif";
mso-bidi-font-family:"Times New Roman";}
.MsoChpDefault
{
mso-bidi-font-family:"Times New Roman";}
/* Page Definitions */
@page
{}
@page Section1
{size:595.3pt 841.9pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
layout-grid:15.6pt;}
div.Section1
{page:Section1;}
-->
</style><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{
mso-style-parent:"";
font-size:10.5pt;
font-family:"Calibri","sans-serif";
mso-bidi-font-family:"Times New Roman";}
</style>
<![endif]-->
<p>myeclipse<span style="font-family: 宋体;">中</span>UTF-8<span style="font-family: 宋体;">设置</span></p>
<p>&nbsp;&nbsp; <span style="font-family: 宋体;">如果要使插件开发应用能有更好的国际化支持，能够最大程度的支持中文输出，则最好使</span> Java<span style="font-family: 宋体;">文件使用</span>UTF-8<span style="font-family: 宋体;">编码。然而，</span>Eclipse<span style="font-family: 宋体;">工作空间</span>(workspace)<span style="font-family: 宋体;">的缺省字符编码是操作系统缺省的编码，简体中文操作系统</span> (Windows XP<span style="font-family: 宋体;">、</span>Windows 2000<span style="font-family: 宋体;">简体中文</span>)<span style="font-family: 宋体;">的缺省编码是</span>GB18030<span style="font-family: 宋体;">，在此工作空间中建立的工程编码是</span>GB18030<span style="font-family: 宋体;">，工程中建立的</span>java<span style="font-family: 宋体;">文件也是</span>GB18030<span style="font-family: 宋体;">。如果要使</span>
<span style="font-family: 宋体;">新建立工程、</span>java<span style="font-family: 宋体;">文件直接使</span>UTF-8<span style="font-family: 宋体;">则需要做以下工作：</span></p>
<p>&nbsp; <br />
</p>
<p> <strong><span style="color: red; background: none repeat scroll 0% 0% yellow;">1</span><span style="font-family: 宋体; color: red; background: none repeat scroll 0% 0% yellow;">、</span></strong>windows-&gt;Preferences...<span style="font-family: 宋体;">打开</span>"<span style="font-family: 宋体;">首选项</span>"<span style="font-family: 宋体;">对话框，左侧导航树，导航到</span>general-&gt;Workspace<span style="font-family: 宋体;">，右</span> <span style="font-family: 宋体;">侧</span>Text file encoding<span style="font-family: 宋体;">，选择</span>Other<span style="font-family: 宋体;">，改变为</span>UTF-8<span style="font-family: 宋体;">，以后新建立工程其属性对话框中的</span>Text file encoding<span style="font-family: 宋体;">即为</span>UTF-8<span style="font-family: 宋体;">。</span></p>
<p><br />
</p>
<p><strong><span style="color: red; background: none repeat scroll 0% 0% yellow;">2</span><span style="font-family: 宋体; color: red; background: none repeat scroll 0% 0% yellow;">、</span></strong>windows-&gt;Preferences...<span style="font-family: 宋体;">打开</span>"<span style="font-family: 宋体;">首选项</span>"<span style="font-family: 宋体;">对话框，左侧导航树，导航到</span><span>general-&gt;Content
Types</span><span style="font-family: 宋体;">，右侧</span>Context Types<span style="font-family: 宋体;">树，点开</span>Text<span style="font-family: 宋体;">，选择</span>Java Source File<span style="font-family: 宋体;">，在下面的</span>Default encoding<span style="font-family: 宋体;">输入框中输入</span>UTF-8<span style="font-family: 宋体;">，点</span>Update<span style="font-family: 宋体;">，则设置</span>Java<span style="font-family: 宋体;">文件编码为</span>UTF-8<span style="font-family: 宋体;">。其他</span>java<span style="font-family: 宋体;">应用开发相关的文件</span>
<span style="font-family: 宋体;">如：</span>properties<span style="font-family: 宋体;">、</span>XML<span style="font-family: 宋体;">等已经由</span>Eclipse<span style="font-family: 宋体;">缺省指定，分别为</span>ISO8859-1<span style="font-family: 宋体;">，</span>UTF-8<span style="font-family: 宋体;">，如开发中确需改变编码格式则可以在此指定。</span></p>
<p><br />
</p>
<p><strong><span style="color: red; background: none repeat scroll 0% 0% yellow;">3</span><span style="font-family: 宋体; color: red; background: none repeat scroll 0% 0% yellow;">、</span></strong><span style="font-family: 宋体;">经过上述两步，新建</span>java<span style="font-family: 宋体;">文件即为</span>UTF-8<span style="font-family: 宋体;">编码，</span>Eclipse<span style="font-family: 宋体;">编译、运行、调试都没问题，但是做</span>RCP<span style="font-family: 宋体;">应用的</span>Product<span style="font-family: 宋体;">输出时、或者插件</span>
<span style="font-family: 宋体;">输出时，则总是出错，要么不能编译通过</span>(<span style="font-family: 宋体;">输出时要重新</span>compile)<span style="font-family: 宋体;">、要么输出的插件运行时中文显示乱码。此时需要再</span>RCP<span style="font-family: 宋体;">应用、或插件</span>Plugin<span style="font-family: 宋体;">工</span>
<span style="font-family: 宋体;">程的</span>build.properties<span style="font-family: 宋体;">中增加一行，</span>javacDefaultEncoding.. = UTF-8<span style="font-family: 宋体;">。让输出时编译知道</span>java<span style="font-family: 宋体;">源文件时</span>UTF-8<span style="font-family: 宋体;">编码。这个设置需要保证所有的</span>java<span style="font-family: 宋体;">源文件时</span>UTF-8<span style="font-family: 宋体;">编码格式，如果不全是，可以参考</span> Eclipse<span style="font-family: 宋体;">帮中</span><span>(Plug-in Development Environment Guide &gt; Reference &gt; Feature
and Plug-in Build configuration)</span><span style="font-family: 宋体;">，建议全部</span>java<span style="font-family: 宋体;">源文件是</span>UTF-8<span style="font-family: 宋体;">编码。</span></p>
<p>&nbsp;&nbsp; <span style="font-family: 宋体;">如果插件开发、</span>RCP<span style="font-family: 宋体;">应用开发原来基于其他编码，如</span>GB18030<span style="font-family: 宋体;">，想转换为</span>UTF-8<span style="font-family: 宋体;">，则首先，做以上工作；然后通过查找编码转换工具，如基于</span> iconv<span style="font-family: 宋体;">的批量转换工具，将原编码转换为</span>UTF-8<span style="font-family: 宋体;">编码，注意只转换</span>java<span style="font-family: 宋体;">源文件，其他类型文件可能已经是比较合适的编码了；将原工程属性中的</span> Text file encoding<span style="font-family: 宋体;">，从原编码改为</span>UTF-8<span style="font-family: 宋体;">即可。</span></p>
<img src ="http://www.blogjava.net/donghang73/aggbug/326677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2010-07-20 22:03 <a href="http://www.blogjava.net/donghang73/archive/2010/07/20/326677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]JFreeChart样式设置指南</title><link>http://www.blogjava.net/donghang73/archive/2010/07/20/326669.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Tue, 20 Jul 2010 12:35:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2010/07/20/326669.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/326669.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2010/07/20/326669.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/326669.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/326669.html</trackback:ping><description><![CDATA[<p>JFreeChart类：<br />
void setAntiAlias(boolean flag)&nbsp;&nbsp;&nbsp; 字体模糊边界<br />
void setBackgroundImage(Image image)&nbsp;&nbsp; 背景图片<br />
void setBackgroundImageAlignment(int alignment) 背景图片对齐方式（参数常量在org.jfree.ui.Align类中定义）<br />
void setBackgroundImageAlpha(float alpha) 背景图片透明度（0.0～1.0）<br />
void setBackgroundPaint(Paint paint)&nbsp;&nbsp; 背景色<br />
void setBorderPaint(Paint paint)&nbsp;&nbsp; 边界线条颜色<br />
void setBorderStroke(Stroke stroke)&nbsp;&nbsp; 边界线条笔触<br />
void setBorderVisible(boolean visible)&nbsp;&nbsp; 边界线条是否可见</p>
<p>-----------------------------------------------------------------------------------------------------------</p>
<p>TextTitle类：<br />
void setFont(Font font)&nbsp;&nbsp;&nbsp;&nbsp; 标题字体<br />
void setPaint(Paint paint)&nbsp;&nbsp;&nbsp; 标题字体颜色<br />
void setText(String text)&nbsp;&nbsp;&nbsp; 标题内容</p>
<p>-----------------------------------------------------------------------------------------------------------</p>
<p>StandardLegend(Legend)类：<br />
void setBackgroundPaint(Paint paint)&nbsp;&nbsp; 图示背景色<br />
void setTitle(String title)&nbsp;&nbsp;&nbsp; 图示标题内容<br />
void setTitleFont(Font font)&nbsp;&nbsp;&nbsp; 图示标题字体<br />
void setBoundingBoxArcWidth(int arcWidth) 图示边界圆角宽<br />
void setBoundingBoxArcHeight(int arcHeight) 图示边界圆角高<br />
void setOutlinePaint(Paint paint)&nbsp;&nbsp; 图示边界线条颜色<br />
void setOutlineStroke(Stroke stroke)&nbsp;&nbsp; 图示边界线条笔触<br />
void setDisplaySeriesLines(boolean flag) 图示项是否显示横线（折线图有效）<br />
void setDisplaySeriesShapes(boolean flag) 图示项是否显示形状（折线图有效）<br />
void setItemFont(Font font)&nbsp;&nbsp;&nbsp; 图示项字体<br />
void setItemPaint(Paint paint)&nbsp;&nbsp;&nbsp; 图示项字体颜色<br />
void setAnchor(int anchor)&nbsp;&nbsp;&nbsp; 图示在图表中的显示位置（参数常量在Legend类中定义）</p>
<p>-----------------------------------------------------------------------------------------------------------</p>
<p>Axis类：<br />
void setVisible(boolean flag)&nbsp;&nbsp;&nbsp; 坐标轴是否可见<br />
void setAxisLinePaint(Paint paint)&nbsp;&nbsp; 坐标轴线条颜色（3D轴无效）<br />
void setAxisLineStroke(Stroke stroke)&nbsp;&nbsp; 坐标轴线条笔触（3D轴无效）<br />
void setAxisLineVisible(boolean visible) 坐标轴线条是否可见（3D轴无效）<br />
void setFixedDimension(double dimension) （用于复合表中对多坐标轴的设置）<br />
void setLabel(String label)&nbsp;&nbsp;&nbsp; 坐标轴标题<br />
void setLabelFont(Font font)&nbsp;&nbsp;&nbsp; 坐标轴标题字体<br />
void setLabelPaint(Paint paint)&nbsp;&nbsp;&nbsp; 坐标轴标题颜色<br />
void setLabelAngle(double angle)`&nbsp;&nbsp; 坐标轴标题旋转角度（纵坐标可以旋转）<br />
void setTickLabelFont(Font font)&nbsp;&nbsp; 坐标轴标尺值字体<br />
void setTickLabelPaint(Paint paint)&nbsp;&nbsp; 坐标轴标尺值颜色<br />
void setTickLabelsVisible(boolean flag)&nbsp;&nbsp; 坐标轴标尺值是否显示<br />
void setTickMarkPaint(Paint paint)&nbsp;&nbsp; 坐标轴标尺颜色<br />
void setTickMarkStroke(Stroke stroke)&nbsp;&nbsp; 坐标轴标尺笔触<br />
void setTickMarksVisible(boolean flag)&nbsp;&nbsp; 坐标轴标尺是否显示</p>
<p>ValueAxis(Axis)类：<br />
void setAutoRange(boolean auto)&nbsp;&nbsp;&nbsp; 自动设置数据轴数据范围<br />
void setAutoRangeMinimumSize(double size) 自动设置数据轴数据范围时数据范围的最小跨度<br />
void setAutoTickUnitSelection(boolean flag) 数据轴的数据标签是否自动确定（默认为true）<br />
void setFixedAutoRange(double length)&nbsp;&nbsp; 数据轴固定数据范围（设置100的话就是显示MAXVALUE到MAXVALUE-100那段数据范围）<br />
void setInverted(boolean flag)&nbsp;&nbsp;&nbsp; 数据轴是否反向（默认为false）<br />
void setLowerMargin(double margin)&nbsp;&nbsp; 数据轴下（左）边距<br />
void setUpperMargin(double margin)&nbsp;&nbsp; 数据轴上（右）边距<br />
void setLowerBound(double min)&nbsp;&nbsp;&nbsp; 数据轴上的显示最小值<br />
void setUpperBound(double max)&nbsp;&nbsp;&nbsp; 数据轴上的显示最大值<br />
void setPositiveArrowVisible(boolean visible) 是否显示正向箭头（3D轴无效）<br />
void setNegativeArrowVisible(boolean visible) 是否显示反向箭头（3D轴无效）<br />
void setVerticalTickLabels(boolean flag) 数据轴数据标签是否旋转到垂直<br />
void setStandardTickUnits(TickUnitSource source) 数据轴的数据标签（可以只显示整数标签，需要将AutoTickUnitSelection设false）</p>
<p>NumberAxis(ValueAxis)类：<br />
void setAutoRangeIncludesZero(boolean flag) 是否强制在自动选择的数据范围中包含0<br />
void setAutoRangeStickyZero(boolean flag) 是否强制在整个数据轴中包含0，即使0不在数据范围中<br />
void setNumberFormatOverride(NumberFormat formatter) 数据轴数据标签的显示格式<br />
void setTickUnit(NumberTickUnit unit)&nbsp;&nbsp; 数据轴的数据标签（需要将AutoTickUnitSelection设false）</p>
<p>DateAxis(ValueAxis)类：<br />
void setMaximumDate(Date maximumDate)&nbsp;&nbsp; 日期轴上的最小日期<br />
void setMinimumDate(Date minimumDate)&nbsp;&nbsp; 日期轴上的最大日期<br />
void setRange(Date lower,Date upper)&nbsp;&nbsp; 日期轴范围<br />
void setDateFormatOverride(DateFormat formatter) 日期轴日期标签的显示格式<br />
void setTickUnit(DateTickUnit unit)&nbsp;&nbsp; 日期轴的日期标签（需要将AutoTickUnitSelection设false）<br />
void setTickMarkPosition(DateTickMarkPosition position) 日期标签位置（参数常量在org.jfree.chart.axis.DateTickMarkPosition类中定义）</p>
<p>CategoryAxis(Axis)类：<br />
void setCategoryMargin(double margin)&nbsp;&nbsp; 分类轴边距<br />
void setLowerMargin(double margin)&nbsp;&nbsp; 分类轴下（左）边距<br />
void setUpperMargin(double margin)&nbsp;&nbsp; 分类轴上（右）边距<br />
void setVerticalCategoryLabels(boolean flag) 分类轴标题是否旋转到垂直<br />
void setMaxCategoryLabelWidthRatio(float ratio) 分类轴分类标签的最大宽度</p>
<p>-----------------------------------------------------------------------------------------------------------</p>
<p>Plot类：<br />
void setBackgroundImage(Image image)&nbsp;&nbsp; 数据区的背景图片<br />
void setBackgroundImageAlignment(int alignment) 数据区的背景图片对齐方式（参数常量在org.jfree.ui.Align类中定义）<br />
void setBackgroundPaint(Paint paint)&nbsp;&nbsp; 数据区的背景图片背景色<br />
void setBackgroundAlpha(float alpha)&nbsp;&nbsp; 数据区的背景透明度（0.0～1.0）<br />
void setForegroundAlpha(float alpha)&nbsp;&nbsp; 数据区的前景透明度（0.0～1.0）<br />
void setDataAreaRatio(double ratio)&nbsp;&nbsp; 数据区占整个图表区的百分比<br />
void setOutLinePaint(Paint paint)&nbsp;&nbsp; 数据区的边界线条颜色<br />
void setOutLineStroke(Stroke stroke)&nbsp;&nbsp; 数据区的边界线条笔触<br />
void setNoDataMessage(String message)&nbsp;&nbsp; 没有数据时显示的消息<br />
void setNoDataMessageFont(Font font)&nbsp;&nbsp; 没有数据时显示的消息字体<br />
void setNoDataMessagePaint(Paint paint)&nbsp;&nbsp; 没有数据时显示的消息颜色</p>
<p>CategoryPlot(Plot)类：<br />
void setDataset(CategoryDataset dataset) 数据区的2维数据表<br />
void setColumnRenderingOrder(SortOrder order) 数据分类的排序方式<br />
void setAxisOffset(Spacer offset)&nbsp;&nbsp; 坐标轴到数据区的间距<br />
void setOrientation(PlotOrientation orientation) 数据区的方向（PlotOrientation.HORIZONTAL或PlotOrientation.VERTICAL）<br />
void setDomainAxis(CategoryAxis axis)&nbsp;&nbsp; 数据区的分类轴<br />
void setDomainAxisLocation(AxisLocation location) 分类轴的位置（参数常量在org.jfree.chart.axis.AxisLocation类中定义）<br />
void setDomainGridlinesVisible(boolean visible) 分类轴网格是否可见<br />
void setDomainGridlinePaint(Paint paint) 分类轴网格线条颜色<br />
void setDomainGridlineStroke(Stroke stroke) 分类轴网格线条笔触<br />
void setRangeAxis(ValueAxis axis)&nbsp;&nbsp; 数据区的数据轴<br />
void setRangeAxisLocation(AxisLocation location) 数据轴的位置（参数常量在org.jfree.chart.axis.AxisLocation类中定义）<br />
void setRangeGridlinesVisible(boolean visible) 数据轴网格是否可见<br />
void setRangeGridlinePaint(Paint paint)&nbsp;&nbsp; 数据轴网格线条颜色<br />
void setRangeGridlineStroke(Stroke stroke) 数据轴网格线条笔触<br />
void setRenderer(CategoryItemRenderer renderer) 数据区的表示者（详见Renderer组）<br />
void addAnnotation(CategoryAnnotation annotation) 给数据区加一个注释<br />
void addRangeMarker(Marker marker,Layer layer) 给数据区加一个数值范围区域</p>
<p>PiePlot(Plot)类：<br />
void setDataset(PieDataset dataset)&nbsp;&nbsp; 数据区的1维数据表<br />
void setIgnoreNullValues(boolean flag)&nbsp;&nbsp; 忽略无值的分类<br />
void setCircular(boolean flag)&nbsp;&nbsp;&nbsp; 饼图是否一定是正圆<br />
void setStartAngle(double angle)&nbsp;&nbsp; 饼图的初始角度<br />
void setDirection(Rotation direction)&nbsp;&nbsp; 饼图的旋转方向<br />
void setExplodePercent(int section,double percent) 抽取的那块（1维数据表的分类下标）以及抽取出来的距离（0.0～1.0），3D饼图无效<br />
void setLabelBackgroundPaint(Paint paint) 分类标签的底色<br />
void setLabelFont(Font font)&nbsp;&nbsp;&nbsp; 分类标签的字体<br />
void setLabelPaint(Paint paint)&nbsp;&nbsp;&nbsp; 分类标签的字体颜色<br />
void setLabelLinkMargin(double margin)&nbsp;&nbsp; 分类标签与图的连接线边距<br />
void setLabelLinkPaint(Paint paint)&nbsp;&nbsp; 分类标签与图的连接线颜色<br />
void setLabelLinkStroke(Stroke stroke)&nbsp;&nbsp; 分类标签与图的连接线笔触<br />
void setLabelOutlinePaint(Paint paint)&nbsp;&nbsp; 分类标签边框颜色<br />
void setLabelOutlineStroke(Paint paint)&nbsp;&nbsp; 分类标签边框笔触<br />
void setLabelShadowPaint(Paint paint)&nbsp;&nbsp; 分类标签阴影颜色<br />
void setMaximumLabelWidth(double width)&nbsp;&nbsp; 分类标签的最大长度（0.0～1.0）<br />
void setPieIndex(int index)&nbsp;&nbsp;&nbsp; 饼图的索引（复合饼图中用到）<br />
void setSectionOutlinePaint(int section,Paint paint) 指定分类饼的边框颜色<br />
void setSectionOutlineStroke(int section,Stroke stroke) 指定分类饼的边框笔触<br />
void setSectionPaint(int section,Paint paint) 指定分类饼的颜色<br />
void setShadowPaint(Paint paint)&nbsp;&nbsp; 饼图的阴影颜色<br />
void setShadowXOffset(double offset)&nbsp;&nbsp; 饼图的阴影相对图的水平偏移<br />
void setShadowYOffset(double offset)&nbsp;&nbsp; 饼图的阴影相对图的垂直偏移<br />
void setLabelGenerator(PieSectionLabelGenerator generator) 分类标签的格式，设置成null则整个标签包括连接线都不显示<br />
void setToolTipGenerator(PieToolTipGenerator generator) MAP中鼠标移上的显示格式<br />
void setURLGenerator(PieURLGenerator generator)&nbsp;&nbsp; MAP中钻取链接格式</p>
<p>PiePlot3D(PiePlot)类：<br />
void setDepthFactor(double factor)&nbsp;&nbsp; 3D饼图的Z轴高度（0.0～1.0）</p>
<p>MultiplePiePlot(Plot)类：<br />
void setLimit(double limit)&nbsp;&nbsp;&nbsp; 每个饼图之间的数据关联（详细比较复杂）&nbsp;&nbsp; <br />
void setPieChart(JFreeChart pieChart)&nbsp;&nbsp; 每个饼图的显示方式（见JFreeChart类个PiePlot类）</p>
<p>-----------------------------------------------------------------------------------------------------------</p>
<p>AbstractRenderer类：<br />
void setItemLabelAnchorOffset(double offset)&nbsp;&nbsp;&nbsp;&nbsp; 数据标签的与数据点的偏移<br />
void setItemLabelsVisible(boolean visible)&nbsp;&nbsp;&nbsp;&nbsp; 数据标签是否可见<br />
void setItemLabelFont(Font font)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据标签的字体<br />
void setItemLabelPaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据标签的字体颜色<br />
void setItemLabelPosition(ItemLabelPosition position)&nbsp;&nbsp;&nbsp; 数据标签位置<br />
void setPositiveItemLabelPosition(ItemLabelPosition position)&nbsp;&nbsp; 正数标签位置<br />
void setNegativeItemLabelPosition(ItemLabelPosition position)&nbsp;&nbsp; 负数标签位置<br />
void setOutLinePaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图形边框的线条颜色<br />
void setOutLineStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 图形边框的线条笔触<br />
void setPaint(Paint paint)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所有分类图形的颜色<br />
void setShape(Shape shape)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所有分类图形的形状（如折线图的点）<br />
void setStroke(Stroke stroke)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所有分类图形的笔触（如折线图的线）<br />
void setSeriesItemLabelsVisible(int series,boolean visible)&nbsp;&nbsp; 指定分类的数据标签是否可见<br />
void setSeriesItemLabelFont(int series,Font font)&nbsp;&nbsp;&nbsp; 指定分类的数据标签的字体<br />
void setSeriesItemLabelPaint(int series,Paint paint)&nbsp;&nbsp;&nbsp; 指定分类的数据标签的字体颜色<br />
void setSeriesItemLabelPosition(int series,ItemLabelPosition position) 数据标签位置<br />
void setSeriesPositiveItemLabelPosition(int series,ItemLabelPosition position) 正数标签位置<br />
void setSeriesNegativeItemLabelPosition(int series,ItemLabelPosition position) 负数标签位置<br />
void setSeriesOutLinePaint(int series,Paint paint)&nbsp;&nbsp;&nbsp; 指定分类的图形边框的线条颜色<br />
void setSeriesOutLineStroke(int series,Stroke stroke)&nbsp;&nbsp;&nbsp; 指定分类的图形边框的线条笔触<br />
void setSeriesPaint(int series,Paint paint)&nbsp;&nbsp;&nbsp;&nbsp; 指定分类图形的颜色<br />
void setSeriesShape(int series,Shape shape)&nbsp;&nbsp;&nbsp;&nbsp; 指定分类图形的形状（如折线图的点）<br />
void setSeriesStroke(int series,Stroke stroke)&nbsp;&nbsp;&nbsp;&nbsp; 指定分类图形的笔触（如折线图的线）</p>
<p>AbstractCategoryItemRenderer(AbstractRenderer)类：<br />
void setLabelGenerator(CategoryLabelGenerator generator)&nbsp;&nbsp; 数据标签的格式<br />
void setToolTipGenerator(CategoryToolTipGenerator generator)&nbsp;&nbsp; MAP中鼠标移上的显示格式<br />
void setItemURLGenerator(CategoryURLGenerator generator)&nbsp;&nbsp; MAP中钻取链接格式<br />
void setSeriesLabelGenerator(int series,CategoryLabelGenerator generator) 指定分类的数据标签的格式<br />
void setSeriesToolTipGenerator(int series,CategoryToolTipGenerator generator) 指定分类的MAP中鼠标移上的显示格式<br />
void setSeriesItemURLGenerator(int series,CategoryURLGenerator generator) 指定分类的MAP中钻取链接格式</p>
<p>BarRenderer(AbstractCategoryItemRenderer)类：<br />
void setDrawBarOutline(boolean draw)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 是否画图形边框<br />
void setItemMargin(double percent)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个BAR之间的间隔<br />
void setMaxBarWidth(double percent)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 每个BAR的最大宽度<br />
void setMinimumBarLength(double min)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最短的BAR长度，避免数值太小而显示不出<br />
void setPositiveItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的正数标签位置<br />
void setNegativeItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的负数标签位置</p>
<p>BarRenderer3D(BarRenderer)类：<br />
void setWallPaint(Paint paint)&nbsp;&nbsp;&nbsp; 3D坐标轴的墙体颜色</p>
<p>StackedBarRenderer(BarRenderer)类：<br />
没有特殊的设置</p>
<p>StackedBarRenderer3D(BarRenderer3D)类：<br />
没有特殊的设置</p>
<p>GroupedStackedBarRenderer(StackedBarRenderer)类：<br />
void setSeriesToGroupMap(KeyToGroupMap map)将分类自由的映射成若干个组（KeyToGroupMap.mapKeyToGroup(series,group)）</p>
<p>LayeredBarRenderer(BarRenderer)类：<br />
void setSeriesBarWidth(int series,double width) 设定每个分类的宽度（注意设置不要使某分类被覆盖）</p>
<p>WaterfallBarRenderer(BarRenderer)类：<br />
void setFirstBarPaint(Paint paint)&nbsp;&nbsp; 第一个柱图的颜色<br />
void setLastBarPaint(Paint paint)&nbsp;&nbsp; 最后一个柱图的颜色<br />
void setPositiveBarPaint(Paint paint)&nbsp;&nbsp; 正值柱图的颜色<br />
void setNegativeBarPaint(Paint paint)&nbsp;&nbsp; 负值柱图的颜色</p>
<p>IntervalBarRenderer(BarRenderer)类：<br />
需要传IntervalCategoryDataset作为数据源</p>
<p>GanttBarRenderer(IntervalBarRenderer)类：<br />
void setCompletePaint(Paint paint)&nbsp;&nbsp; 完成进度颜色<br />
void setIncompletePaint(Paint paint)&nbsp;&nbsp; 未完成进度颜色<br />
void setStartPercent(double percent)&nbsp;&nbsp; 设置进度条在整条中的起始位置（0.0～1.0）<br />
void setEndPercent(double percent)&nbsp;&nbsp; 设置进度条在整条中的结束位置（0.0～1.0）</p>
<p>StatisticBarRenderer(BarRenderer)类：<br />
需要传StatisticCategoryDataset作为数据源</p>
<p>LineAndShapeRenderer(AbstractCategoryItemRenderer)类：<br />
void setDrawLines(boolean draw)&nbsp;&nbsp;&nbsp; 是否折线的数据点之间用线连<br />
void setDrawShapes(boolean draw)&nbsp;&nbsp; 是否折线的数据点根据分类使用不同的形状<br />
void setShapesFilled(boolean filled)&nbsp;&nbsp; 所有分类是否填充数据点图形<br />
void setSeriesShapesFilled(int series,boolean filled) 指定分类是否填充数据点图形<br />
void setUseFillPaintForShapeOutline(boolean use) 指定是否填充数据点的Paint也被用于画数据点形状的边框</p>
<p>LevelRenderer(AbstractCategoryItemRenderer)类：<br />
void setItemMargin(double percent)&nbsp;&nbsp; 每个分类之间的间隔<br />
void setMaxItemWidth(double percent)&nbsp;&nbsp; 每个分类的最大宽度</p>
<p>CategoryStepRenderer(AbstractCategoryItemRenderer)类：<br />
void setStagger(boolean shouldStagger)&nbsp;&nbsp; 不同分类的图是否交错</p>
<p>MinMaxCategoryRenderer(AbstractCategoryItemRenderer)类：<br />
void setDrawLines(boolean drawLines)&nbsp;&nbsp; 是否在每个分类线间画连接线<br />
void setGroupPaint(Paint groupPaint)&nbsp;&nbsp; 一组图形连接线的颜色<br />
void setGroupStroke(Stroke groupStroke)&nbsp;&nbsp; 一组图形连接线的笔触<br />
void setMaxIcon(Icon maxIcon)&nbsp;&nbsp;&nbsp; 最大值的ICON<br />
void setMinIcon(Icon minIcon)&nbsp;&nbsp;&nbsp; 最小值的ICON<br />
void setObjectIcon(Icon objectIcon)&nbsp;&nbsp; 所有值的ICON</p>
<p>AreaRender(AbstractCategoryItemRenderer)类：<br />
没有特殊的设置</p>
<p>StackedAreaRender(AreaRender)类：<br />
没有特殊的设置<br />
</p>
<img src ="http://www.blogjava.net/donghang73/aggbug/326669.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2010-07-20 20:35 <a href="http://www.blogjava.net/donghang73/archive/2010/07/20/326669.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JFreeChart中对常见图形的处理</title><link>http://www.blogjava.net/donghang73/archive/2010/07/20/326668.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Tue, 20 Jul 2010 12:33:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2010/07/20/326668.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/326668.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2010/07/20/326668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/326668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/326668.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;<span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">并不存在多个不同的类来生成不同的图形。所有的图形都是具体类</span><span style="font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">的实例化对象，初始化</span><span style="font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">对象的时候通过指定不同的</span><span style="font-size: 12pt">Plot</span><span style="font-family: 宋体; font-size: 12pt">实现类就可以显示出不同的图形。不同的</span><span style="font-size: 12pt">Plot</span><span style="font-family: 宋体; font-size: 12pt">实现类具有不同的</span><span style="font-size: 12pt">Renderer</span><span style="font-family: 宋体; font-size: 12pt">对象、</span><span style="font-size: 12pt">Axis</span><span style="font-family: 宋体; font-size: 12pt">对象、</span><span style="font-size: 12pt">Dataset</span><span style="font-family: 宋体; font-size: 12pt">对象。</span>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">提供工厂类</span><span style="font-size: 12pt">ChartFactory</span><span style="font-family: 宋体; font-size: 12pt">方便使用者生成各种不同的图形。</span><span style="font-size: 12pt">ChartFactory</span><span style="font-family: 宋体; font-size: 12pt">类的各个工厂方法中实现对具体</span><span style="font-size: 12pt">Plot</span><span style="font-family: 宋体; font-size: 12pt">的指定以及对类</span><span style="font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">构造函数的调用。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">下面以常用图形说一下常用的使用流程（大部分的操作讲的并不全面，比如</span><span style="font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">可能提供了很多增加、修改数据的方式，下文中可能只列举一种）。</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-size: 18pt">1</span></strong><strong><span style="font-family: 宋体; font-size: 18pt">柱状图</span></strong></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; font-size: 12pt">（</span></strong><strong><span style="font-size: 12pt">1</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">）平面柱状图</span></strong></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">生成柱状图操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">JFreeChartchart=ChartFactory.createBarChart(String title,//</span><span style="font-family: 宋体; font-size: 12pt">图标题</span></p>
<p style="text-align: left; text-indent: 228pt" class="MsoNormal" align="left"><span style="font-size: 12pt">String categoryAxisLabel,//x</span><span style="font-family: 宋体; font-size: 12pt">轴标题</span></p>
<p style="text-align: left; text-indent: 21pt; margin-left: 207pt" class="MsoNormal" align="left"><span style="font-size: 12pt">String valueAxisLabel,//y</span><span style="font-family: 宋体; font-size: 12pt">轴标题</span></p>
<p style="text-align: left; text-indent: 21pt; margin-left: 207pt" class="MsoNormal" align="left"><span style="font-size: 12pt">CategoryDataset dataset,//</span><span style="font-family: 宋体; font-size: 12pt">数据源</span></p>
<p style="text-align: left; text-indent: 21pt; margin-left: 207pt" class="MsoNormal" align="left"><span style="font-size: 12pt">PlotOrientation orientation,//</span><span style="font-family: 宋体; font-size: 12pt">显示方向</span></p>
<p style="text-align: left; text-indent: 21pt; margin-left: 207pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean legend,//</span><span style="font-family: 宋体; font-size: 12pt">是否显示图例</span></p>
<p style="text-align: left; text-indent: 21pt; margin-left: 207pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean tooltips,//</span><span style="font-family: 宋体; font-size: 12pt">是否显示</span><span style="font-size: 12pt">tooltip</span></p>
<p style="text-align: left; text-indent: 18pt; margin-left: 210pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean urls)</span><span style="font-family: 宋体; font-size: 12pt">；</span><span style="font-size: 12pt">//</span><span style="font-family: 宋体; font-size: 12pt">是否指定</span><span style="font-size: 12pt">url</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">平面柱状图的</span><span style="font-size: 12pt">Plot</span><span style="font-family: 宋体; font-size: 12pt">对象是</span><span style="font-size: 12pt">CategoryPlot</span><span style="font-family: 宋体; font-size: 12pt">类型。</span><span style="font-size: 12pt">CategoryPlot</span><span style="font-family: 宋体; font-size: 12pt">对象的</span><span style="font-size: 12pt">x</span><span style="font-family: 宋体; font-size: 12pt">轴是</span><span style="font-size: 12pt">CategoryAxis</span><span style="font-family: 宋体; font-size: 12pt">对象，</span><span style="font-size: 12pt">y</span><span style="font-family: 宋体; font-size: 12pt">轴是</span><span style="font-size: 12pt">NumberAxis</span><span style="font-family: 宋体; font-size: 12pt">对象，绘制单元是</span><span style="font-size: 12pt">BarRenderer</span><span style="font-family: 宋体; font-size: 12pt">对象，数据源是</span><span style="font-size: 12pt">CategoryDataset</span><span style="font-family: 宋体; font-size: 12pt">对象。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">获取</span><span style="font-size: 12pt">CategoryPlot</span><span style="font-family: 宋体; font-size: 12pt">对象操作为：</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">CategoryPlot plot </span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">= (</span><span style="font-size: 12pt">CategoryPlot)chart.getPlot()</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">;</span><span style="font-family: 宋体; color: black; font-size: 10pt">或者</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">CategoryPlot plot = chart.getCategoryPlot();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">获取绘制单元操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BarRenderer renderer = (BarRenderer)plot.getRenderer();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">获取</span><span style="font-size: 12pt">x</span><span style="font-family: 宋体; font-size: 12pt">轴的操作：</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">CategoryAxis xAxis = (CategoryAxis)plot.getDomainAxis();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">获取</span><span style="font-size: 12pt">y</span><span style="font-family: 宋体; font-size: 12pt">轴操作：</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">NumberAxis yAxis = (NumberAxis)plot.getRangeAxis();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">获取数据源：</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">CategoryDataset dataset = plot.getDataset();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">柱状图可以接受一切</span><span style="font-size: 12pt">CategoryDataset</span><span style="font-family: 宋体; font-size: 12pt">类型的数据源，下面讲解一下常用的</span><span style="font-size: 12pt">CategoryDataset</span><span style="font-family: 宋体; font-size: 12pt">类型</span><span style="font-size: 12pt">DefaultCategoryDataset</span><span style="font-family: 宋体; font-size: 12pt">的使用方式</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">实例化：</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">DefaultCategoryDataset dataset = new DefaultCategoryDataset();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">增加数据</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">dataset.addValue(doublevalue,ComparablerowKey,ComparablecolumnKey);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">删除数据：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataset.removeValue(ComparablerowKey,ComparablecolumnKey);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">或者</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataset.removeColumn(intcolumnIndex);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">或者</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataset.removeColumn(ComparablecolumnKey);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">对行同样有上述两种删除方式，不在列举。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">修改数据：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataset.setValue(doublevalue,ComparablerowKey,ComparablecolumnKey);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">查询数据</span><span style="font-size: 12pt">:</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">对</span><span style="font-size: 12pt">plot</span><span style="font-family: 宋体; font-size: 12pt">对象、绘制单元、</span><span style="font-size: 12pt">x</span><span style="font-family: 宋体; font-size: 12pt">轴、</span><span style="font-size: 12pt">y</span><span style="font-family: 宋体; font-size: 12pt">轴的显示特性修改不再一一介绍。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; font-size: 12pt">（</span></strong><strong><span style="font-size: 12pt">2</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">）</span></strong><strong><span style="font-size: 12pt">3D</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">柱状图</span></strong></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">对应的工厂方法为</span><span style="font-size: 12pt">createBarChart3D</span><span style="font-family: 宋体; font-size: 12pt">，该方法的参数与平面柱状图相同。</span><span style="font-size: 12pt">3D</span><span style="font-family: 宋体; font-size: 12pt">柱状图的</span><span style="font-size: 12pt">Plot</span><span style="font-family: 宋体; font-size: 12pt">对象是</span><span style="font-size: 12pt">CategoryPlot</span><span style="font-family: 宋体; font-size: 12pt">类型。</span><span style="font-size: 12pt">CategoryPlot</span><span style="font-family: 宋体; font-size: 12pt">对象的</span><span style="font-size: 12pt">x</span><span style="font-family: 宋体; font-size: 12pt">轴是</span><span style="font-size: 12pt">CategoryAxis3D</span><span style="font-family: 宋体; font-size: 12pt">对象，</span><span style="font-size: 12pt">y</span><span style="font-family: 宋体; font-size: 12pt">轴是</span><span style="font-size: 12pt">NumberAxis3D</span><span style="font-family: 宋体; font-size: 12pt">对象，绘制单元是</span><span style="font-size: 12pt">BarRenderer3D</span><span style="font-family: 宋体; font-size: 12pt">对象，数据源是</span><span style="font-size: 12pt">CategoryDataset</span><span style="font-family: 宋体; font-size: 12pt">对象。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">具体使用以及操作与平面柱状图雷同，不在详述。</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-size: 18pt">2</span></strong><strong><span style="font-family: 宋体; font-size: 18pt">饼状图</span></strong></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-size: 12pt">(1)</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">平面饼状图</span></strong></p>
<p style="text-align: left; text-indent: 21.75pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">生成平面饼状图：</span></p>
<p style="text-align: left; text-indent: 21.75pt" class="MsoNormal" align="left"><span style="font-size: 12pt">JFreeChartchart=ChartFactory.createPieChart(String title,</span><span style="font-family: 宋体; font-size: 12pt">//</span><span style="font-family: 宋体; font-size: 12pt">图标题</span></p>
<p style="text-align: left; text-indent: 33.6pt; margin-left: 209.25pt" class="MsoNormal" align="left"><span style="font-size: 12pt">PieDataset dataset,</span><span style="font-family: 宋体; font-size: 12pt">//</span><span style="font-family: 宋体; font-size: 12pt">数据源</span></p>
<p style="text-align: left; text-indent: 21.75pt; margin-left: 221.1pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean legend,</span><span style="font-family: 宋体; font-size: 12pt">//</span><span style="font-family: 宋体; font-size: 12pt">是否显示图例</span></p>
<p style="text-align: left; margin-left: 221.15pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean tooltips,</span><span style="font-family: 宋体; font-size: 12pt">//</span><span style="font-family: 宋体; font-size: 12pt">是否显示tooltip</span></p>
<p style="text-align: left; text-indent: 237.6pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean urls)</span><span style="font-family: 宋体; font-size: 12pt">；</span><span style="font-family: 宋体; font-size: 12pt">//</span><span style="font-family: 宋体; font-size: 12pt">是否指定url</span></p>
<p style="text-align: left; text-indent: 21.75pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">平面饼状图的Plot对象是PiePlot类型。PiePlot对象没有x轴对象、y轴对象、绘制单元对象，数据源是PieDataset对象。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">获取PiePlot对象操作为：</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">PiePlot plot = (PiePlot)chart.getPlot();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">获取数据源：</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">PieDataset dataset = plot.getDataset();</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">饼状图可以接受一切</span><span style="font-size: 12pt">PieDataset</span><span style="font-family: 宋体; font-size: 12pt">类型的数据源，下面讲解一下常用的</span><span style="font-size: 12pt">PieDataset</span><span style="font-family: 宋体; font-size: 12pt">类型</span><span style="font-size: 12pt">DefaultPieDataset</span><span style="font-family: 宋体; font-size: 12pt">的使用方式</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">实例化：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt">DefaultPieDatasetdataset=newDefaultPieDataset();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">增加修改操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt">dataset.setValue(Comparablekey,doublevalue);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">删除操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt">dataset.remove(Comparablekey);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">查询操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt">dataset.<span style="color: black">getKey(intitem);</span></span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: black; font-size: 12pt">或者</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="color: black; font-size: 12pt">dataset.getValue(intitem);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-size: 12pt">(1)3D</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">饼状图</span></strong></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">对应的工厂方法为</span><span style="font-size: 12pt">createPieChart3D</span><span style="font-family: 宋体; font-size: 12pt">，参数与平面饼状图相同。与平面饼状图的差别在于</span><span style="font-family: 宋体; font-size: 12pt">Plot</span><span style="font-family: 宋体; font-size: 12pt">对象是PiePlot3D类型</span><span style="font-family: 宋体; font-size: 12pt">，不再详述。</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-size: 18pt">3</span></strong><strong><span style="font-family: 宋体; font-size: 18pt">多重饼状图</span></strong></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; font-size: 12pt">（</span></strong><strong><span style="font-size: 12pt">1</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">）多重平面饼状图</span></strong></p>
<p style="text-align: left; text-indent: 24pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">生成多重平面饼状图：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">JFreeChartchart=ChartFactory.createMultiplePieChart (String title,//</span><span style="font-family: 宋体; font-size: 12pt">图标题</span></p>
<p style="text-align: left; text-indent: 240pt" class="MsoNormal" align="left"><span style="font-size: 12pt">CategoryDataset dataset,//</span><span style="font-family: 宋体; font-size: 12pt">数据源</span></p>
<p style="text-align: left; text-indent: 126pt" class="MsoNormal" align="left"><span style="font-size: 12pt">TableOrder order,//</span><span style="font-family: 宋体; font-size: 12pt">指定提取数据的方式（按行或者按列）</span></p>
<p style="text-align: left; text-indent: 246pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean legend,//</span><span style="font-family: 宋体; font-size: 12pt">是否显示图例</span></p>
<p style="text-align: left; text-indent: 246pt" class="MsoNormal" align="left"><span style="font-size: 12pt">boolean tooltips,//</span><span style="font-family: 宋体; font-size: 12pt">是否显示</span><span style="font-size: 12pt">tooltip</span></p>
<p style="text-align: left; text-indent: 246pt" class="MsoNormal" align="left"><span style="font-size: 12pt">boolean urls)&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">；</span><span style="font-size: 12pt">//</span><span style="font-family: 宋体; font-size: 12pt">是否指定</span><span style="font-size: 12pt">url</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">多重平面饼状图的</span><span style="font-size: 12pt">Plot</span><span style="font-family: 宋体; font-size: 12pt">对象是</span><span style="font-size: 12pt">MultiplePiePlot</span><span style="font-family: 宋体; font-size: 12pt">类型。</span><span style="font-size: 12pt">MultiplePiePlot</span><span style="font-family: 宋体; font-size: 12pt">对象没有</span><span style="font-size: 12pt">x</span><span style="font-family: 宋体; font-size: 12pt">轴对象、</span><span style="font-size: 12pt">y</span><span style="font-family: 宋体; font-size: 12pt">轴对象、绘制单元对象，数据源是</span><span style="font-size: 12pt">CategoryDataset</span><span style="font-family: 宋体; font-size: 12pt">对象。</span><span style="font-size: 12pt">MultiplePiePlot</span><span style="font-family: 宋体; font-size: 12pt">对象中可以含有多个子</span><span style="font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">对象，子</span><span style="font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">对象是上面讲过的饼状图对象。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">获取</span><span style="font-size: 12pt">MultiplePiePlot</span><span style="font-family: 宋体; font-size: 12pt">对象操作为：</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">MultiplePiePlot plotMain = (MultiplePiePlot)chart.getPlot();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">获取子</span><span style="font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">的操作为：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JfreeChart childChart = plotMain.getPieChart();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">获取数据源：</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">CategoryDataset dataset = plotMain.getDataset();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; font-size: 12pt">（</span></strong><strong><span style="font-size: 12pt">2</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">）多重</span></strong><strong><span style="font-size: 12pt">3D</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">饼状图</span></strong></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">对应的工厂方法为</span><span style="font-size: 12pt">createMultiplePieChart3D</span><span style="font-family: 宋体; font-size: 12pt">，该方法的参数与多重平面饼状图相同。多重</span><span style="font-size: 12pt">3D</span><span style="font-family: 宋体; font-size: 12pt">饼状图的</span><span style="font-size: 12pt">Plot</span><span style="font-family: 宋体; font-size: 12pt">对象是</span><span style="font-size: 12pt">MultiplePiePlot</span><span style="font-family: 宋体; font-size: 12pt">类型。</span><span style="font-size: 12pt">MultiplePiePlot</span><span style="font-family: 宋体; font-size: 12pt">对象中可以含有多个子</span><span style="font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">对象，子</span><span style="font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">对象是上面讲过的</span><span style="font-size: 12pt">3D</span><span style="font-family: 宋体; font-size: 12pt">饼状图对象。</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-size: 18pt">4</span></strong><strong><span style="font-family: 宋体; font-size: 18pt">线图</span></strong></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; font-size: 12pt">（</span></strong><strong><span style="font-size: 12pt">1</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">）平面线图</span></strong></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; font-size: 12pt">生成平面线图：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">JFreeChartchart=ChartFactory.createLineChart(String title,//</span><span style="font-family: 宋体; font-size: 12pt">图标题</span></p>
<p style="text-align: left; text-indent: 222pt" class="MsoNormal" align="left"><span style="font-size: 12pt">String categoryAxisLabel,//x</span><span style="font-family: 宋体; font-size: 12pt">轴标题</span></p>
<p style="text-align: left; text-indent: 222pt" class="MsoNormal" align="left"><span style="font-size: 12pt">String valueAxisLabel,//y</span><span style="font-family: 宋体; font-size: 12pt">轴标题</span></p>
<p style="text-align: left; text-indent: 222pt" class="MsoNormal" align="left"><span style="font-size: 12pt">CategoryDataset dataset,//</span><span style="font-family: 宋体; font-size: 12pt">数据源</span></p>
<p style="text-align: left; text-indent: 222pt" class="MsoNormal" align="left"><span style="font-size: 12pt">PlotOrientation orientation,//</span><span style="font-family: 宋体; font-size: 12pt">显示方向</span></p>
<p style="text-align: left; text-indent: 222pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean legend,//</span><span style="font-family: 宋体; font-size: 12pt">是否显示图例</span></p>
<p style="text-align: left; text-indent: 222pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean tooltips,//</span><span style="font-family: 宋体; font-size: 12pt">是否显示</span><span style="font-size: 12pt">tooltip</span></p>
<p style="text-align: left; text-indent: 222pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean urls);//</span><span style="font-family: 宋体; font-size: 12pt">是否指定</span><span style="font-size: 12pt">url</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">平面线图除了的</span><span style="font-size: 12pt">Plot</span><span style="font-family: 宋体; font-size: 12pt">对象中绘制单元对象是</span><span style="font-size: 12pt">LineAndShapeRenderer</span><span style="font-family: 宋体; font-size: 12pt">对象，其他一切组成对象与平面柱状图相同。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">获取</span><span style="font-size: 12pt">Renderer</span><span style="font-family: 宋体; font-size: 12pt">操作：</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">LineAndShapeRenderer renderer = (LineAndShapeRenderer)plot.getRenderer();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">其他参考平面柱状图。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; font-size: 12pt">（</span></strong><strong><span style="font-size: 12pt">2</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">）</span></strong><strong><span style="font-size: 12pt">3D</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">线图</span></strong></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">对应工厂方法为</span><span style="font-size: 12pt">createLineChart3D</span><span style="font-family: 宋体; font-size: 12pt">，参数与</span><span style="font-size: 12pt">createLineChart</span><span style="font-family: 宋体; font-size: 12pt">相同。</span><span style="font-size: 12pt">3D</span><span style="font-family: 宋体; font-size: 12pt">线图的组成对象除了绘制单元对象是</span><span style="font-size: 12pt">LineAndShapeRenderer3D</span><span style="font-family: 宋体; font-size: 12pt">对象，其他一切组成对象与</span><span style="font-size: 12pt">3D</span><span style="font-family: 宋体; font-size: 12pt">柱状图相同。</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-size: 18pt">5</span></strong><strong><span style="font-family: 宋体; font-size: 18pt">时序图</span></strong></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">生成时序图：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">JfreeChartchart = ChartFactory.createTimeSeriesChart(String title,//</span><span style="font-family: 宋体; font-size: 12pt">图标题</span></p>
<p style="text-align: left; text-indent: 258pt" class="MsoNormal" align="left"><span style="font-size: 12pt">String timeAxisLabel,//x</span><span style="font-family: 宋体; font-size: 12pt">轴标题</span></p>
<p style="text-align: left; text-indent: 252pt" class="MsoNormal" align="left"><span style="font-size: 12pt">String valueAxisLabel,//y</span><span style="font-family: 宋体; font-size: 12pt">轴标题</span></p>
<p style="text-align: left; text-indent: 258pt" class="MsoNormal" align="left"><span style="font-size: 12pt">XYDataset dataset,//</span><span style="font-family: 宋体; font-size: 12pt">数据源</span></p>
<p style="text-align: left; text-indent: 258pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean legend,//</span><span style="font-family: 宋体; font-size: 12pt">是否显示图例</span></p>
<p style="text-align: left; text-indent: 240pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean tooltips,//</span><span style="font-family: 宋体; font-size: 12pt">是否显示</span><span style="font-size: 12pt">tooltip</span></p>
<p style="text-align: left; text-indent: 240pt" class="MsoNormal" align="left"><span style="font-size: 12pt">Boolean urls);//</span><span style="font-family: 宋体; font-size: 12pt">是否指定</span><span style="font-size: 12pt">url</span></p>
<p style="text-align: left; text-indent: 30pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">时序图的</span><span style="font-size: 12pt">Plot</span><span style="font-family: 宋体; font-size: 12pt">对象是</span><span style="font-size: 12pt">XYPlot</span><span style="font-family: 宋体; font-size: 12pt">类型。</span><span style="font-size: 12pt">XYPlot</span><span style="font-family: 宋体; font-size: 12pt">对象的</span><span style="font-size: 12pt">x</span><span style="font-family: 宋体; font-size: 12pt">轴是</span><span style="font-size: 12pt">DateAxis</span><span style="font-family: 宋体; font-size: 12pt">对象，</span><span style="font-size: 12pt">y</span><span style="font-family: 宋体; font-size: 12pt">轴是</span><span style="font-size: 12pt">NumberAxis</span><span style="font-family: 宋体; font-size: 12pt">对象，绘制单元是</span><span style="font-size: 12pt">XYLineAndShapeRenderer</span><span style="font-family: 宋体; font-size: 12pt">对象，数据源是</span><span style="font-size: 12pt">XYDataset</span><span style="font-family: 宋体; font-size: 12pt">对象。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">Plot</span><span style="font-family: 宋体; font-size: 12pt">对象的获取操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XYPlot plot = (XYPlot)chart.getPlot();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">X</span><span style="font-family: 宋体; font-size: 12pt">轴对象的获取操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DateAxis xAxis = (DateAxis)plot.getDomainAxis();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">Y</span><span style="font-family: 宋体; font-size: 12pt">轴对象的获取操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NumberAxis yAxis = (NumberAxis)plot.getRangeAxis();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">Renderer</span><span style="font-family: 宋体; font-size: 12pt">对象的获取操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; XYItemRenderer renderer = plot.getRenderer();</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">时序图可以接受一切</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">XYDataset</span><span style="font-family: 宋体; font-size: 12pt">类型的数据源，下面讲解一下常用的</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">XYDataset</span><span style="font-family: 宋体; font-size: 12pt">类型</span><span style="font-size: 12pt">TimeSeriesCollection</span><span style="font-family: 宋体; font-size: 12pt">的使用方式。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">实例化：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimeSeriesCollection dataset = newTimeSeriesCollection();</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">添加数据操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataset.addSeries(TimeSeries);//</span><span style="font-family: 宋体; font-size: 12pt">后面讲解</span><span style="font-size: 12pt">TimeSeries</span><span style="font-family: 宋体; font-size: 12pt">对象</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">删除数据操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataset.removeSeries(intindex);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">查询数据操作</span><span style="font-size: 12pt">:</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dataset.getSeries(intseries);</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-size: 12pt">TimeSeries</span><span style="font-family: 宋体; font-size: 12pt">对象操作</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">实例化：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TimeSeries ts = TimeSeries(Stringname,ClasstimePeriodClass);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">增加数据操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ts.add(RegularTimePeriod period,double value);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">删除数据操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ts.delete(RegularTimePeriod period);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">修改数据操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-size: 12pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ts.update(RegularTimePeriod period,Number value);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">查询数据操作：</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-size: 12pt">ts.getValue(RegularTimePeriodperiod);</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">类</span><span style="font-size: 12pt">RegularTimePeriod</span><span style="font-family: 宋体; font-size: 12pt">是</span><span style="font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">提供的时间模板类，它有很多具体的时间类，比如：</span><span style="font-size: 12pt">Minute</span><span style="font-family: 宋体; font-size: 12pt">、</span><span style="font-size: 12pt">Second</span><span style="font-family: 宋体; font-size: 12pt">、</span><span style="font-size: 12pt">Hour</span><span style="font-family: 宋体; font-size: 12pt">、</span><span style="font-size: 12pt">Day&#8230;&#8230;</span><span style="font-family: 宋体; font-size: 12pt">等，不再详述。</span></p>
<img src ="http://www.blogjava.net/donghang73/aggbug/326668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2010-07-20 20:33 <a href="http://www.blogjava.net/donghang73/archive/2010/07/20/326668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转]JFreeChart详解</title><link>http://www.blogjava.net/donghang73/archive/2010/07/20/326667.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Tue, 20 Jul 2010 12:29:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2010/07/20/326667.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/326667.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2010/07/20/326667.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/326667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/326667.html</trackback:ping><description><![CDATA[<p>&nbsp; </p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-family: 'Verdana','sans-serif'; font-size: 14pt">1</span></strong><strong><span style="font-family: 宋体; font-size: 14pt">简介</span></strong></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">是</span><span style="font-family: 宋体; font-size: 12pt">SourceForge.net</span><span style="font-family: 宋体; font-size: 12pt">上的一个开源项目，它的源码和</span><span style="font-family: 宋体; font-size: 12pt">API</span><span style="font-family: 宋体; font-size: 12pt">都可以免费获得。</span><span style="font-family: 宋体; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; font-size: 12pt">的功能非常强大，可以实现饼图</span><span style="font-family: 宋体; font-size: 12pt">(</span><span style="font-family: 宋体; font-size: 12pt">二维和三维</span><span style="font-family: 宋体; font-size: 12pt">),</span><span style="font-family: 宋体; font-size: 12pt">柱状图</span><span style="font-family: 宋体; font-size: 12pt">(</span><span style="font-family: 宋体; font-size: 12pt">水平</span><span style="font-family: 宋体; font-size: 12pt">,</span><span style="font-family: 宋体; font-size: 12pt">垂直</span><span style="font-family: 宋体; font-size: 12pt">),</span><span style="font-family: 宋体; font-size: 12pt">线图</span><span style="font-family: 宋体; font-size: 12pt">,</span><span style="font-family: 宋体; font-size: 12pt">点图</span><span style="font-family: 宋体; font-size: 12pt">,</span><span style="font-family: 宋体; font-size: 12pt">时序图</span><span style="font-family: 宋体; font-size: 12pt">,</span><span style="font-family: 宋体; font-size: 12pt">甘特图</span><span style="font-family: 宋体; font-size: 12pt">,</span><span style="font-family: 宋体; font-size: 12pt">股票行情图</span><span style="font-family: 宋体; font-size: 12pt">,</span><span style="font-family: 宋体; font-size: 12pt">混和图</span><span style="font-family: 宋体; font-size: 12pt">,</span><span style="font-family: 宋体; font-size: 12pt">温度计图</span><span style="font-family: 宋体; font-size: 12pt">,</span><span style="font-family: 宋体; font-size: 12pt">刻度图等常用商用图表，图形可以导出成</span><span style="font-family: 宋体; font-size: 12pt">PNG</span><span style="font-family: 宋体; font-size: 12pt">和</span><span style="font-family: 宋体; font-size: 12pt">JPEG</span><span style="font-family: 宋体; font-size: 12pt">格式，同时还可以与</span><span style="font-family: 宋体; font-size: 12pt">PDF</span><span style="font-family: 宋体; font-size: 12pt">和</span><span style="font-family: 宋体; font-size: 12pt">EXCEL</span><span style="font-family: 宋体; font-size: 12pt">关联，支持对图形的放大、缩小，支持常见图形的</span><span style="font-family: 宋体; font-size: 12pt">3D</span><span style="font-family: 宋体; font-size: 12pt">显示。</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-family: 'Verdana','sans-serif'; font-size: 14pt">2</span></strong><strong><span style="font-family: 宋体; font-size: 14pt">图形对象的处理</span></strong></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; font-size: 12pt">2.1 JFreeChart</span></strong><strong><span style="font-family: 宋体; font-size: 12pt">对象</span></strong></p>
<p style="text-align: left; text-indent: 24pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">可以生成很多图形对象，它的工厂类提供了</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">33</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">个工厂方法用于生成不同的图形对象（具体的工厂方法可以参见</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">的</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">API</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">手册或者源码中的</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">ChartFactory</span><span style="font-family: 宋体; color: black; font-size: 10pt">类</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">）。</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">JFreechart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对图形对象的抽象具体化。图形对象（</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">），由</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Title(</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">主标题</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">)</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">，</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">SubTitle</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">（子标题</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">)</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">，</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">（图形的绘制结构）等几个主要对象组成。各个组成部分如下图所示：</span><span style="color: #333333; font-size: 12pt"><br />
</span><span style="color: #333333">&nbsp;&nbsp;&nbsp;<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/donghang73/1.png" width="706" height="297" /><br />
&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; color: #333333; font-size: 12pt">这是一个</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象，上面的&#8220;</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">chart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">标题&#8221;是</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Title</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象，中间区域是</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象（包括绘图区域和坐标轴区域），下面的区域是</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">LegendTitle</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象，</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">LegendTitle</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">是一种</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">SubTitle</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象。</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt">每个</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象只能有</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">1</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">个</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Title</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象，</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">1</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">个</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象，可以有多个</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">SubTitle</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象。</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象可以进行的操作有：背景的设置（背景颜色、背景图片、透明度等）、边框的设置（是否可见、笔画、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Paint</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">等）、渲染方式的设置、标题对象的设置、子标题对象的增删查操作。（本文中的所有操作都不提供代码级的介绍，可参见</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">API</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">手册或者源码）</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; color: black; font-size: 12pt">2.2 </span></strong><strong><span style="font-family: 宋体; color: black; font-size: 12pt">主标题对象</span></strong></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt">主标题对象是</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">TextTitle</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">类型，可以进行的操作有：背景设置、字体设置（字体类型、颜色、内容、对齐方式等操作）、</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">tooltip</span><span style="font-family: 宋体; color: black; font-size: 10pt">设置、</span><span style="font-family: 'Courier New'; color: black; font-size: 10pt">URL</span><span style="font-family: 宋体; color: black; font-size: 10pt">设置。</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; color: black; font-size: 12pt">2.3 </span></strong><strong><span style="font-family: 宋体; color: black; font-size: 12pt">Plot</span></strong><strong><span style="font-family: 宋体; color: black; font-size: 12pt">对象</span></strong></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象是图形的绘制结构对象。</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">中含有很多不同的</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象，每一种图形对象中的</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象都在实例化的时候创建。所有的</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">共有的操作有：背景设置（背景颜色、背景图片、透明度等）、前景透明度设置、无数据存在情况的设置（显示的字符内容、显示的字体、显示的</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Paint</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">）、放大缩小比例的设置，大部分</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象还有设置</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Datset</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">、设置</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象操作。</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">中有</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">18</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">种</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">抽象类的具体实现类。</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">的具体实现类主要由以下重要对象组成：</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象（图形的绘制单元——绘图域），</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Datset</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">（图形的数据源），</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">DomainAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">（区域轴，相当于</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">x</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">轴），</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">RangeAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">（范围轴，相当于</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">y</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">轴）。</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt">不同的</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象组成方式不尽相同，有的不含有</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象，比如</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">CompassPlot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">ContourPlot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">MultiplePiePlot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">PiePlot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">等，有的不含有</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">DomainAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">RangeAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象，另外除了</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">FastScatterPlot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">类都含有</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Datset</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象，</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">FastScatterPlot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">使用</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">float</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">的二维数组充当数据源。尤其说明一点，饼状图相关的</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象（</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">MultiplePiePlot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">PiePlot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">PiePlot3D</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">RingPlot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">）中都不含有</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">DomainAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">RangeAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象。</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt">一般来说，</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Datset</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象存储数据模型，</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象存储显示模型，</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象根据</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Datset</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象完成画图操作。</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt"><img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/donghang73/1.png" width="706" height="297" /><br />
&nbsp;&nbsp;&nbsp;&nbsp;仍以上面的图形讲解</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象的组成。</span><span style="font-family: 宋体; font-size: 12pt"><br />
</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">上图的中间区域是是一个</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">XYPlot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象。其中的折线部分即是图形的绘制单元</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象。</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">X</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">轴是</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">DomainAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">，</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">y</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">轴是</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">RangeAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">，其中</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Datset</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象属于数据模型范畴，是</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">UI</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">不可见对象。该图中的</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">背景色、网格线的各种设置可以通过</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">XYPlot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象本身完成。</span></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; color: #333333; font-size: 12pt">下面讲解</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Axis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象（</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">X</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">轴、</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">y</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">轴都属于</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Axis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象），</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Datset</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象在后续章节中专门讲解。</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; color: black; font-size: 12pt">2.3.1 Renderer</span></strong><strong><span style="font-family: 宋体; color: black; font-size: 12pt">对象</span></strong></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象是图形的绘制单元。</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">提供了两个接口</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">CategoryItemRenderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">和</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">XYItemRenderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">、以及</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">1</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">个抽象类</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">AbstractRenderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">供具体的</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">类实现，给出了将近</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">50</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">种具体实现类。</span></p>
<p style="text-align: left; text-indent: 24pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt">一般来说</span><span style="color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象可进行的操作有：对</span><span style="color: #333333; font-size: 12pt">itemlabel</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">（下图中的柱状图上的红色数字即为</span><span style="color: #333333; font-size: 12pt">itemlabel</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">的示例）的默认设置（</span><span style="color: #333333; font-size: 12pt">itemlabel</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">的产生方式、是否可见、字体、</span><span style="color: #333333; font-size: 12pt">Paint</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">、正反向</span><span style="color: #333333; font-size: 12pt">itemlabel</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">的位置设置等）、绘制图形的边框默认设置（</span><span style="color: #333333; font-size: 12pt">Paint</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">、笔画、是否可见等）、绘制图形的默认设置（形状、笔画、是否可见、对应的图例中是否可见等，折线图还有线条是否可见、折点图形是否可见、折点图形是否填充、折点图形的形状、对应的图例中线条是否可见、图形是否可见、整体是否可见等）、以及对指定</span><span style="color: #333333; font-size: 12pt">itemlabel</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">的设置、指定绘制图形的设置。可以说和具体绘制的图形相关的属性都可以通过</span><span style="color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象设置。<br />
<img border="0" alt="" src="http://www.blogjava.net/images/blogjava_net/donghang73/2.png" width="563" height="233" /></span><span style="color: #333333; font-size: 12pt"><br />
</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: #333333; font-size: 12pt">不同的</span><span style="color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">的实现类实现了不同的显示方式，在含有</span><span style="color: #333333; font-size: 12pt">Renderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象的</span><span style="color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象中，</span><span style="color: #333333; font-size: 12pt">R</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">enderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象决定了JFreeChart对象的显示方式。例如：柱状图的Plot对象中默认的Renderer对象是</span><span style="font-family: 宋体; color: black; font-size: 12pt">CategoryItemRenderer</span><span style="font-family: 宋体; color: black; font-size: 12pt">对象，通过设置</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象的Renderer对象</span><span style="font-family: 宋体; color: black; font-size: 12pt">为</span><span style="font-family: 宋体; color: black; font-size: 12pt">LineAndShapeRenderer</span><span style="font-family: 宋体; color: black; font-size: 12pt">，则柱状图变为线图。使用中一般不需要显式的实例化一个</span><span style="color: #333333; font-size: 12pt">R</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">enderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象，一般通过</span><span style="color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象的</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">Plot</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象调用现有的</span><span style="color: #333333; font-size: 12pt">R</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">enderer</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象进行重新设置等操作。</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-family: 宋体; color: black; font-size: 12pt">2.3.2 Axis</span></strong><strong><span style="font-family: 宋体; color: black; font-size: 12pt">对象</span></strong></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="color: #333333; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">提供了两种类型的坐标轴：</span><span style="color: #333333; font-size: 12pt">CategoryAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">（等级轴）和</span><span style="color: #333333; font-size: 12pt">ValueAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">（值轴），</span><span style="color: #333333; font-size: 12pt">ValueAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">又有</span><span style="color: #333333; font-size: 12pt">3</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">个子类：</span><span style="color: #333333; font-size: 12pt">DateAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">（时间轴）、</span><span style="color: #333333; font-size: 12pt">NumberAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">（数字轴）、</span><span style="color: #333333; font-size: 12pt">PeriodAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">（时期轴）。这些坐标轴还有更详细的子类，不再一一列举</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: black; font-size: 12pt">Axis</span><span style="font-family: 宋体; color: black; font-size: 12pt">对象可进行的操作有：标题的设置（内容、字体、Paint、显示角度等）、坐标线的设置（笔画、Paint、是否可见等）、刻度线的设置（是否可见、笔画、Paint、位于绘图区域的长度、位于绘图区域外的长度等）、刻度标示的设置（笔画、Paint、字体、与轴的距离等）、坐标轴范围设置等。</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="color: #333333; font-size: 12pt">CategoryAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象还可以进行的操作有：</span><span style="font-family: 宋体; color: black; font-size: 12pt">刻度标示间距</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">设置（</span><span style="font-family: 宋体; color: black; font-size: 12pt">最小间距、最大间距、指定间距）等。</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="color: #333333; font-size: 12pt">ValueAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象可进行的操作有：轴端设置（显示的图形形状）、范围设置（是否自动产生范围、自动产生的最小范围、最大范围、指定确定范围、指定范围大小等）、间隔设置（是否自动产生间隔、指定间隔）等。</span></p>
<p style="text-align: left; text-indent: 21pt" class="MsoNormal" align="left"><span style="color: #333333; font-size: 12pt">DateAxis</span><span style="font-family: 宋体; color: #333333; font-size: 12pt">对象还有对时间刻度显示格式的设置操作。</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="color: black; font-size: 14pt">2</span></strong><strong><span style="color: black; font-size: 14pt">.</span></strong><strong><span style="color: black; font-size: 14pt">4 </span></strong><strong><span style="font-family: 宋体; color: black; font-size: 14pt">子标题对象</span></strong></p>
<p style="text-align: left" class="MsoNormal" align="left"><span style="font-family: 宋体; color: black; font-size: 12pt">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体; color: black; font-size: 12pt">子标题对象是</span><span style="font-family: 宋体; color: black; font-size: 12pt">Title</span><span style="font-family: 宋体; color: black; font-size: 12pt">类型的对象，一个JFreeChart可以有多个子标题对象。JFreeChart提供了5种Title的实现，可以是图片、文本、图例等的形式。</span></p>
<p style="text-align: left; margin: 13pt 0cm" class="MsoNormal" align="left"><strong><span style="font-size: 14pt">2.5</span></strong><strong><span style="font-family: 宋体; font-size: 14pt">数据源处理</span></strong></p>
<p style="text-align: left; text-indent: 24pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: black; font-size: 12pt">JFreeChart</span><span style="font-family: 宋体; color: black; font-size: 12pt">中的数据源是DataSet接口类型。该接口有三个主要的子类接口：CategoryDataset、PieDataset、SeriesDataset</span></p>
<p style="text-align: left; text-indent: 24pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: black; font-size: 12pt">CategoryDataset</span><span style="font-family: 宋体; color: black; font-size: 12pt">接口的实现类基本上都维护了一个三元组&lt;value,row,col&gt;的列表结构。不同的实现类中value的类型不相同。&lt;row,col&gt;唯一确定一个三元组。CategoryDataset的实现类提供对这个三元组的增删改查操作。</span></p>
<p style="text-align: left; text-indent: 20pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: black; font-size: 12pt">PieDataset</span><span style="font-family: 宋体; color: black; font-size: 12pt">接口有两个主要的实现类：CategoryToPieDataset、DefaultPieDataset。</span></p>
<p style="text-align: left; text-indent: 20pt" class="MsoNormal" align="left"><span style="font-family: 宋体; color: black; font-size: 12pt">SeriesDataset</span><span style="font-family: 宋体; color: black; font-size: 12pt">接口的实现类基本上都维护了一种特定数据结构的列表。以TimeSeriesCollection为例。它维护一个TimeSeries对象列表，提供对该列表的增删查操作。每个TimeSeries对象维护一个&lt;time,value&gt;列表，提供对该列表的增删改查操作。</span></p>
 <img src ="http://www.blogjava.net/donghang73/aggbug/326667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2010-07-20 20:29 <a href="http://www.blogjava.net/donghang73/archive/2010/07/20/326667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SimpleDateFormat的用法</title><link>http://www.blogjava.net/donghang73/archive/2010/07/13/326017.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Tue, 13 Jul 2010 13:39:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2010/07/13/326017.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/326017.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2010/07/13/326017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/326017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/326017.html</trackback:ping><description><![CDATA[<p>public class SimpleDateFormat extends DateFormat<br />
SimpleDateFormat 是一个以国别敏感的方式格式化和分析数据的具体类。 它允许格式化 (date -&gt; text)、语法分析 (text -&gt; date)和标准化。</p>
<p>SimpleDateFormat 允许以为日期-时间格式化选择任何用户指定的方式启动。 但是，希望用 DateFormat 中的 getTimeInstance、 getDateInstance 或 getDateTimeInstance 创建一个日期-时间格式化程序。 每个类方法返回一个以缺省格式化方式初始化的日期／时间格式化程序。 可以根据需要用 applyPattern 方法修改格式化方式。</p>
<p>SimpleDateFormat函数的继承关系：<br />
java.lang.Object<br />
&nbsp;&nbsp; |<br />
&nbsp;&nbsp; +----java.text.Format<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +----java.text.DateFormat<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +----java.text.SimpleDateFormat<br />
<table border="0" cellspacing="3" summary="Chart shows pattern letters, date/time component, presentation, and examples." cellpadding="0">
    <tbody>
        <tr bgcolor="#ccccff">
            <th align="left">字母
            <th align="left">日期或时间元素
            <th align="left">表示
            <th align="left">示例
            <tr>
                <td><code>G</code>
                <td>Era 标志符
                <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#text">Text</a>
                <td><code>AD</code>
                <tr bgcolor="#eeeeff">
                    <td><code>y</code>
                    <td>年
                    <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#year">Year</a>
                    <td><code>1996</code>; <code>96</code>
                    <tr>
                        <td><code>M</code>
                        <td>年中的月份
                        <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#month">Month</a>
                        <td><code>July</code>; <code>Jul</code>; <code>07</code>
                        <tr bgcolor="#eeeeff">
                            <td><code>w</code>
                            <td>年中的周数
                            <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                            <td><code>27</code>
                            <tr>
                                <td><code>W</code>
                                <td>月份中的周数
                                <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                                <td><code>2</code>
                                <tr bgcolor="#eeeeff">
                                    <td><code>D</code>
                                    <td>年中的天数
                                    <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                                    <td><code>189</code>
                                    <tr>
                                        <td><code>d</code>
                                        <td>月份中的天数
                                        <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                                        <td><code>10</code>
                                        <tr bgcolor="#eeeeff">
                                            <td><code>F</code>
                                            <td>月份中的星期
                                            <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                                            <td><code>2</code>
                                            <tr>
                                                <td><code>E</code>
                                                <td>星期中的天数
                                                <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#text">Text</a>
                                                <td><code>Tuesday</code>; <code>Tue</code>
                                                <tr bgcolor="#eeeeff">
                                                    <td><code>a</code>
                                                    <td>Am/pm 标记
                                                    <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#text">Text</a>
                                                    <td><code>PM</code>
                                                    <tr>
                                                        <td><code>H</code>
                                                        <td>一天中的小时数（0-23）
                                                        <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                                                        <td><code>0</code>
                                                        <tr bgcolor="#eeeeff">
                                                            <td><code>k</code>
                                                            <td>一天中的小时数（1-24）
                                                            <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                                                            <td><code>24</code>
                                                            <tr>
                                                                <td><code>K</code>
                                                                <td>am/pm 中的小时数（0-11）
                                                                <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                                                                <td><code>0</code>
                                                                <tr bgcolor="#eeeeff">
                                                                    <td><code>h</code>
                                                                    <td>am/pm 中的小时数（1-12）
                                                                    <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                                                                    <td><code>12</code>
                                                                    <tr>
                                                                        <td><code>m</code>
                                                                        <td>小时中的分钟数
                                                                        <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                                                                        <td><code>30</code>
                                                                        <tr bgcolor="#eeeeff">
                                                                            <td><code>s</code>
                                                                            <td>分钟中的秒数
                                                                            <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                                                                            <td><code>55</code>
                                                                            <tr>
                                                                                <td><code>S</code>
                                                                                <td>毫秒数
                                                                                <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#number">Number</a>
                                                                                <td><code>978</code>
                                                                                <tr bgcolor="#eeeeff">
                                                                                    <td><code>z</code>
                                                                                    <td>时区
                                                                                    <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#timezone">General time zone</a>
                                                                                    <td><code>Pacific Standard Time</code>; <code>PST</code>; <code>GMT-08:00</code>
                                                                                    <tr>
                                                                                        <td><code>Z</code>
                                                                                        <td>时区
                                                                                        <td><a href="mk:@MSITStore:E:\资料\电子书\开源_Java\Java学习\Java相关文档\JDK_API_1_6_zh_CN.CHM::/java/text/SimpleDateFormat.html#rfc822timezone">RFC 822 time zone</a>
                                                                                        <td><code>-0800</code> </td>
                                                                                    </tr>
                                                                                </tbody>
                                                                            </table>
                                                                            <br />
                                                                            一个小例子，帮助更好的理解SimpleDataFormat<br />
                                                                            </p>
                                                                            <div style="border-bottom: #cccccc 1px solid; border-left: #cccccc 1px solid; padding-bottom: 4px; background-color: #eeeeee; padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; border-top: #cccccc 1px solid; border-right: #cccccc 1px solid; padding-top: 4px"><img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.text.ParseException;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.text.SimpleDateFormat;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;java.util.Date;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /><br />
                                                                            <img id="Codehighlighter1_126_1261_Open_Image" onclick="this.style.display='none'; Codehighlighter1_126_1261_Open_Text.style.display='none'; Codehighlighter1_126_1261_Closed_Image.style.display='inline'; Codehighlighter1_126_1261_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_126_1261_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_126_1261_Closed_Text.style.display='none'; Codehighlighter1_126_1261_Open_Image.style.display='inline'; Codehighlighter1_126_1261_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;TestSimpleDataFormat&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_126_1261_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_126_1261_Open_Text"><span style="color: #000000">{<br />
                                                                            <img id="Codehighlighter1_168_1259_Open_Image" onclick="this.style.display='none'; Codehighlighter1_168_1259_Open_Text.style.display='none'; Codehighlighter1_168_1259_Closed_Image.style.display='inline'; Codehighlighter1_168_1259_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_168_1259_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_168_1259_Closed_Text.style.display='none'; Codehighlighter1_168_1259_Open_Image.style.display='inline'; Codehighlighter1_168_1259_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_168_1259_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_168_1259_Open_Text"><span style="color: #000000">{&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;myFmt&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yyyy年MM月dd日&nbsp;HH时mm分ss秒</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;myFmt1&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yy/MM/dd&nbsp;HH:mm</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;myFmt2&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yyyy-MM-dd&nbsp;HH:mm:ss</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">等价于now.toLocaleString()&nbsp;[depreciated]</span><span style="color: #008000"><br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;myFmt3&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yyyy年MM月dd日&nbsp;HH时mm分ss秒&nbsp;E&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;myFmt4&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">一年中的第&nbsp;D&nbsp;天|一年中第w个星期&nbsp;|一月中第W个星期|在一天中k时&nbsp;z时区</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">格式化示例</span><span style="color: #008000"><br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;now</span><span style="color: #000000">=</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Date();&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myFmt.format(now));&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myFmt1.format(now));&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myFmt2.format(now));&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myFmt3.format(now));&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myFmt4.format(now));&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(now.toString());&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">解析示例</span><span style="color: #008000"><br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SimpleDateFormat&nbsp;myFmt5&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SimpleDateFormat(</span><span style="color: #000000">"</span><span style="color: #000000">yyyy/MM/dd&nbsp;HH</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;time&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">2010/08/02&nbsp;00</span><span style="color: #000000">"</span><span style="color: #000000">;<br />
                                                                            <img id="Codehighlighter1_1122_1198_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1122_1198_Open_Text.style.display='none'; Codehighlighter1_1122_1198_Closed_Image.style.display='inline'; Codehighlighter1_1122_1198_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1122_1198_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1122_1198_Closed_Text.style.display='none'; Codehighlighter1_1122_1198_Open_Image.style.display='inline'; Codehighlighter1_1122_1198_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1122_1198_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1122_1198_Open_Text"><span style="color: #000000">{<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;datatime&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;myFmt5.parse(time);<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(datatime);<br />
                                                                            <img id="Codehighlighter1_1225_1253_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1225_1253_Open_Text.style.display='none'; Codehighlighter1_1225_1253_Closed_Image.style.display='inline'; Codehighlighter1_1225_1253_Closed_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif"  alt="" /><img style="display: none" id="Codehighlighter1_1225_1253_Closed_Image" onclick="this.style.display='none'; Codehighlighter1_1225_1253_Closed_Text.style.display='none'; Codehighlighter1_1225_1253_Open_Image.style.display='inline'; Codehighlighter1_1225_1253_Open_Text.style.display='inline';" align="top" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">catch</span><span style="color: #000000">&nbsp;(ParseException&nbsp;e)&nbsp;</span><span style="border-bottom: #808080 1px solid; border-left: #808080 1px solid; background-color: #ffffff; display: none; border-top: #808080 1px solid; border-right: #808080 1px solid" id="Codehighlighter1_1225_1253_Closed_Text"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1225_1253_Open_Text"><span style="color: #000000">{<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif"  alt="" />}</span></span><span style="color: #000000"><br />
                                                                            <img align="top" src="http://www.blogjava.net/images/OutliningIndicators/None.gif"  alt="" /></span></div>
  <img src ="http://www.blogjava.net/donghang73/aggbug/326017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2010-07-13 21:39 <a href="http://www.blogjava.net/donghang73/archive/2010/07/13/326017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sendRedirect()与forward()实现转向的异同（转载）</title><link>http://www.blogjava.net/donghang73/archive/2010/02/04/312000.html</link><dc:creator>donghang73</dc:creator><author>donghang73</author><pubDate>Thu, 04 Feb 2010 08:15:00 GMT</pubDate><guid>http://www.blogjava.net/donghang73/archive/2010/02/04/312000.html</guid><wfw:comment>http://www.blogjava.net/donghang73/comments/312000.html</wfw:comment><comments>http://www.blogjava.net/donghang73/archive/2010/02/04/312000.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/donghang73/comments/commentRss/312000.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/donghang73/services/trackbacks/312000.html</trackback:ping><description><![CDATA[sendRedirect()与forward()实现转向的异同<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 1.前面慢，后者快<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 2.前面无法读取request.setAttribute()所保存的数值，而后者可以读取<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 3.前者地址栏显示真正转向后的地址,而后者显示的是转向前的地址<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 4.前者，转向地址开始的"/",表示的是本机的根目录；而后者,"/"表示的是应用的根目录<br />
<br />
<p>1.RequestDispatcher.forward()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是在服务器端起作用,当使用forward()时,Servletengine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过 response.setAttribute("name",name)来传至下一个页面.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;重定向后浏览器地址栏URL不变. 因为完成一个业务操作往往需要跨越多个步骤，每一步骤完成相应的处理后，转向到下一个步骤。比如，通常业务处理在Servlet中处理，处理的结果转向到一个 JSP页面进行显示。这样看起来类似于Servlet链的功能，但是还有一些区别。一个RequestDispatcher对象可以把请求发送到任意一个服务器资源，而不仅仅是另外一个Servlet。</p>
<p>注意，只有在尚未向客户端输出响应时才可以调用forward()方法，如果页面缓存不为空，在重定向前将自动清除缓存。否则将抛出一个异常</p>
<p>例:servlet文件中重定向</p>
<p><br />
public void doPost(HttpServletRequest request,HttpServletResponse response)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throws ServletException,IOException</p>
<p>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; response.setContentType("text/html; charset=gb2312");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletContext sc = getServletContext();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RequestDispatcher rd = null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rd = sc.getRequestDispatcher("/index.jsp");</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rd.forward(request, response);</p>
<p>}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;<br />
2.response.sendRedirect()</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,同时它可以重定向至不同的主机上,且在浏览器地址栏上会出现重定向页面的URL.</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HttpServletResponse接口定义了可用于转向的sendRedirect()方法。代码如下： </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void sendRedirect(java.lang.String location)throws java.io.IOException</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个方法将响应定向到参数location指定的、新的URL。location可以是一个绝对的URL，如response.sendRedirect ("<a href="http://java.sun.com/">http://java.sun.com</a>")也可以使用相对的URL。如果 location以"/"开头，则容器认为相对于当前Web应用的根，否则，容器将解析为相对于当前请求的URL。这种重定向的方法，将导致客户端浏览器的请求URL跳转。从浏览器中的地址栏中可以看到新的URL地址，作用类似于上面设置HTTP响应头信息的实现<br />
&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequestDispatcher.forward()方法和HttpServletResponse.sendRedirect()方法的区别是：前者仅是容器中控制权的转向，在客户端浏览器地址栏中不会显示出转向后的地址；后者则是完全的跳转，浏览器将会得到跳转的地址，并重新发送请求链接。这样，从浏览器的地址栏中可以看到跳转后的链接地址。所以，前者更加高效，在前者可以满足需要时，尽量使用Request Dispatcher.forward()方法，并且，这样也有助于隐藏实际的链接。在有些情况下，比如，需要跳转到一个其它服务器上的资源，则必须使用 HttpServletResponse.sendRequest()方法。</p>
<img src ="http://www.blogjava.net/donghang73/aggbug/312000.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/donghang73/" target="_blank">donghang73</a> 2010-02-04 16:15 <a href="http://www.blogjava.net/donghang73/archive/2010/02/04/312000.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>