posts - 32,  comments - 3,  trackbacks - 0
  2010年7月20日

发现现在几乎所有的网站都对url中的汉字和特殊的字符,进行了urlencode操作,也就是:

http://hi.baidu.com/%BE%B2%D0%C4%C0%CF%C8%CB/creat/blog/

这个样子,中间%形式的,肯定就是我的登录用户名称了吧。

为什么对这些字符进行了u的编码形式,是为了字符编码(gbk、utf8)还是为了不出现特殊的字符在url中?都知道要转,但是转了的真正好处呢。查看了网上的很多资料,也没有找到更加准确的说法。

url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。

看一下php的urlencode的说明了。

urlencode — 编码 URL 字符串

string urlencode ( string $str )

返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。此函数便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。

标准的英文说明是:

"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."

那哪些字符是需要转化的呢?

1. ASCII 的控制字符

这些字符都是不可打印的,自然需要进行转化。

2. 一些非ASCII字符

这些字符自然是非法的字符范围。转化也是理所当然的了。

3. 一些保留字符

很明显最常见的就是“&”了,这个如果出现在url中了,那你认为是url中的一个字符呢,还是特殊的参数分割用的呢?

4. 就是一些不安全的字符了。

例如:空格。为了防止引起歧义,需要被转化为“+”。

明白了这些,也就知道了为什么需要转化了,而转化的规则也是很简单的。

按照每个字符对应的字符编码,不是符合我们范围的,统统的转化为%的形式也就是了。自然也是16进制的形式。

和字符编码无关

通过urlencode的转化规则和目的,我们也很容易的看出,urleocode是基于字符编码的。同样的一个汉字,不同的编码类型,肯定对应不同的urleocode的串。gbk编码的有gbk的encode结果。

apache等服务器,接受到字符串后,可以进行decode,但是还是无法解决编码的问题。编码问题,还是需要靠约定或者字符编码的判断解决。

因此,urleocode只是为了url中一些非ascii字符,可以正确无误的被传输,至于使用哪种编码,就不是eocode所关心和解决的问题了。

编码问题,不是urlencode所要解决的。
转自:http://apps.hi.baidu.com/share/detail/32230450

参考资料:

http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

http://cn.php.net/manual/zh/function.urlencode.php

 

 

 

posted @ 2011-08-10 13:16 donghang73 阅读(10402) | 评论 (0)编辑 收藏

在文件夹选项里改了驱动器或文件夹的图标,发现双击打开硬盘变成了搜索

解决方法:

运行
regsvr32 /i shell32.dll

解决!

posted @ 2011-08-05 10:27 donghang73 阅读(227) | 评论 (0)编辑 收藏
//首先在HEAD区加入要引用的JS
<head>
<script type="text/javascript" src="FCKEditor/fckeditor.js"></script> 
<script type="text/javascript" language="javascript">
function check()
{
   // 取得FCKEditor的值,GetInstance(arg),这里的参数arg是FCKeditor实例名;
   //如声明FCKeditor用var oFCKeditor = new FCKeditor('FCKEditor1',500,200,'Board'),则此时arg就是FCKEditor1;
        var checkContent1 =FCKeditorAPI.GetInstance("FCKEditor1").GetXHTML();
        if (checkContent1 == "")
        {
           strErr += '评论内容不能为空!\n\n';
    alert(strErr);
        }
}
</script>
</head>
<%-- 把这段写在需要显示FCKEditor编辑框的地方 --%>
<div class="FCKeditor">
<script type="text/javascript">
    var sBasePath = "FCKEditor/";
    var oFCKeditor = new FCKeditor('FCKEditor1',500,200,'Board'); //实例名为FCKEditor1
    oFCKeditor.BasePath = sBasePath ;
    oFCKeditor.Create() ;
</script>
</div>
<%-- 用于提交内容的按钮,响应点击事件为 check() --%>
<input id="Button1" value="button" type="button" onclick="check()" />
转自:http://hi.baidu.com/myaspdotnet/blog/item/0b73cd3f0ab9f3c77c1e714a.html
posted @ 2011-05-27 22:21 donghang73 阅读(219) | 评论 (0)编辑 收藏

Google code 获取密码页打不开的解决办法

# Project members authenticate over HTTPS to allow committing changes. 
svn checkout https://yourprj.googlecode.com/svn/trunk/ yourprj --username youraccount

When prompted, enter your generated googlecode.com password.

 

在文件 C:\Windows\System32\drivers\etc\hosts 中加入 66.249.89.99 code.google.com

posted @ 2011-04-17 17:25 donghang73 阅读(1403) | 评论 (0)编辑 收藏

1. 进入http://code.google.com/ 用Google帐户登录(推荐使用gmail邮箱)。然后点击>Project Hosting
2. 进入>> http://code.google.com/hosting/ 然后点击>Create a new project
3. 填入信息:
      写入项目名,描述,两个选择项(不太明白啥意思)选第一个就好使,写入标签,点击确定。就可以了
4. 提交成功后,选择菜单的Source(其中有https上传协议路径需要拷贝一份,还有一个上传密码)。
5. 打开MyEclipse,打开需要上传的项目,点鼠标右键->team->share Project->svn,写入https路径,下一步,输入Google账号和上传密码,起个名,finish。
6.如果一切顺利,会自动生成一个项目目录,可以查看所有项目文件。然后进入搭建项目界面,点鼠标右键->team->commit。然后开始上传项目。
7.哦了,搭建完成。
8.如果想查看自己的项目,可以用浏览器登陆https的路径,输入Google账号和上传密码,如果成功就可以看到含有项目名称的目录。

PS:
需要注意的是,Google的SVN是强制开源的哦,如果不想开源又没服务器的朋友开源选择svnhost
再PS:
http地址是自读权限的,供游客下载代码,https是我们更新代码的时候使用的

转自:http://hi.baidu.com/%C0%AF%B1%CA%B9%A4%D7%F7%CA%D2/blog/item/d6f6c6d7707d81d0a044df5f.html

posted @ 2011-04-17 17:12 donghang73 阅读(14564) | 评论 (2)编辑 收藏

<property name="hibernate.hbm2ddl.auto" value="update" />

Hibernate Reference Documentation解释如下:
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.  eg. validate | update | create | create-drop

这个参数的作用主要用于:自动创建|更新|验证数据库表结构。
如果没有此方面的需求建议不设置此属性,默认是不对数据库结构作任何改变

其它几个参数的意思:
validate     
每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

create
每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。

create-drop
每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。

update
最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。

posted @ 2011-04-17 16:53 donghang73 阅读(548) | 评论 (0)编辑 收藏
     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> 1 <?xml version="1.0" encoding="ISO-8859-1"?>    2&nb...  阅读全文
posted @ 2011-04-16 17:18 donghang73 阅读(2735) | 评论 (0)编辑 收藏

Java中使用的路径,分为两种:绝对路径和相对路径。归根结底,Java本质上只能使用绝对路径来寻找资源。所有的相对路径寻找资源的方法,都不过是一些便利方法。不过是API在底层帮助我们构建了绝对路径,从而找到资源的!

在开发Web方面的应用时, 经常需要获取 服务器中当前WebRoot的物理路径。

如果是Servlet , Action , Controller, 或则Filter , Listener , 拦截器等相关类时, 我们只需要获得ServletContext, 然后通过ServletContext.getRealPath("/")来获取当前应用在服务器上的物理地址。

如果在类中取不到ServletContext时, 有两种方式可以做到:

1. 利用Java的类加载机制 调用 XXX.class.getClassLoader().getResource(""); 方法来获取到ClassPath , 然后处理获得WebRoot目录,这种方式只能是该class在WebRoot/WEB-INF/classes下才能生效, 如果该class被打包到一个jar文件中, 则该方法失效。这时就应该用下面一种方式。

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的物理路 径。

根据第二种的思路,我们还可以再扩展一下。不过对于在部署在一台服务器中的应用来说,若还不是你所需请再往下看。

下面是一些得到classpath和当前类的绝对路径的一些方法。你可使用其中的一些方法来得到你需要的资源的绝对路径:

1. DebitNoteAction.class.getResource("")

得到的是当前类FileTest.class文件的URI目录。不包括自己!

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

atacarnet/src/com/evi/modules/atacarnet/action/

2. DebitNoteAction.class.getResource("/")

得到的是当前的classpath的绝对URI路径。

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

3. Thread.currentThread().getContextClassLoader().getResource("")

得到的也是当前ClassPath的绝对URI路径

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

4. DebitNoteAction.class.getClassLoader().getResource("") 或ClassLoader.getSystemResource("")

得到的也是当前ClassPath的绝对URI路径。

如:file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/

5. 取得服务器相对路径

System.getProperty("user.dir")

例如:E:\apache-tomcat-5.5.16\apache-tomcat-5.5.16\bin

我推荐使用Thread.currentThread().getContextClassLoader().getResource("")来得到当前的classpath的绝对路径的URI表示法

6. 取得项目中的绝对路径

一般用request.getRealPath("/")或request.getRealPath("/config/")

但现在不提倡使用request.getRealPath("/")了,大家可试用ServletContext.getRealPath("/")方法得到Web应用程序的根目录的绝对路径

要取得src的文件非常容易,因为src是默认的相对目录,比如你说要取得src下com目录的test.java文件,你只需要这样就够了

File f = new File(com/test.java);

但如果我要取得不在src目录或者WebRoot目录下的文件呢,而是要从src或者WebRoot同级的目录中取呢,比如说doc吧

我的硬方法是这样实现的:

String path = this.getServletContext().getRealPath("/");

Properties p = new Properties();

p.load(new FileInputStream(new File(path.substring(0,(path.lastIndexOf("\\WebRoot ") + 1)) + "doc/db.properties")));

System.out.println(p.getProperty("driverName"));

转自:http://blog.csdn.net/c5153000/archive/2011/03/23/6272195.aspx

posted @ 2011-04-15 17:25 donghang73 阅读(812) | 评论 (0)编辑 收藏
啥也不说了,看图吧
posted @ 2011-03-02 16:12 donghang73 阅读(376) | 评论 (0)编辑 收藏
 

    有很多时候,我们删除文件,系统会提示找不到指定的文件。但是你可以看到文件在硬盘里面,这个问题需要怎么解决呢?一般情况下,我们可以使用软件解决。不过推荐使用DOS命令,找不到指定文件通常使用一下方法解决。
  1、新建一个文本文档,写入(直接复制粘贴)下列命令:
  DEL /F /A /Q \\?\%1  
      RD /S /Q \\?\%1
  
   
2、另存为:删除OK.bat
  3、建好后,把要删除的文件或者目录直接拖放到这个bat文件图标上就可以删除了,一切OK!
  ------------------------------------------------------------------------------------------------

  在说另种方法,提供删除方法(以删除c "xxxxxx..."文件夹为例),在执行删除动作时,提示文件夹无法删除,找不到指定路径
  解决方法:由于该文件夹真正的名称为"xxxxxx..."" 所以我们就必须写对文件名.
  操作:开始运行输入“cmd”回车——输入“C: ”回车输入 RMDIR    空格 C:"xxxxxx..."    空格 /S 空格 /Q    回车即可删除。
  注意:需要删除其他类似文件,把盘符和xxxxxx...改为你电脑里面的盘符和文件名即可!
  或新建记事本,在记事本写入:RMDIR 空格文件夹" /S /Q    保存(保存前把文件夹改为你要删除文件夹的名称)退出把记事本的后缀名改成“bat”(如:新建文本文档.txt   改成新文本文档 .bat)然后剪切到你要删除文件夹所在的目录,最后点击你粘贴过来的文件-->运行就OK
      ==================================================

posted @ 2011-03-02 15:57 donghang73 阅读(445) | 评论 (0)编辑 收藏
一、windows中虚拟Linux

1.Linux安装增强功能

2.VirtualBox 分配数据空间

3.Linux中建共享文件夹挂载的目录(如mkdir /mnt/share)

4.linux挂载共 享文件夹(sudo mount –t vboxsf [设置的共享文件夹名称]  /mnt/share)

二、Linux中虚拟windows

1.windows安装增强功能

2.VirtualBox分配数据空间

3.windows 中我的电脑右键-映射网络驱动器-浏览-选中分配的共享文件夹

posted @ 2010-08-09 23:12 donghang73 阅读(211) | 评论 (0)编辑 收藏
     摘要: 最近用到了JFreeChart,现将实例代码贴出来,大家可以参考一下,代码中如有错误或可以改进的地方,还请大家指正。 通过下面的代码,可以很清晰地看出JFreeChart的结构,核心即为chart, plot, XXXAxis, renderer,了解了它们的常用方法后, 会发现其实JFreeChart使用起来是很简单方便的。废话不多说了,还是直接看示例吧。   1.柱状图 ...  阅读全文
posted @ 2010-07-25 22:44 donghang73 阅读(4464) | 评论 (1)编辑 收藏
1,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
2,svn-1.4.5-setup.exe
下载地址:http://subversion.tigris.org/files/documents/15/39559/svn-1.4.5-setup.exe
当然,你也可以选择安装TortoiseSVN.但是我没有装,因为我的源码管理都是用netbeans完成的.

好了,准备的两个软件都下载下来以后,就可以开始安装了.
首先安装apache,一般来说直接点下一步就可以了,在设置domain以及host的时候,设置为localhost就可以了,Email你可以填你自己的Email,也可以随便填一个.安装apache要注意的是,你的电脑上80端口不能被占用, 否则你的http服务是启动不起来的,我就遇到过这事,因为我用了skype,它在本机上打开了80和443端口来监听,搞得我一开始装不好,总是启动不起来,后来才发现是skype占用了80端口,于是把skype的设置改了以后,重装apache才成功.装好apache以后,这个时候,它已经在运行了,你可以在浏览器的地址栏输入http://localhost看看,是否安装成功,如果安装成功的话,这个时候浏览器里面应该是可以看到一个页面的.
然后,再安装svn-1.4.5-setup.exe,也很简单,一步一步点下步就可以了, 在安装的过程中,它会默认选中一些选项,其中就有一个是是否对apache的HTTP服务器提供支持的选项,这个默认是勾上的,不要去反选它,其它的你可以反选掉.然后svn就宣布安装成功了.你可以到CMD下面去试一下svn这个命令,如果有输出,则说明安装成功了,如果提示svn 不是内部或外部命令,也不是可运行的程序或批处理文件。那就说明没有装好.或者没有把这个命令加入到path中,所以最好的办法是到svn的安装目录下的 bin里面去看一下.
两者都装好了以后,就开始配置,当然,配置也是最重要的.
首先要建立一个数据仓库,我们假设建在E盘,数据仓库最好不要建在C盘,因为C盘重装系统以后就格了.我们先在E盘下面建立一个目录叫svnroot,然后在svnroot下面再建立一个我们专门放我们工程的目录,比如叫MyProject.于是我们在E盘下面就有了这个一个文件夹:E:\svnroot\MyProject, 然后我们用svnadmin的命令,使这个文件夹变成我们的数据仓库,命令如下:
svnadmin create E:\svnroot\MyProject
如果运行成功的话,什么也没有输出,这个时候,我们再来到MyProject文件夹下面,我们会发现多了几个文件夹和文件,我们打开conf文件夹,然后再打开svnserve.conf文件,找到如下行# password-db = passwd,然后把它前面的#去掉,表示MyProject是需要密码验证的.但是我们密码设在哪里呢,这个时候我们再打开conf文件夹下面的 passwd文件,用文本编辑器打开,在[users]下面加上我们需要启动的人员的用户和密码,比如
[users]
hadeslee=hadeslee1234
tom=123456

这个的话,我们就启动了两个用户,一个叫hadeslee,密码是hadeslee1234,一个叫tom,密码是123456.然后我们保存passwd文件.然后,我们再建一个文件,叫access.auth,这个文件是设置访问权限的,里面内容如下:
[MyProject:/]
hadeslee = rw
[MyProject:/module1]
tom=rw
hadeslee=rw

这表示,MyProject下面的所有子目录hadeslee都是有权限读写的,但是tom只有权限读写此项目下面的module1目录,这个各自的访问权限就分的更细致了.有关于MyProject文件夹下面的设置,我们就告一段落了,我们现在开始设置apache,使它能和subvertion一起工作.

首先来到Subersion的安装目录,进入它的bin目录,我们会发现如下两个文件:
mod_authz_svn.so
mod_dav_svn.so

我们把这两个文件复制一下,粘帖到 apache的安装目录下的modules文件中,然后我们再打开apache安装目录下的conf文件夹,打开httpd.conf文件.增加如下两行:
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

注意,由于dav_svn需要dav_module的支持,所以要确保下面这一行没有被注释,并且保证在dav_svn之前加载:
LoadModule dav_module modules/mod_dav.so
然后模块的设置就完成了,下面我们要设置SVN的目录,以使我们的apache能知道访问不同的URL的时候,它去哪里寻找这个URL所对应的SVN目录.
httpd.conf文件中,增加如下内容:
<Location /svn/MyProject>
DAV svn
SVNPath E:/svnroot/MyProject

AuthzSVNAccessFile E:/svnroot/MyProject/conf/access.auth
Satisfy Any
Require valid-user

AuthType Basic
AuthName "Subversion repositories"
AuthUserFile  E:/svnroot/MyProject/conf/users.auth
Require valid-user
</Location>


添加完上面这些,我们会发现access.auth是我们刚才新建的,可是users.auth我们并没有新建啊.怎么就把它加进去了.不要急,现在我们就来生成users.auth文件.

进入 apache的安装目录的bin文件夹,输入如下命令:

D:\Program Files\Apache Group\Apache2\bin>htpasswd -cb users.auth hadeslee hadeslee1234
Automatically using MD5 format.
Adding password for user hadeslee

D:\Program Files\Apache Group\Apache2\bin>

我们就会发现在bin目录生成了users.auth,我们可以看到,hadeslee用户名已经被添加进去了,密码是用MD5加密过的.然后我们还要增加用户呢,可以用如下方法:
D:\Program Files\Apache Group\Apache2\bin>htpasswd -b users.auth tom 123456
Automatically using MD5 format.
Adding password for user tom

D:\Program Files\Apache Group\Apache2\bin>


只是在生成密码的时候,小了一个c的参数,因为c表示重新生成一个这样的文件,我们第一次的时候是要加的,后面我们要添加用户的时候,就不用这个c了.然后打开users.auth,会发现两个用户都已经在里面了,这个时候,我们把users.auth移到E:/svnroot/MyProject/conf/里面去,使我们上面的设置生效.

这个时候,我们的设置就完成了.可以在浏览器里面输入http://localhost/svn/MyProject试试看.

如果以后我们还要加入其它的项目呢,可以有两点解决方式
1,把以后的项目也导入到我们的MyProject的仓库中,这个的话,就不用改什么配置了
2,新建一个数据仓库,然后只要按上面的步骤,把新的<Location...>设置放到 httpd.conf里面就可以了.
当然,验证文件,访问权限文件,还有访问SVN的密码都要自己按上面的方法再设一遍.

祝大家能够设置成功:)

转自:http://www.blogjava.net/hadeslee/archive/2008/03/12/185788.html
posted @ 2010-07-25 22:17 donghang73 阅读(215) | 评论 (0)编辑 收藏
1、下载jadclipse插件
注意:jadclipse_3.1.0.jar版本,该版本支持eclipse3.1M6~3.2M2
      jadclipse_3.2.0.jar版本,该版本支持eclipse3.2M3和eclipse3.2M4.
      jadclipse_3.2.4.jar版本,该版本支持eclipse3.2M5~3.3M5
      jadclipse_3.3.0.jar版本,该版本支持eclipse3.3M6及以上

2、下载jad.exe,并将下载好的jad.exe拷贝到jre的bin的目录下,或者把jad的执行文件的绝对路径加入到环境变量PATH中。

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(注意一定要双反斜杠"\\")

4、重新启动eclipse,查看 window->preferences->java->jadClipse,如果出现jadClipse则说明上述配置成功,否则检查上述配置。

5、Path to decomplier:指定反编译工具的jad文件所在的位置。(可以指定为jre的bin的目录下的jad.exe)

6、把*.class文件的associated editors设置为jadClipse Class File Viewer做为默认项


另:批量反编译
在cmd中,进入到class文件所在路径下,输入命令:jad -o -r -s java -d src *.class
       参数的含义:
       -o:覆盖旧文件,而且不用提示确认。
       -r:重新加载生成包结构。
       -s:定义输出文件的扩展名。jad为默认扩展名,我们反编译后当然是要.java源文件了。
       -d:输出文件的目录。src表示反编译后的所有文件都放在src目录下。
       *.class:指定解析该文件夹下的所有以.class结尾的文件,即解析class文件
posted @ 2010-07-22 22:05 donghang73 阅读(1013) | 评论 (0)编辑 收藏

myeclipseUTF-8设置

   如果要使插件开发应用能有更好的国际化支持,能够最大程度的支持中文输出,则最好使 Java文件使用UTF-8编码。然而,Eclipse工作空间(workspace)的缺省字符编码是操作系统缺省的编码,简体中文操作系统 (Windows XPWindows 2000简体中文)的缺省编码是GB18030,在此工作空间中建立的工程编码是GB18030,工程中建立的java文件也是GB18030。如果要使 新建立工程、java文件直接使UTF-8则需要做以下工作:

 

1windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Workspace,右 Text file encoding,选择Other,改变为UTF-8,以后新建立工程其属性对话框中的Text file encoding即为UTF-8


2windows->Preferences...打开"首选项"对话框,左侧导航树,导航到general->Content Types,右侧Context Types树,点开Text,选择Java Source File,在下面的Default encoding输入框中输入UTF-8,点Update,则设置Java文件编码为UTF-8。其他java应用开发相关的文件 如:propertiesXML等已经由Eclipse缺省指定,分别为ISO8859-1UTF-8,如开发中确需改变编码格式则可以在此指定。


3经过上述两步,新建java文件即为UTF-8编码,Eclipse编译、运行、调试都没问题,但是做RCP应用的Product输出时、或者插件 输出时,则总是出错,要么不能编译通过(输出时要重新compile)、要么输出的插件运行时中文显示乱码。此时需要再RCP应用、或插件Plugin 程的build.properties中增加一行,javacDefaultEncoding.. = UTF-8。让输出时编译知道java源文件时UTF-8编码。这个设置需要保证所有的java源文件时UTF-8编码格式,如果不全是,可以参考 Eclipse帮中(Plug-in Development Environment Guide > Reference > Feature and Plug-in Build configuration),建议全部java源文件是UTF-8编码。

   如果插件开发、RCP应用开发原来基于其他编码,如GB18030,想转换为UTF-8,则首先,做以上工作;然后通过查找编码转换工具,如基于 iconv的批量转换工具,将原编码转换为UTF-8编码,注意只转换java源文件,其他类型文件可能已经是比较合适的编码了;将原工程属性中的 Text file encoding,从原编码改为UTF-8即可。

posted @ 2010-07-20 22:03 donghang73 阅读(7951) | 评论 (0)编辑 收藏

JFreeChart类:
void setAntiAlias(boolean flag)    字体模糊边界
void setBackgroundImage(Image image)   背景图片
void setBackgroundImageAlignment(int alignment) 背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)
void setBackgroundImageAlpha(float alpha) 背景图片透明度(0.0~1.0)
void setBackgroundPaint(Paint paint)   背景色
void setBorderPaint(Paint paint)   边界线条颜色
void setBorderStroke(Stroke stroke)   边界线条笔触
void setBorderVisible(boolean visible)   边界线条是否可见

-----------------------------------------------------------------------------------------------------------

TextTitle类:
void setFont(Font font)     标题字体
void setPaint(Paint paint)    标题字体颜色
void setText(String text)    标题内容

-----------------------------------------------------------------------------------------------------------

StandardLegend(Legend)类:
void setBackgroundPaint(Paint paint)   图示背景色
void setTitle(String title)    图示标题内容
void setTitleFont(Font font)    图示标题字体
void setBoundingBoxArcWidth(int arcWidth) 图示边界圆角宽
void setBoundingBoxArcHeight(int arcHeight) 图示边界圆角高
void setOutlinePaint(Paint paint)   图示边界线条颜色
void setOutlineStroke(Stroke stroke)   图示边界线条笔触
void setDisplaySeriesLines(boolean flag) 图示项是否显示横线(折线图有效)
void setDisplaySeriesShapes(boolean flag) 图示项是否显示形状(折线图有效)
void setItemFont(Font font)    图示项字体
void setItemPaint(Paint paint)    图示项字体颜色
void setAnchor(int anchor)    图示在图表中的显示位置(参数常量在Legend类中定义)

-----------------------------------------------------------------------------------------------------------

Axis类:
void setVisible(boolean flag)    坐标轴是否可见
void setAxisLinePaint(Paint paint)   坐标轴线条颜色(3D轴无效)
void setAxisLineStroke(Stroke stroke)   坐标轴线条笔触(3D轴无效)
void setAxisLineVisible(boolean visible) 坐标轴线条是否可见(3D轴无效)
void setFixedDimension(double dimension) (用于复合表中对多坐标轴的设置)
void setLabel(String label)    坐标轴标题
void setLabelFont(Font font)    坐标轴标题字体
void setLabelPaint(Paint paint)    坐标轴标题颜色
void setLabelAngle(double angle)`   坐标轴标题旋转角度(纵坐标可以旋转)
void setTickLabelFont(Font font)   坐标轴标尺值字体
void setTickLabelPaint(Paint paint)   坐标轴标尺值颜色
void setTickLabelsVisible(boolean flag)   坐标轴标尺值是否显示
void setTickMarkPaint(Paint paint)   坐标轴标尺颜色
void setTickMarkStroke(Stroke stroke)   坐标轴标尺笔触
void setTickMarksVisible(boolean flag)   坐标轴标尺是否显示

ValueAxis(Axis)类:
void setAutoRange(boolean auto)    自动设置数据轴数据范围
void setAutoRangeMinimumSize(double size) 自动设置数据轴数据范围时数据范围的最小跨度
void setAutoTickUnitSelection(boolean flag) 数据轴的数据标签是否自动确定(默认为true)
void setFixedAutoRange(double length)   数据轴固定数据范围(设置100的话就是显示MAXVALUE到MAXVALUE-100那段数据范围)
void setInverted(boolean flag)    数据轴是否反向(默认为false)
void setLowerMargin(double margin)   数据轴下(左)边距
void setUpperMargin(double margin)   数据轴上(右)边距
void setLowerBound(double min)    数据轴上的显示最小值
void setUpperBound(double max)    数据轴上的显示最大值
void setPositiveArrowVisible(boolean visible) 是否显示正向箭头(3D轴无效)
void setNegativeArrowVisible(boolean visible) 是否显示反向箭头(3D轴无效)
void setVerticalTickLabels(boolean flag) 数据轴数据标签是否旋转到垂直
void setStandardTickUnits(TickUnitSource source) 数据轴的数据标签(可以只显示整数标签,需要将AutoTickUnitSelection设false)

NumberAxis(ValueAxis)类:
void setAutoRangeIncludesZero(boolean flag) 是否强制在自动选择的数据范围中包含0
void setAutoRangeStickyZero(boolean flag) 是否强制在整个数据轴中包含0,即使0不在数据范围中
void setNumberFormatOverride(NumberFormat formatter) 数据轴数据标签的显示格式
void setTickUnit(NumberTickUnit unit)   数据轴的数据标签(需要将AutoTickUnitSelection设false)

DateAxis(ValueAxis)类:
void setMaximumDate(Date maximumDate)   日期轴上的最小日期
void setMinimumDate(Date minimumDate)   日期轴上的最大日期
void setRange(Date lower,Date upper)   日期轴范围
void setDateFormatOverride(DateFormat formatter) 日期轴日期标签的显示格式
void setTickUnit(DateTickUnit unit)   日期轴的日期标签(需要将AutoTickUnitSelection设false)
void setTickMarkPosition(DateTickMarkPosition position) 日期标签位置(参数常量在org.jfree.chart.axis.DateTickMarkPosition类中定义)

CategoryAxis(Axis)类:
void setCategoryMargin(double margin)   分类轴边距
void setLowerMargin(double margin)   分类轴下(左)边距
void setUpperMargin(double margin)   分类轴上(右)边距
void setVerticalCategoryLabels(boolean flag) 分类轴标题是否旋转到垂直
void setMaxCategoryLabelWidthRatio(float ratio) 分类轴分类标签的最大宽度

-----------------------------------------------------------------------------------------------------------

Plot类:
void setBackgroundImage(Image image)   数据区的背景图片
void setBackgroundImageAlignment(int alignment) 数据区的背景图片对齐方式(参数常量在org.jfree.ui.Align类中定义)
void setBackgroundPaint(Paint paint)   数据区的背景图片背景色
void setBackgroundAlpha(float alpha)   数据区的背景透明度(0.0~1.0)
void setForegroundAlpha(float alpha)   数据区的前景透明度(0.0~1.0)
void setDataAreaRatio(double ratio)   数据区占整个图表区的百分比
void setOutLinePaint(Paint paint)   数据区的边界线条颜色
void setOutLineStroke(Stroke stroke)   数据区的边界线条笔触
void setNoDataMessage(String message)   没有数据时显示的消息
void setNoDataMessageFont(Font font)   没有数据时显示的消息字体
void setNoDataMessagePaint(Paint paint)   没有数据时显示的消息颜色

CategoryPlot(Plot)类:
void setDataset(CategoryDataset dataset) 数据区的2维数据表
void setColumnRenderingOrder(SortOrder order) 数据分类的排序方式
void setAxisOffset(Spacer offset)   坐标轴到数据区的间距
void setOrientation(PlotOrientation orientation) 数据区的方向(PlotOrientation.HORIZONTAL或PlotOrientation.VERTICAL)
void setDomainAxis(CategoryAxis axis)   数据区的分类轴
void setDomainAxisLocation(AxisLocation location) 分类轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)
void setDomainGridlinesVisible(boolean visible) 分类轴网格是否可见
void setDomainGridlinePaint(Paint paint) 分类轴网格线条颜色
void setDomainGridlineStroke(Stroke stroke) 分类轴网格线条笔触
void setRangeAxis(ValueAxis axis)   数据区的数据轴
void setRangeAxisLocation(AxisLocation location) 数据轴的位置(参数常量在org.jfree.chart.axis.AxisLocation类中定义)
void setRangeGridlinesVisible(boolean visible) 数据轴网格是否可见
void setRangeGridlinePaint(Paint paint)   数据轴网格线条颜色
void setRangeGridlineStroke(Stroke stroke) 数据轴网格线条笔触
void setRenderer(CategoryItemRenderer renderer) 数据区的表示者(详见Renderer组)
void addAnnotation(CategoryAnnotation annotation) 给数据区加一个注释
void addRangeMarker(Marker marker,Layer layer) 给数据区加一个数值范围区域

PiePlot(Plot)类:
void setDataset(PieDataset dataset)   数据区的1维数据表
void setIgnoreNullValues(boolean flag)   忽略无值的分类
void setCircular(boolean flag)    饼图是否一定是正圆
void setStartAngle(double angle)   饼图的初始角度
void setDirection(Rotation direction)   饼图的旋转方向
void setExplodePercent(int section,double percent) 抽取的那块(1维数据表的分类下标)以及抽取出来的距离(0.0~1.0),3D饼图无效
void setLabelBackgroundPaint(Paint paint) 分类标签的底色
void setLabelFont(Font font)    分类标签的字体
void setLabelPaint(Paint paint)    分类标签的字体颜色
void setLabelLinkMargin(double margin)   分类标签与图的连接线边距
void setLabelLinkPaint(Paint paint)   分类标签与图的连接线颜色
void setLabelLinkStroke(Stroke stroke)   分类标签与图的连接线笔触
void setLabelOutlinePaint(Paint paint)   分类标签边框颜色
void setLabelOutlineStroke(Paint paint)   分类标签边框笔触
void setLabelShadowPaint(Paint paint)   分类标签阴影颜色
void setMaximumLabelWidth(double width)   分类标签的最大长度(0.0~1.0)
void setPieIndex(int index)    饼图的索引(复合饼图中用到)
void setSectionOutlinePaint(int section,Paint paint) 指定分类饼的边框颜色
void setSectionOutlineStroke(int section,Stroke stroke) 指定分类饼的边框笔触
void setSectionPaint(int section,Paint paint) 指定分类饼的颜色
void setShadowPaint(Paint paint)   饼图的阴影颜色
void setShadowXOffset(double offset)   饼图的阴影相对图的水平偏移
void setShadowYOffset(double offset)   饼图的阴影相对图的垂直偏移
void setLabelGenerator(PieSectionLabelGenerator generator) 分类标签的格式,设置成null则整个标签包括连接线都不显示
void setToolTipGenerator(PieToolTipGenerator generator) MAP中鼠标移上的显示格式
void setURLGenerator(PieURLGenerator generator)   MAP中钻取链接格式

PiePlot3D(PiePlot)类:
void setDepthFactor(double factor)   3D饼图的Z轴高度(0.0~1.0)

MultiplePiePlot(Plot)类:
void setLimit(double limit)    每个饼图之间的数据关联(详细比较复杂)  
void setPieChart(JFreeChart pieChart)   每个饼图的显示方式(见JFreeChart类个PiePlot类)

-----------------------------------------------------------------------------------------------------------

AbstractRenderer类:
void setItemLabelAnchorOffset(double offset)     数据标签的与数据点的偏移
void setItemLabelsVisible(boolean visible)     数据标签是否可见
void setItemLabelFont(Font font)      数据标签的字体
void setItemLabelPaint(Paint paint)      数据标签的字体颜色
void setItemLabelPosition(ItemLabelPosition position)    数据标签位置
void setPositiveItemLabelPosition(ItemLabelPosition position)   正数标签位置
void setNegativeItemLabelPosition(ItemLabelPosition position)   负数标签位置
void setOutLinePaint(Paint paint)      图形边框的线条颜色
void setOutLineStroke(Stroke stroke)      图形边框的线条笔触
void setPaint(Paint paint)       所有分类图形的颜色
void setShape(Shape shape)       所有分类图形的形状(如折线图的点)
void setStroke(Stroke stroke)       所有分类图形的笔触(如折线图的线)
void setSeriesItemLabelsVisible(int series,boolean visible)   指定分类的数据标签是否可见
void setSeriesItemLabelFont(int series,Font font)    指定分类的数据标签的字体
void setSeriesItemLabelPaint(int series,Paint paint)    指定分类的数据标签的字体颜色
void setSeriesItemLabelPosition(int series,ItemLabelPosition position) 数据标签位置
void setSeriesPositiveItemLabelPosition(int series,ItemLabelPosition position) 正数标签位置
void setSeriesNegativeItemLabelPosition(int series,ItemLabelPosition position) 负数标签位置
void setSeriesOutLinePaint(int series,Paint paint)    指定分类的图形边框的线条颜色
void setSeriesOutLineStroke(int series,Stroke stroke)    指定分类的图形边框的线条笔触
void setSeriesPaint(int series,Paint paint)     指定分类图形的颜色
void setSeriesShape(int series,Shape shape)     指定分类图形的形状(如折线图的点)
void setSeriesStroke(int series,Stroke stroke)     指定分类图形的笔触(如折线图的线)

AbstractCategoryItemRenderer(AbstractRenderer)类:
void setLabelGenerator(CategoryLabelGenerator generator)   数据标签的格式
void setToolTipGenerator(CategoryToolTipGenerator generator)   MAP中鼠标移上的显示格式
void setItemURLGenerator(CategoryURLGenerator generator)   MAP中钻取链接格式
void setSeriesLabelGenerator(int series,CategoryLabelGenerator generator) 指定分类的数据标签的格式
void setSeriesToolTipGenerator(int series,CategoryToolTipGenerator generator) 指定分类的MAP中鼠标移上的显示格式
void setSeriesItemURLGenerator(int series,CategoryURLGenerator generator) 指定分类的MAP中钻取链接格式

BarRenderer(AbstractCategoryItemRenderer)类:
void setDrawBarOutline(boolean draw)      是否画图形边框
void setItemMargin(double percent)      每个BAR之间的间隔
void setMaxBarWidth(double percent)      每个BAR的最大宽度
void setMinimumBarLength(double min)      最短的BAR长度,避免数值太小而显示不出
void setPositiveItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的正数标签位置
void setNegativeItemLabelPositionFallback(ItemLabelPosition position) 无法在BAR中显示的负数标签位置

BarRenderer3D(BarRenderer)类:
void setWallPaint(Paint paint)    3D坐标轴的墙体颜色

StackedBarRenderer(BarRenderer)类:
没有特殊的设置

StackedBarRenderer3D(BarRenderer3D)类:
没有特殊的设置

GroupedStackedBarRenderer(StackedBarRenderer)类:
void setSeriesToGroupMap(KeyToGroupMap map)将分类自由的映射成若干个组(KeyToGroupMap.mapKeyToGroup(series,group))

LayeredBarRenderer(BarRenderer)类:
void setSeriesBarWidth(int series,double width) 设定每个分类的宽度(注意设置不要使某分类被覆盖)

WaterfallBarRenderer(BarRenderer)类:
void setFirstBarPaint(Paint paint)   第一个柱图的颜色
void setLastBarPaint(Paint paint)   最后一个柱图的颜色
void setPositiveBarPaint(Paint paint)   正值柱图的颜色
void setNegativeBarPaint(Paint paint)   负值柱图的颜色

IntervalBarRenderer(BarRenderer)类:
需要传IntervalCategoryDataset作为数据源

GanttBarRenderer(IntervalBarRenderer)类:
void setCompletePaint(Paint paint)   完成进度颜色
void setIncompletePaint(Paint paint)   未完成进度颜色
void setStartPercent(double percent)   设置进度条在整条中的起始位置(0.0~1.0)
void setEndPercent(double percent)   设置进度条在整条中的结束位置(0.0~1.0)

StatisticBarRenderer(BarRenderer)类:
需要传StatisticCategoryDataset作为数据源

LineAndShapeRenderer(AbstractCategoryItemRenderer)类:
void setDrawLines(boolean draw)    是否折线的数据点之间用线连
void setDrawShapes(boolean draw)   是否折线的数据点根据分类使用不同的形状
void setShapesFilled(boolean filled)   所有分类是否填充数据点图形
void setSeriesShapesFilled(int series,boolean filled) 指定分类是否填充数据点图形
void setUseFillPaintForShapeOutline(boolean use) 指定是否填充数据点的Paint也被用于画数据点形状的边框

LevelRenderer(AbstractCategoryItemRenderer)类:
void setItemMargin(double percent)   每个分类之间的间隔
void setMaxItemWidth(double percent)   每个分类的最大宽度

CategoryStepRenderer(AbstractCategoryItemRenderer)类:
void setStagger(boolean shouldStagger)   不同分类的图是否交错

MinMaxCategoryRenderer(AbstractCategoryItemRenderer)类:
void setDrawLines(boolean drawLines)   是否在每个分类线间画连接线
void setGroupPaint(Paint groupPaint)   一组图形连接线的颜色
void setGroupStroke(Stroke groupStroke)   一组图形连接线的笔触
void setMaxIcon(Icon maxIcon)    最大值的ICON
void setMinIcon(Icon minIcon)    最小值的ICON
void setObjectIcon(Icon objectIcon)   所有值的ICON

AreaRender(AbstractCategoryItemRenderer)类:
没有特殊的设置

StackedAreaRender(AreaRender)类:
没有特殊的设置

posted @ 2010-07-20 20:35 donghang73 阅读(2733) | 评论 (0)编辑 收藏
         JFreeChart并不存在多个不同的类来生成不同的图形。所有的图形都是具体类JFreeChart的实例化对象,初始化JFreeChart对象的时候通过指定不同的Plot实现类就可以显示出不同的图形。不同的Plot实现类具有不同的Renderer对象、Axis对象、Dataset对象。

       JFreeChart提供工厂类ChartFactory方便使用者生成各种不同的图形。ChartFactory类的各个工厂方法中实现对具体Plot的指定以及对类JFreeChart构造函数的调用。

    下面以常用图形说一下常用的使用流程(大部分的操作讲的并不全面,比如JFreeChart可能提供了很多增加、修改数据的方式,下文中可能只列举一种)。

1柱状图

1)平面柱状图

    生成柱状图操作:

JFreeChartchart=ChartFactory.createBarChart(String title,//图标题

String categoryAxisLabel,//x轴标题

String valueAxisLabel,//y轴标题

CategoryDataset dataset,//数据源

PlotOrientation orientation,//显示方向

Boolean legend,//是否显示图例

Boolean tooltips,//是否显示tooltip

Boolean urls)//是否指定url

平面柱状图的Plot对象是CategoryPlot类型。CategoryPlot对象的x轴是CategoryAxis对象,y轴是NumberAxis对象,绘制单元是BarRenderer对象,数据源是CategoryDataset对象。

获取CategoryPlot对象操作为:

CategoryPlot plot = (CategoryPlot)chart.getPlot();或者

CategoryPlot plot = chart.getCategoryPlot();

获取绘制单元操作:

       BarRenderer renderer = (BarRenderer)plot.getRenderer();

获取x轴的操作:

CategoryAxis xAxis = (CategoryAxis)plot.getDomainAxis();

获取y轴操作:

NumberAxis yAxis = (NumberAxis)plot.getRangeAxis();

获取数据源:

CategoryDataset dataset = plot.getDataset();

    柱状图可以接受一切CategoryDataset类型的数据源,下面讲解一下常用的CategoryDataset类型DefaultCategoryDataset的使用方式

实例化:

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

增加数据

dataset.addValue(doublevalue,ComparablerowKey,ComparablecolumnKey);

删除数据:

       dataset.removeValue(ComparablerowKey,ComparablecolumnKey);

    或者

       dataset.removeColumn(intcolumnIndex);

    或者

       dataset.removeColumn(ComparablecolumnKey);

    对行同样有上述两种删除方式,不在列举。

修改数据:

       dataset.setValue(doublevalue,ComparablerowKey,ComparablecolumnKey);

查询数据:

plot对象、绘制单元、x轴、y轴的显示特性修改不再一一介绍。

23D柱状图

    对应的工厂方法为createBarChart3D,该方法的参数与平面柱状图相同。3D柱状图的Plot对象是CategoryPlot类型。CategoryPlot对象的x轴是CategoryAxis3D对象,y轴是NumberAxis3D对象,绘制单元是BarRenderer3D对象,数据源是CategoryDataset对象。

    具体使用以及操作与平面柱状图雷同,不在详述。

2饼状图

(1)平面饼状图

生成平面饼状图:

JFreeChartchart=ChartFactory.createPieChart(String title,//图标题

PieDataset dataset,//数据源

Boolean legend,//是否显示图例

Boolean tooltips,//是否显示tooltip

Boolean urls)//是否指定url

平面饼状图的Plot对象是PiePlot类型。PiePlot对象没有x轴对象、y轴对象、绘制单元对象,数据源是PieDataset对象。

获取PiePlot对象操作为:

PiePlot plot = (PiePlot)chart.getPlot();

获取数据源:

PieDataset dataset = plot.getDataset();

饼状图可以接受一切PieDataset类型的数据源,下面讲解一下常用的PieDataset类型DefaultPieDataset的使用方式

实例化:

    DefaultPieDatasetdataset=newDefaultPieDataset();

增加修改操作:

    dataset.setValue(Comparablekey,doublevalue);

删除操作:

    dataset.remove(Comparablekey);

查询操作:

    dataset.getKey(intitem);

或者

dataset.getValue(intitem);

(1)3D饼状图

    对应的工厂方法为createPieChart3D,参数与平面饼状图相同。与平面饼状图的差别在于Plot对象是PiePlot3D类型,不再详述。

3多重饼状图

1)多重平面饼状图

生成多重平面饼状图:

JFreeChartchart=ChartFactory.createMultiplePieChart (String title,//图标题

CategoryDataset dataset,//数据源

TableOrder order,//指定提取数据的方式(按行或者按列)

Boolean legend,//是否显示图例

boolean tooltips,//是否显示tooltip

boolean urls)   //是否指定url

多重平面饼状图的Plot对象是MultiplePiePlot类型。MultiplePiePlot对象没有x轴对象、y轴对象、绘制单元对象,数据源是CategoryDataset对象。MultiplePiePlot对象中可以含有多个子JFreeChart对象,子JFreeChart对象是上面讲过的饼状图对象。

获取MultiplePiePlot对象操作为:

MultiplePiePlot plotMain = (MultiplePiePlot)chart.getPlot();

获取子JFreeChart的操作为:

       JfreeChart childChart = plotMain.getPieChart();

获取数据源:

CategoryDataset dataset = plotMain.getDataset();

2)多重3D饼状图

    对应的工厂方法为createMultiplePieChart3D,该方法的参数与多重平面饼状图相同。多重3D饼状图的Plot对象是MultiplePiePlot类型。MultiplePiePlot对象中可以含有多个子JFreeChart对象,子JFreeChart对象是上面讲过的3D饼状图对象。

4线图

1)平面线图

    生成平面线图:

JFreeChartchart=ChartFactory.createLineChart(String title,//图标题

String categoryAxisLabel,//x轴标题

String valueAxisLabel,//y轴标题

CategoryDataset dataset,//数据源

PlotOrientation orientation,//显示方向

Boolean legend,//是否显示图例

Boolean tooltips,//是否显示tooltip

Boolean urls);//是否指定url

平面线图除了的Plot对象中绘制单元对象是LineAndShapeRenderer对象,其他一切组成对象与平面柱状图相同。

获取Renderer操作:

LineAndShapeRenderer renderer = (LineAndShapeRenderer)plot.getRenderer();

其他参考平面柱状图。

23D线图

对应工厂方法为createLineChart3D,参数与createLineChart相同。3D线图的组成对象除了绘制单元对象是LineAndShapeRenderer3D对象,其他一切组成对象与3D柱状图相同。

5时序图

生成时序图:

JfreeChartchart = ChartFactory.createTimeSeriesChart(String title,//图标题

String timeAxisLabel,//x轴标题

String valueAxisLabel,//y轴标题

XYDataset dataset,//数据源

Boolean legend,//是否显示图例

Boolean tooltips,//是否显示tooltip

Boolean urls);//是否指定url

时序图的Plot对象是XYPlot类型。XYPlot对象的x轴是DateAxis对象,y轴是NumberAxis对象,绘制单元是XYLineAndShapeRenderer对象,数据源是XYDataset对象。

Plot对象的获取操作:

       XYPlot plot = (XYPlot)chart.getPlot();

X轴对象的获取操作:

       DateAxis xAxis = (DateAxis)plot.getDomainAxis();

Y轴对象的获取操作:

       NumberAxis yAxis = (NumberAxis)plot.getRangeAxis();

Renderer对象的获取操作:

       XYItemRenderer renderer = plot.getRenderer();

时序图可以接受一切XYDataset类型的数据源,下面讲解一下常用的XYDataset类型TimeSeriesCollection的使用方式。

实例化:

       TimeSeriesCollection dataset = newTimeSeriesCollection();

添加数据操作:

       dataset.addSeries(TimeSeries);//后面讲解TimeSeries对象

删除数据操作:

       dataset.removeSeries(intindex);

查询数据操作:

       dataset.getSeries(intseries);

TimeSeries对象操作

实例化:

       TimeSeries ts = TimeSeries(Stringname,ClasstimePeriodClass);

增加数据操作:

       ts.add(RegularTimePeriod period,double value);

删除数据操作:

       ts.delete(RegularTimePeriod period);

修改数据操作:

       ts.update(RegularTimePeriod period,Number value);

查询数据操作:

    ts.getValue(RegularTimePeriodperiod);

RegularTimePeriodJFreeChart提供的时间模板类,它有很多具体的时间类,比如:MinuteSecondHourDay……等,不再详述。

posted @ 2010-07-20 20:33 donghang73 阅读(1217) | 评论 (0)编辑 收藏

 

1简介

JFreeChartSourceForge.net上的一个开源项目,它的源码和API都可以免费获得。JFreeChart的功能非常强大,可以实现饼图(二维和三维),柱状图(水平,垂直),线图,点图,时序图,甘特图,股票行情图,混和图,温度计图,刻度图等常用商用图表,图形可以导出成PNGJPEG格式,同时还可以与PDFEXCEL关联,支持对图形的放大、缩小,支持常见图形的3D显示。

2图形对象的处理

2.1 JFreeChart对象

JFreeChart可以生成很多图形对象,它的工厂类提供了33个工厂方法用于生成不同的图形对象(具体的工厂方法可以参见JFreeChartAPI手册或者源码中的ChartFactory)。JFreechart对图形对象的抽象具体化。图形对象(JFreeChart),由Title(主标题)SubTitle(子标题)Plot(图形的绘制结构)等几个主要对象组成。各个组成部分如下图所示:
   
    
这是一个JFreeChart对象,上面的“chart标题”是Title对象,中间区域是Plot对象(包括绘图区域和坐标轴区域),下面的区域是LegendTitle对象,LegendTitle是一种SubTitle对象。

每个JFreeChart对象只能有1Title对象,1Plot对象,可以有多个SubTitle对象。JFreeChart对象可以进行的操作有:背景的设置(背景颜色、背景图片、透明度等)、边框的设置(是否可见、笔画、Paint等)、渲染方式的设置、标题对象的设置、子标题对象的增删查操作。(本文中的所有操作都不提供代码级的介绍,可参见API手册或者源码)

2.2 主标题对象

主标题对象是TextTitle类型,可以进行的操作有:背景设置、字体设置(字体类型、颜色、内容、对齐方式等操作)、tooltip设置、URL设置。

2.3 Plot对象

Plot对象是图形的绘制结构对象。JFreeChart中含有很多不同的Plot对象,每一种图形对象中的Plot对象都在实例化的时候创建。所有的Plot共有的操作有:背景设置(背景颜色、背景图片、透明度等)、前景透明度设置、无数据存在情况的设置(显示的字符内容、显示的字体、显示的Paint)、放大缩小比例的设置,大部分Plot对象还有设置Datset、设置Renderer对象操作。

JFreeChart中有18Plot抽象类的具体实现类。Plot的具体实现类主要由以下重要对象组成:Renderer对象(图形的绘制单元——绘图域),Datset(图形的数据源),DomainAxis(区域轴,相当于x轴),RangeAxis(范围轴,相当于y轴)。

不同的Plot对象组成方式不尽相同,有的不含有Renderer对象,比如CompassPlotContourPlotMultiplePiePlotPiePlot等,有的不含有DomainAxisRangeAxis对象,另外除了FastScatterPlot类都含有Datset对象,FastScatterPlot使用float的二维数组充当数据源。尤其说明一点,饼状图相关的Plot对象(MultiplePiePlotPiePlotPiePlot3DRingPlot)中都不含有Renderer对象、DomainAxis对象、RangeAxis对象。

一般来说,Datset对象存储数据模型,Renderer对象存储显示模型,Plot对象根据Datset对象、Renderer对象完成画图操作。


    仍以上面的图形讲解
Plot对象的组成。
上图的中间区域是是一个XYPlot对象。其中的折线部分即是图形的绘制单元Renderer对象。X轴是DomainAxisy轴是RangeAxis,其中Datset对象属于数据模型范畴,是UI不可见对象。该图中的plot背景色、网格线的各种设置可以通过XYPlot对象本身完成。

    下面讲解Renderer对象、Axis对象(X轴、y轴都属于Axis对象),Datset对象在后续章节中专门讲解。

2.3.1 Renderer对象

Renderer对象是图形的绘制单元。JFreeChart提供了两个接口CategoryItemRendererXYItemRenderer、以及1个抽象类AbstractRenderer供具体的Renderer类实现,给出了将近50种具体实现类。

一般来说Renderer对象可进行的操作有:对itemlabel(下图中的柱状图上的红色数字即为itemlabel的示例)的默认设置(itemlabel的产生方式、是否可见、字体、Paint、正反向itemlabel的位置设置等)、绘制图形的边框默认设置(Paint、笔画、是否可见等)、绘制图形的默认设置(形状、笔画、是否可见、对应的图例中是否可见等,折线图还有线条是否可见、折点图形是否可见、折点图形是否填充、折点图形的形状、对应的图例中线条是否可见、图形是否可见、整体是否可见等)、以及对指定itemlabel的设置、指定绘制图形的设置。可以说和具体绘制的图形相关的属性都可以通过Renderer对象设置。

不同的Renderer的实现类实现了不同的显示方式,在含有Renderer对象的JFreeChart对象中,Renderer对象决定了JFreeChart对象的显示方式。例如:柱状图的Plot对象中默认的Renderer对象是CategoryItemRenderer对象,通过设置Plot对象的Renderer对象LineAndShapeRenderer,则柱状图变为线图。使用中一般不需要显式的实例化一个Renderer对象,一般通过JFreeChart对象的Plot对象调用现有的Renderer对象进行重新设置等操作。

2.3.2 Axis对象

JFreeChart提供了两种类型的坐标轴:CategoryAxis(等级轴)和ValueAxis(值轴),ValueAxis又有3个子类:DateAxis(时间轴)、NumberAxis(数字轴)、PeriodAxis(时期轴)。这些坐标轴还有更详细的子类,不再一一列举

Axis对象可进行的操作有:标题的设置(内容、字体、Paint、显示角度等)、坐标线的设置(笔画、Paint、是否可见等)、刻度线的设置(是否可见、笔画、Paint、位于绘图区域的长度、位于绘图区域外的长度等)、刻度标示的设置(笔画、Paint、字体、与轴的距离等)、坐标轴范围设置等。

CategoryAxis对象还可以进行的操作有:刻度标示间距设置(最小间距、最大间距、指定间距)等。

ValueAxis对象可进行的操作有:轴端设置(显示的图形形状)、范围设置(是否自动产生范围、自动产生的最小范围、最大范围、指定确定范围、指定范围大小等)、间隔设置(是否自动产生间隔、指定间隔)等。

DateAxis对象还有对时间刻度显示格式的设置操作。

2.4 子标题对象

    子标题对象是Title类型的对象,一个JFreeChart可以有多个子标题对象。JFreeChart提供了5种Title的实现,可以是图片、文本、图例等的形式。

2.5数据源处理

JFreeChart中的数据源是DataSet接口类型。该接口有三个主要的子类接口:CategoryDataset、PieDataset、SeriesDataset

CategoryDataset接口的实现类基本上都维护了一个三元组<value,row,col>的列表结构。不同的实现类中value的类型不相同。<row,col>唯一确定一个三元组。CategoryDataset的实现类提供对这个三元组的增删改查操作。

PieDataset接口有两个主要的实现类:CategoryToPieDataset、DefaultPieDataset。

SeriesDataset接口的实现类基本上都维护了一种特定数据结构的列表。以TimeSeriesCollection为例。它维护一个TimeSeries对象列表,提供对该列表的增删查操作。每个TimeSeries对象维护一个<time,value>列表,提供对该列表的增删改查操作。

posted @ 2010-07-20 20:29 donghang73 阅读(1506) | 评论 (0)编辑 收藏