﻿<?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-独自等待</title><link>http://www.blogjava.net/mydearvivian/</link><description>那曾经从自己身边溜走的人……</description><language>zh-cn</language><lastBuildDate>Fri, 19 Jun 2026 10:17:33 GMT</lastBuildDate><pubDate>Fri, 19 Jun 2026 10:17:33 GMT</pubDate><ttl>60</ttl><item><title>[转帖] java操作xml方式的四种比较与详解(DOM、SAX、JDOM、DOM4J)</title><link>http://www.blogjava.net/mydearvivian/articles/261740.html</link><dc:creator>自由</dc:creator><author>自由</author><pubDate>Tue, 24 Mar 2009 09:26:00 GMT</pubDate><guid>http://www.blogjava.net/mydearvivian/articles/261740.html</guid><wfw:comment>http://www.blogjava.net/mydearvivian/comments/261740.html</wfw:comment><comments>http://www.blogjava.net/mydearvivian/articles/261740.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mydearvivian/comments/commentRss/261740.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mydearvivian/services/trackbacks/261740.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1）DOM（JAXP Crimson解析器） DOM是用与平台和语言无关的方式表示XML文档的官方 W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构，然后才能做任何工作。由于它是基于信息层次的，因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先，由于树在内存中是持...&nbsp;&nbsp;<a href='http://www.blogjava.net/mydearvivian/articles/261740.html'>阅读全文</a><img src ="http://www.blogjava.net/mydearvivian/aggbug/261740.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mydearvivian/" target="_blank">自由</a> 2009-03-24 17:26 <a href="http://www.blogjava.net/mydearvivian/articles/261740.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BIRT API 动态改变XML数据源</title><link>http://www.blogjava.net/mydearvivian/articles/250985.html</link><dc:creator>自由</dc:creator><author>自由</author><pubDate>Mon, 12 Jan 2009 08:18:00 GMT</pubDate><guid>http://www.blogjava.net/mydearvivian/articles/250985.html</guid><wfw:comment>http://www.blogjava.net/mydearvivian/comments/250985.html</wfw:comment><comments>http://www.blogjava.net/mydearvivian/articles/250985.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mydearvivian/comments/commentRss/250985.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mydearvivian/services/trackbacks/250985.html</trackback:ping><description><![CDATA[<p>前一段时间因项目原因，需要用BIRT做报表，报表数据源采用XML文件(后因XML中数据关系较复杂，BIRT处理XML数据效率极差，改用Apache Derby)，因在运行态下，报表需要动态变更数据源，在网上也找了不少的帖子，都没有十分准确的解决方案，后来还是决定自己找方案，后来解决的方法也相当简单，贴出代码一看就明白了：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">IReportEngine&nbsp;engine&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />EngineConfig&nbsp;config&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_61_695_Open_Image" onclick="this.style.display='none'; Codehighlighter1_61_695_Open_Text.style.display='none'; Codehighlighter1_61_695_Closed_Image.style.display='inline'; Codehighlighter1_61_695_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_61_695_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_61_695_Closed_Text.style.display='none'; Codehighlighter1_61_695_Open_Image.style.display='inline'; Codehighlighter1_61_695_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_61_695_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_61_695_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;config&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;EngineConfig();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;Platform.startup(config);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;IReportEngineFactory&nbsp;factory&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(IReportEngineFactory)&nbsp;Platform<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;engine&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;factory.createReportEngine(config);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;IReportRunnable&nbsp;design&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">打开报表</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;design&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;engine.openReportDesign(</span><span style="color: #000000">"</span><span style="color: #000000">c:\\report.rptdesign</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;ReportDesignHandle&nbsp;designHandel&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(ReportDesignHandle)&nbsp;design.getDesignHandle();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;DataSourceHandle&nbsp;ds&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;designHandel.findDataSource(</span><span style="color: #000000">"</span><span style="color: #000000">DATA&nbsp;SOURCE</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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 src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(ds</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;ds.setProperty(</span><span style="color: #000000">"</span><span style="color: #000000">FILELIST</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">c:\\datasource.xml</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">绑定xml数据源</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
}catch (Exception ex) {<br />
&nbsp;&nbsp;&nbsp;ex.printStackTrace();<br />
&nbsp;&nbsp;}finally {<br />
&nbsp;&nbsp;&nbsp;//Platform.shutdown();<br />
&nbsp;&nbsp;}..<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span></div>
</span>
 <img src ="http://www.blogjava.net/mydearvivian/aggbug/250985.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mydearvivian/" target="_blank">自由</a> 2009-01-12 16:18 <a href="http://www.blogjava.net/mydearvivian/articles/250985.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse RCP中超长任务单线程，异步线程处理</title><link>http://www.blogjava.net/mydearvivian/articles/246028.html</link><dc:creator>自由</dc:creator><author>自由</author><pubDate>Fri, 12 Dec 2008 11:57:00 GMT</pubDate><guid>http://www.blogjava.net/mydearvivian/articles/246028.html</guid><wfw:comment>http://www.blogjava.net/mydearvivian/comments/246028.html</wfw:comment><comments>http://www.blogjava.net/mydearvivian/articles/246028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mydearvivian/comments/commentRss/246028.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mydearvivian/services/trackbacks/246028.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp;&nbsp;在RCP程序中，常碰到某个线程执行时间比较很长的情况，若处理不好，用户体验度是很糟糕的，如用户点了一个功能按钮后，进入功能执行，发现程序长时间没有任何响应，无疑这种情况下，用户是无法忍受的。<br />
&nbsp;&nbsp;&nbsp;&nbsp;在这种情况下我们可以通过提供进度条对话框来改善用户体验度：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1）单步执行<br />
&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;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ProgressMonitorDialog&nbsp;progress&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;ProgressMonitorDialog(</span><span style="color: #0000ff">null</span><span style="color: #000000">);&nbsp;<br />
<img id="Codehighlighter1_79_534_Open_Image" onclick="this.style.display='none'; Codehighlighter1_79_534_Open_Text.style.display='none'; Codehighlighter1_79_534_Closed_Image.style.display='inline'; Codehighlighter1_79_534_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_79_534_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_79_534_Closed_Text.style.display='none'; Codehighlighter1_79_534_Open_Image.style.display='inline'; Codehighlighter1_79_534_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">try</span><span style="color: #000000">&nbsp;</span><span id="Codehighlighter1_79_534_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_79_534_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_140_526_Open_Image" onclick="this.style.display='none'; Codehighlighter1_140_526_Open_Text.style.display='none'; Codehighlighter1_140_526_Closed_Image.style.display='inline'; Codehighlighter1_140_526_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_140_526_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_140_526_Closed_Text.style.display='none'; Codehighlighter1_140_526_Open_Image.style.display='inline'; Codehighlighter1_140_526_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;progress.run(</span><span style="color: #0000ff">true</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">,&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;IRunnableWithProgress()&nbsp;</span><span id="Codehighlighter1_140_526_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_140_526_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_245_518_Open_Image" onclick="this.style.display='none'; Codehighlighter1_245_518_Open_Text.style.display='none'; Codehighlighter1_245_518_Closed_Image.style.display='inline'; Codehighlighter1_245_518_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_245_518_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_245_518_Closed_Text.style.display='none'; Codehighlighter1_245_518_Open_Image.style.display='inline'; Codehighlighter1_245_518_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run(IProgressMonitor&nbsp;monitor)&nbsp;</span><span style="color: #0000ff">throws</span><span style="color: #000000">&nbsp;InvocationTargetException,&nbsp;&nbsp;&nbsp;&nbsp;InterruptedException&nbsp;</span><span id="Codehighlighter1_245_518_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_245_518_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.beginTask(</span><span style="color: #000000">"</span><span style="color: #000000">复制文件</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;IProgressMonitor.UNKNOWN);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.setTaskName(</span><span style="color: #000000">"</span><span style="color: #000000">复制文件<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.getInstance().info(</span><span style="color: #000000">"</span><span style="color: #000000">正在复制文件，请稍候<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;copyFile(fileName,&nbsp;destFolder);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.done();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.getInstance().info(</span><span style="color: #000000">"</span><span style="color: #000000">复制成功</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
<img id="Codehighlighter1_572_604_Open_Image" onclick="this.style.display='none'; Codehighlighter1_572_604_Open_Text.style.display='none'; Codehighlighter1_572_604_Closed_Image.style.display='inline'; Codehighlighter1_572_604_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_572_604_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_572_604_Closed_Text.style.display='none'; Codehighlighter1_572_604_Open_Image.style.display='inline'; Codehighlighter1_572_604_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;(InvocationTargetException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_572_604_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_572_604_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img id="Codehighlighter1_637_669_Open_Image" onclick="this.style.display='none'; Codehighlighter1_637_669_Open_Text.style.display='none'; Codehighlighter1_637_669_Closed_Image.style.display='inline'; Codehighlighter1_637_669_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_637_669_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_637_669_Closed_Text.style.display='none'; Codehighlighter1_637_669_Open_Image.style.display='inline'; Codehighlighter1_637_669_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&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;(InterruptedException&nbsp;e)&nbsp;</span><span id="Codehighlighter1_637_669_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_637_669_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p>&nbsp;&nbsp;&nbsp;&nbsp;若允许用户终止任务执行 则progress.run()第二个参数传true即可； monitor.isCanceled()方法判断当前是否被用户取消<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;2）异步执行<br />
&nbsp;&nbsp;&nbsp;&nbsp;在RCP中要在非UI线程中执行UI线程的操作，最简单的方式就是display.syncExec或者display.asyncExec，如果UI线程所需的时间较长的话，则应该使用display.asyncExec<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在执行异步线程的时候，我们一般应当继承Job或者UIJob类：UIJob是在UI线程中运行的，可以直接访问窗体组件。Job是在非UI线程中运行，如果在里面想访问窗体组件，需要通过Display.asynExec()或者synExec方式来执行。UIJob要尽量的短，不要过多的占用UI线程的时间。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;也贴上例子吧：<br />
</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_28_645_Open_Image" onclick="this.style.display='none'; Codehighlighter1_28_645_Open_Text.style.display='none'; Codehighlighter1_28_645_Closed_Image.style.display='inline'; Codehighlighter1_28_645_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_28_645_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_28_645_Closed_Text.style.display='none'; Codehighlighter1_28_645_Open_Image.style.display='inline'; Codehighlighter1_28_645_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000">Job&nbsp;job&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Job(</span><span style="color: #000000">"</span><span style="color: #000000">执行异步线程</span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_28_645_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_28_645_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_85_643_Open_Image" onclick="this.style.display='none'; Codehighlighter1_85_643_Open_Text.style.display='none'; Codehighlighter1_85_643_Closed_Image.style.display='inline'; Codehighlighter1_85_643_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_85_643_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_85_643_Closed_Text.style.display='none'; Codehighlighter1_85_643_Open_Image.style.display='inline'; Codehighlighter1_85_643_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;IStatus&nbsp;run(</span><span style="color: #0000ff">final</span><span style="color: #000000">&nbsp;IProgressMonitor&nbsp;monitor)&nbsp;</span><span id="Codehighlighter1_85_643_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_85_643_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.beginTask(</span><span style="color: #000000">"</span><span style="color: #000000">开始任务</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;IProgressMonitor.UNKNOWN);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.setTaskName(</span><span style="color: #000000">"</span><span style="color: #000000">Step&nbsp;1<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.getInstance().info(</span><span style="color: #000000">"</span><span style="color: #000000">开始第一步<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dothing1();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.setTaskName(</span><span style="color: #000000">"</span><span style="color: #000000">Step&nbsp;2<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.getInstance().info(</span><span style="color: #000000">"</span><span style="color: #000000">开始第二步<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dothing2();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.setTaskName(</span><span style="color: #000000">"</span><span style="color: #000000">Step&nbsp;3<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.getInstance().info(</span><span style="color: #000000">"</span><span style="color: #000000">开始第三步<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dothing3();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Console.getInstance().info(</span><span style="color: #000000">"</span><span style="color: #000000">完毕</span><span style="color: #000000">"</span><span style="color: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitor.done();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_541_611_Open_Image" onclick="this.style.display='none'; Codehighlighter1_541_611_Open_Text.style.display='none'; Codehighlighter1_541_611_Closed_Image.style.display='inline'; Codehighlighter1_541_611_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_541_611_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_541_611_Closed_Text.style.display='none'; Codehighlighter1_541_611_Open_Image.style.display='inline'; Codehighlighter1_541_611_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Display.getDefault().asyncExec(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Runnable()&nbsp;</span><span id="Codehighlighter1_541_611_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_541_611_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_570_607_Open_Image" onclick="this.style.display='none'; Codehighlighter1_570_607_Open_Text.style.display='none'; Codehighlighter1_570_607_Closed_Image.style.display='inline'; Codehighlighter1_570_607_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_570_607_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_570_607_Closed_Text.style.display='none'; Codehighlighter1_570_607_Open_Image.style.display='inline'; Codehighlighter1_570_607_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;run()&nbsp;</span><span id="Codehighlighter1_570_607_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_570_607_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">UI任务</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;Status.OK_STATUS;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />job.setUser(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />job.schedule();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<img src ="http://www.blogjava.net/mydearvivian/aggbug/246028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mydearvivian/" target="_blank">自由</a> 2008-12-12 19:57 <a href="http://www.blogjava.net/mydearvivian/articles/246028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从插件/Rcp中获取文件路径的方法</title><link>http://www.blogjava.net/mydearvivian/articles/241744.html</link><dc:creator>自由</dc:creator><author>自由</author><pubDate>Thu, 20 Nov 2008 11:39:00 GMT</pubDate><guid>http://www.blogjava.net/mydearvivian/articles/241744.html</guid><wfw:comment>http://www.blogjava.net/mydearvivian/comments/241744.html</wfw:comment><comments>http://www.blogjava.net/mydearvivian/articles/241744.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mydearvivian/comments/commentRss/241744.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mydearvivian/services/trackbacks/241744.html</trackback:ping><description><![CDATA[从插件中获得绝对路径：&nbsp;&nbsp;&nbsp;&nbsp;<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">AaaaPlugin.getDefault().getStateLocation().makeAbsolute().toFile().getAbsolutePath());&nbsp;&nbsp;</span></div>
通过文件得到Project： <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">IProject&nbsp;project&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;((IFile)o).getProject();&nbsp;&nbsp;</span></div>
通过文件得到全路径：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">String&nbsp;path&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;((IFile)o).getLocation().makeAbsolute().toFile().getAbsolutePath();&nbsp;&nbsp;&nbsp;</span></div>
得到整个Workspace的根：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">IWorkspaceRoot&nbsp;root&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ResourcesPlugin.getWorkspace().getRoot();&nbsp;&nbsp;&nbsp;</span></div>
从根来查找资源：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">IResource&nbsp;resource&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;root.findMember(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Path(containerName));&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
从Bundle来查找资源：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Bundle&nbsp;bundle&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;Platform.getBundle(pluginId);&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />URL&nbsp;fullPathString&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;BundleUtility.find(bundle,&nbsp;filePath);&nbsp;&nbsp;</span></div>
从编辑器来获得编辑文件<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">IEditorPart&nbsp;editor&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;((DefaultEditDomain)(parent.getViewer().getEditDomain())).getEditorPart();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />IEditorInput&nbsp;input&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;editor.getEditorInput();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_187_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_187_249_Open_Text.style.display='none'; Codehighlighter1_187_249_Closed_Image.style.display='inline'; Codehighlighter1_187_249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_187_249_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_187_249_Closed_Text.style.display='none'; Codehighlighter1_187_249_Open_Image.style.display='inline'; Codehighlighter1_187_249_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">(input&nbsp;</span><span style="color: #0000ff">instanceof</span><span style="color: #000000">&nbsp;IFileEditorInput)</span><span id="Codehighlighter1_187_249_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_187_249_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;IFile&nbsp;file&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;((IFileEditorInput)input).getFile();&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span></div>
得到runtimeworkspace：<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Platform.getInstanceLocation().getURL().getPath();&nbsp;&nbsp;&nbsp;</span></div>
<span class="tpc_content">得到Appliaction workspace：<br />
</span>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Platform.asLocalURL(PRODUCT_BUNDLE.getEntry(</span><span style="color: #000000">""</span><span style="color: #000000">)).getPath()).getAbsolutePath();&nbsp;&nbsp;&nbsp;</span></div>
<br />
<br />
<img src ="http://www.blogjava.net/mydearvivian/aggbug/241744.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mydearvivian/" target="_blank">自由</a> 2008-11-20 19:39 <a href="http://www.blogjava.net/mydearvivian/articles/241744.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>【转帖】BIRT Viewer 2.2 参数设置详解</title><link>http://www.blogjava.net/mydearvivian/articles/240120.html</link><dc:creator>自由</dc:creator><author>自由</author><pubDate>Wed, 12 Nov 2008 08:42:00 GMT</pubDate><guid>http://www.blogjava.net/mydearvivian/articles/240120.html</guid><wfw:comment>http://www.blogjava.net/mydearvivian/comments/240120.html</wfw:comment><comments>http://www.blogjava.net/mydearvivian/articles/240120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mydearvivian/comments/commentRss/240120.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mydearvivian/services/trackbacks/240120.html</trackback:ping><description><![CDATA[<div class="cnt" id="blog_text">
<p><font face="Arial">【转帖】<a href="http://www.javaeye.com/topic/117186" target="_blank">http://www.javaeye.com/topic/117186</a></font></p>
<p><font face="Arial">BIRT作为一款功能强大的开源报表工具，其版本的升级更新速度也非常快，从1.0到2.0，一直到最新的 2.2.1版本，无论从功能上还是性能上都得到了极大的提高和扩充。BIRT也提供了一个标准的J2EE实现组件，可以发布到支持J2EE应用的web server服务器上，可以对生成的报表进行预览等操作。在大家使用BIRT Viewer的时候，可能会对它日益纷繁的参数设置如云里雾里，在网上论坛里也有很多人碰到这样哪样的问题，同时官方的文档也不细致不全。所以我就对这些参数进行了一个简单系统的总结，希望能对大家的BIRT开发有所帮助。这些参数以2.2.1版本为准，请大家特别注意。</font></p>
<p><font face="Arial"><strong>1. Servlet模式说明</strong></font></p>
<p><font face="Arial">查看BIRT Viewer自带的web.xml文件，可以看到有以下几个pattern：</font></p>
<p><font face="Arial"><strong>frameset</strong> ---- 采用Ajax框架，可以显示工具条，导航条和TOC面板，实现复杂的操作，如分页处理，导出数据，导出报表，打印等等。该模式下会自动生成report document文件(预览report design文件)到特定的目录(用户可以用参数指定，也可以定义在web.xml里)。采用Ajax，速度较慢。</font></p>
<p><font face="Arial"><strong>run</strong> ---- 也采用Ajax框架，但不实现frameset的复杂功能，不会生成临时的report document文件(预览report design文件)，也不支持分页，这个主要是应用在BIRT Designer里的preview tab里，可以支持cancel操作，其它不怎么常用。采用Ajax，速度较慢。</font></p>
<p><font face="Arial"><strong>preview</strong> --- 没有用到Ajax框架，直接调用底层Engine API对报表进行render，把生成的报表内容直接输出到浏览器。这种模式和run模式调用的是相同的Engine API，唯一区别在于run采用Ajax获取报表内容，而preview直接输出到浏览器。如果要支持分页，用户需要在URL上定义__page和 __pagerange参数，这两个参数也会在后面详细说明。需要特别说明的是，在这几种预览模式中，preview的速度是最快的。</font></p>
<p><font face="Arial"><strong>document</strong> --- 该模式主要是为了从report design文件生成report document文件。用户可以在URL上提定document文件生成存放的路径(存放在server端)，如果未指定，会直接生成 rptdocument发送到客户端浏览器，用户可以下载到客户端。</font></p>
<p><font face="Arial"><strong>output</strong> --- 该模式类似于frameset，会自动生成report document文件(预览report design文件)，区别在于output不采用Ajax，而是将生成的报表内容直接输出到浏览器。</font></p>
<p><font face="Arial"><strong>parameter</strong> --- 该模式主要用于生成一个参数对话框，一般用户不常用，用户可以直接通过提供的JSP Tag--parameterPage去实现参数对话框，不需要直接调用。</font></p>
<p><font face="Arial"><strong>download</strong> --- 用于导出报表数据为CSV格式，当你使用frameset工具条里的导出数据功能时，会用到这个模式。</font></p>
<p><font face="Arial"><strong>2. web.xml里的参数设置</strong><br />
web.xml文件里有许多参数，用户应该根据自已的需求出发对这些参数有一个深入的了解。下面我会对这些参数一一做以说明。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_LOCALE]</strong><br />
设置默认的Locale信息，暂时没有太大意义。因为Locale的信息，首先以URL上定义的__locale为准，如果没有定义，会找到当前浏览器的Locale信息，最后才会用到这里定义的信息。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_WORKING_FOLDER]</strong><br />
设置BIRT Viewer的工作目录。用户可以把report design或是report document文件存放在这个目录下，这样就可以在URL上采用相对路径去预览这些报表文件了。默认是当前根目录。<br />
当前支持三种形式：<br />
相对路径 --- 这个相对当前的WEB应用的context root.<br />
绝对路径<br />
JAVA系统变量 --- 可以在启动服务器时，定义JVM的系统变量，如java &#8211;Dmyworkingfolder=D:/reports。这样就可以在web.xml中用${myworkingfolder}进行引用了。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_DOCUMENT_FOLDER]</strong><br />
设置生成的document文件的存放路径。默认是documents目录。路径设置同上。</font></p>
<p><font face="Arial"><strong>[WORKING_FOLDER_ACCESS_ONLY]</strong><br />
简单的报表访问限制控制实现，如果设为true,哪就只能预览存放在工作目录下的报表文件。默认值是false。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_IMAGE_DIR]</strong><br />
设置生成的临时图片的存放路径。默认是report/images目录。路径设置同工作目录设置。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_LOG_DIR]</strong><br />
设置生成的日志文件存放路径。默认是logs目录。路径设置同工作目录设置。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_LOG_LEVEL]</strong><br />
设置日志的level，可选的值有：ALL|SEVERE|WARNING|INFO|CONFIG|FINE|FINER|FINEST|OFF。级别由高到低。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_SCRIPTLIB_DIR]</strong><br />
设置用户script lib文件的存放目录( 在报表中用到的Java Event Handler Class )。默认值是scriptlib。路径设置同工作目录设置。</font></p>
<p><font face="Arial"><strong>[BIRT_RESOURCE_PATH]</strong><br />
设置用户资源存放路径，这些资源包括library文件，image文件等。默认是当前根目录。路径设置同工作目录设置。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_MAX_ROWS]</strong><br />
设置获取dataset的最大记录数。主要应用于设计报表的时候，预览报表如果记录数太多，会花费很多的时间，也可能会引起out of memory问题。默认是不限制。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_MAX_CUBE_LEVELS]</strong><br />
设置CUBE查询的最大级数。和前面的参数作用类似。默认是不限制。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_CUBE_MEMORY_SIZE]</strong><br />
设置在生成CUBE时，可以写在memory中的最大值，单位是MB。可以提高效率，写在内存会比直接写在硬盘快很多。但同时也要注意内存占用的问题。</font></p>
<p><font face="Arial"><strong>[BIRT_OVERWRITE_DOCUMENT]</strong><br />
该参数主要用于frameset/output模式，它们会生成临时的document文件上。如果设为true，则每次刷新页面时，都会重新去生成document文件，如果为false，则不会重新生成，只会用原来的document文件去生成报表内容。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_CONFIG_FILE]</strong><br />
定义properties文件的路径，不可以修改。</font></p>
<p><font face="Arial"><strong>[BIRT_VIEWER_PRINT_SERVERSIDE]</strong><br />
在frameset工具条上，提供有后台服务器打印的功能，该参数可以设置是打开还是关闭后台打印的功能。默认是打开。可选值为: ON 和 OFF。</font></p>
<p><font face="Arial"><strong>[HTML_ENABLE_AGENTSTYLE_ENGINE]</strong><br />
这个参数是会传递给Engine的，主要用于一些CSS的兼容性方面的问题。默认值是true。</font></p>
<p><font face="Arial"><strong>3. viewer.properties参数设置</strong><br />
viewer.properties文件主要是定义一些扩展的参数。</font></p>
<p><font face="Arial"># configurable variable for JSP base href. Please uncomment the below line.<br />
#base_url=http://127.0.0.1:8080<br />
该设置主要应用于代理服务器的情况下，在使用代理服务器后，从request里获取的URI并非真正的URI，需要在这里定义。</font></p>
<p><font face="Arial"># [EXTENSION SETTING]<br />
viewer.extension.html=html<br />
viewer.extension.pdf=pdf<br />
viewer.extension.postscript=ps<br />
viewer.extension.doc=doc<br />
viewer.extension.xls=xls<br />
viewer.extension.ppt=ppt<br />
定义输出的报表文件的后缀名，和format相关联。</font></p>
<p><font face="Arial"># [OUTPUT FORMAT LABEL NAME]<br />
viewer.label.html=HTML<br />
viewer.label.pdf=PDF<br />
viewer.label.postscript=PostScript<br />
viewer.label.doc=Word<br />
viewer.label.xls=Excel<br />
viewer.label.ppt=PowerPoint<br />
定义导出报表对话框里的报表格式列表，和format相关联，这样名字会更有意义。</font></p>
<p><font face="Arial"># [CSV SEPARATOR]<br />
viewer.sep.0=,<br />
viewer.sep.1=;<br />
viewer.sep.2=:<br />
viewer.sep.3=|<br />
viewer.sep.4=\t<br />
支持多种CSV分隔符，用户也可以增加新的分隔符(只支持char，而不是string)。但同时需要修改JSP文件和Messages.properties文件。</font></p>
<p><font face="Arial"># [LOGGERS]<br />
# "logger."+class=level<br />
# if no level is specified or the text "DEFAULT",<br />
# then the default level from the web.xml will be used<br />
logger.org.eclipse.datatools.connectivity.oda=DEFAULT<br />
logger.org.eclipse.datatools.enablement.oda=DEFAULT<br />
当前的日志都是通过Engine输出的，如果需要其它组件的日志输出，可以在这里定义。注意格式必须为logger.org&#8230;&#8230;。而且该组件必须实现了java的logger。<br />
可以单独为该组件设置日志级别，如果设为DEFAULT，就会使用web.xml里的设置。</font></p>
<p><font face="Arial"><strong>4. URL参数</strong><br />
下面是一些主要用到的URL参数。</font></p>
<p><font face="Arial"><strong>&#8220;__report&#8221;</strong><br />
定义要预览的rptdesign文件路径，支持相对路径和绝对路径，相对路径是相对于web.xml中定义的工作目录。</font></p>
<p><font face="Arial"><strong>&#8220;__document&#8221;</strong><br />
定义要预览的rptdocument文件路径，同样支持相对和绝对路径。相对路径是相对于web.xml中定义的工作目录。在同时定义了__report 和__document参数时，以__document为优先，如未找到相应的document文件，才会从design文件生成document文件 (frameset/output)或是直接去render这个design文件(preview/run)。</font></p>
<p><font face="Arial"><strong>&#8220;__title&#8221;</strong><br />
定义报表显示的标题。</font></p>
<p><font face="Arial"><strong>&#8220;__showtitle&#8221;</strong><br />
是否显示frameset模式下上方的标题部分。true | false</font></p>
<p><font face="Arial"><strong>&#8220;__toolbar&#8221;</strong><br />
是否显示frameset模式下的工具条。true | false</font></p>
<p><font face="Arial"><strong>&#8220;__navigationbar&#8221;</strong><br />
是否显示frameset模式下的导航条。true | false</font></p>
<p><font face="Arial"><strong>&#8220;__parameterpage&#8221;</strong><br />
是否强制弹出或不弹出报表参数对话框。true | false</font></p>
<p><font face="Arial"><strong>&#8220;__format&#8221;</strong><br />
输出报表的格式，默认为html。现在支持：pdf | doc | xls | postscript | ppt</font></p>
<p><font face="Arial"><strong>&#8220;__locale&#8221;</strong><br />
设置Locale信息，如 __locale=zh_CN， 注意必须是国家加语言。</font></p>
<p><font face="Arial"><strong>&#8220;__svg&#8221;</strong><br />
设置chart输出是否以SVG格式输出。true | false<br />
frameset和run模式下，会采用javascript判断客户端浏览器是否支持svg，但并非对所有浏览器有效。</font></p>
<p><font face="Arial"><strong>&#8220;__bookmark&#8221;</strong><br />
设置页面要定位的书签名字。</font></p>
<p><font face="Arial"><strong>&#8220;__istoc&#8221;</strong><br />
指定定位的书签是不是一个TOC名字。如为true,就会根据__bookmark参数值去获取一个真正的书签名，从而实现正常的跳转。这个主要用于定位到一个TOC上。</font></p>
<p><font face="Arial"><strong>&#8220;__rtl&#8221;</strong><br />
指定HTML页面输出是否需要right to left。支持不同国家的阅读习惯，如阿拉伯国家是从右到左的。</font></p>
<p><font face="Arial"><strong>&#8220;__page&#8221;</strong><br />
指定要输出的报表页数，这个依赖于报表的分页设计(page break)。</font></p>
<p><font face="Arial"><strong>&#8220;__pagerange&#8221;</strong><br />
指定要输出的报表页数范围。如1,3,5-9。</font></p>
<p><font face="Arial"><strong>&#8220;__resourceFolder&#8221;</strong><br />
定义资源目录路径。同web.xml中的BIRT_RESOURCE_PATH设置。</font></p>
<p><font face="Arial"><strong>&#8220;__asattachment&#8221;</strong><br />
是否以附件方式下载报表，如生成PDF或是其它格式里。默认是inline。</font></p>
<p><font face="Arial"><strong>&#8220;__masterpage&#8221;</strong><br />
是否要显示master page。true | false</font></p>
<p><font face="Arial"><strong>&#8220;__designer&#8221;</strong><br />
该参数主要是应用在BIRT Designer环境下，如会读取cache的报表参数等等，一般不用。true | false</font></p>
<p><font face="Arial"><strong>&#8220;__overwrite&#8221;</strong><br />
该参数同web.xml定义的参数，不过web.xml里是全局设置，在URL上通过参数可以定义本次操作的设置。</font></p>
<p><font face="Arial"><strong>&#8220;__imageID&#8221;</strong><br />
内部参数，用于image的引用，一般不用。</font></p>
<p><font face="Arial"><strong>&#8220;__maxrows&#8221;</strong><br />
设置Dataset查询的最大记录数，要注意这个设置是全局的，会影响后面所有的请求。主要用于BIRT Designer下，提高报表设计效率。同web.xml中的BIRT_VIEWER_MAX_ROWS设置。</font></p>
<p><font face="Arial"><strong>&#8220;__maxlevels&#8221;</strong><br />
设置查询获取Cube的最大级数。同上面的__maxrows，也主要用于BIRT Designer设计环境。<br />
同web.xml中的BIRT_VIEWER_MAX_CUBE_LEVELS设置。</font></p>
<p><font face="Arial"><strong>&#8220;__cubememsize&#8221;</strong><br />
同web.xml中的BIRT_VIEWER_CUBE_MEMORY_SIZE参数设置。</font></p>
<p><font face="Arial"><strong>&#8220;__instanceid&#8221;</strong><br />
如果查看BIRT输出的HTML代码，你就可以看到一些HTML Element会有一个iid的属性(如table)，这个就是instanceid。这个是Engine动态生成的，不可提前预知。所以你需要从 HTML代码中得到这个值。该参数主要是为了获取reportlet(报表片断，如只输出报表中的一个Table或是一个Chart)。需要配合 __isreportlet参数。</font></p>
<p><font face="Arial"><strong>&#8220;__isreportlet&#8221;</strong><br />
指定当前输出是不是一个reportlet。true | false<br />
特别说明：为了输出一个reportlet，BIRT现在提供两种方式。<br />
1． 为要输出的对象(表格或是Chart)定义一个bookmark，然后可以用下面的URL输出reportlet.<br />
http://localhost:8080/birt/frameset?__report=test.rptdesign&amp;__bookmark=bk&amp;__isreportlet=true</font></p>
<p><font face="Arial">2． 采用instanceid，但这个值事先是无法预知的，需要预览一次后从HTML代码中得到。然后用下面的URL输出reportlet.<br />
http://localhost:8080/birt/output?__report=test.rptdesign&amp;__instanceid=iid&amp;__isreportlet=true<br />
还有就是要注意，reportlet只支持document文档。如果是预览design文档去输出reportlet，就必须要使用frameset/output(自动生成document文档)。</font></p>
<p><font face="Arial"><strong>&#8220;__clean&#8221;</strong><br />
BIRT里临时生成的一些文件都是和session相关的，比如临时document文件，还有image文件。这些文件也可以通过session进行管理，这个参数就是指定是否需要在session timeout的时候清除这些临时文件。默认值是true。<br />
true | false</font></p>
<p><font face="Arial"><strong>&#8220;__dpi&#8221;</strong><br />
可以设置输出Chart的dpi数值。</font></p>
<p><font face="Arial"><strong>&#8220;__fittopage&#8221;</strong><br />
暂时这个参数只对PDF和postscript格式报表有效，指定是否调整至适合页面。</font></p>
<p><font face="Arial"><strong>&#8220;__pagebreakonly&#8221;</strong><br />
暂时这个参数只对PDF和postscript格式报表有效，指定是否只采用BIRT报表内定的分页设置。这个参数一般需要和__fittopage联合使用。</font></p>
<p><font face="Arial"><strong>&#8220;__agentstyle&#8221;</strong><br />
同web.xml中的HTML_ENABLE_AGENTSTYLE_ENGINE参数设置。</font></p>
<p><font face="Arial">========================== 后台Server端打印相关参数 ==========================<br />
<strong>&#8220;__action&#8221;</strong><br />
定义执行的指令名称。当前只支持print指令，用于后台服务器打印。</font></p>
<p><font face="Arial"><strong>&#8220;__printer&#8221;</strong><br />
后台打印机名称。</font></p>
<p><font face="Arial"><strong>&#8220;__printer_copies&#8221;</strong><br />
对应打印机的打印份数参数。</font></p>
<p><font face="Arial"><strong>&#8220;__printer_collate&#8221;</strong><br />
对应打印机的双面打印参数。</font></p>
<p><font face="Arial"><strong>&#8220;__printer_duplex&#8221;</strong><br />
对应打印机的duplex参数。</font></p>
<p><font face="Arial"><strong>&#8220;__printer_mode&#8221;</strong><br />
对应打印机的模式参数。是单色还是彩色。</font></p>
<p><font face="Arial"><strong>&#8220;__printer_pagesize&#8221;</strong><br />
对应打印机的纸型参数。比如A4。<br />
===============================================================================</font></p>
<p><font face="Arial">========================== JSP Tag相关参数 ===================================<br />
<strong>&#8220;__id&#8221;</strong><br />
viewer的ID号，这个参数一般不常用，主要用于JSP Tag中，如在一个页面插入两个BIRT Viewer，而且预览同一个报表文件，这时候因为在一个session下面，所以需要用不同的ID去生成单独的document文件。不至于都生成同一个document文件上，从而引发冲突。</font></p>
<p><font face="Arial"><strong>&#8220;__pattern&#8221;</strong><br />
在JSP Tag中用于指定要提交的Servlet Pattern名字，如frameset/output/run/preview等。主要用于采用parameter模式生成parameter dialog对话框时。</font></p>
<p><font face="Arial"><strong>&#8220;__target&#8221;</strong><br />
可以指定提交到的窗口名称。如_blank,_self等。</font></p>
<p><font face="Arial"><strong>&#8220;__nocache&#8221;</strong><br />
指定是否会用到cache的报表参数值，这些cache的值一般保存在rptconfig文件里。在设计报表并预览的时候，可以保存输入的报表参数值。这个在runtime的时候不常用。<br />
===============================================================================</font></p>
<p><font face="Arial">========================== 报表参数相关 ===================================<br />
<strong>&#8220;__isnull&#8221;</strong><br />
指定当前的报表参数为null值，后面是报表的参数名。</font></p>
<p><font face="Arial"><strong>&#8220;__islocale&#8221;</strong><br />
指定当前的报表参数值是和Locale/Format相关的，必须用特定的Locale/Format转化参数值(从String转化为Object)。格式为__islocale=paramName。</font></p>
<p><font face="Arial"><strong>&#8220;__isdisplay__&#8221;</strong><br />
指定报表参数的displayText值,格式为__isdisplay__paramName=displayText。可以在报表中引用displayText值，如params[&#8220;p1&#8221;].displayText。<br />
在URL上传displayText时如下(报表参数名为p1)：<br />
&amp;__isdisplay__p1=hello</font></p>
<p><font face="Arial"><strong>&#8220;__islocale__&#8221;</strong><br />
指定该报表参数值是Locale/Format相关的，同时给定了参数值。格式为__islocale__paramName=paramValue。<br />
===============================================================================</font></p>
<p><font face="Arial">========================== Export Data参数 ===================================<br />
<strong>&#8220;__exportEncoding&#8221;</strong><br />
该参数应用于导出数据为CSV中，可以指定导出的文件编码，如GBK或是GB2312等。</font></p>
<p><font face="Arial"><strong>&#8220;__sep&#8221;</strong><br />
该参数应用于导出数据为CSV中，可以指定数据分隔符，如逗号，冒号等。</font></p>
<p><font face="Arial"><strong>&#8220;__exportdatatype&#8221;</strong><br />
该参数应用于导出数据为CSV中，可以指定是否输出数据类型。true | false</font></p>
<p><font face="Arial"><strong>&#8220;ResultSetName&#8221;</strong><br />
要导出数据的记录集名字。</font></p>
<p><font face="Arial"><strong>&#8220;SelectedColumnNumber&#8221;</strong><br />
要导出的栏位数。</font></p>
<p><font face="Arial"><strong>&#8220;SelectedColumn&#8221;</strong><br />
要导出的数据栏位名称。</font></p>
<p><font face="Arial">具体可以查看BirtSimpleExportDataDialog.js文件。<br />
===============================================================================</font></p>
<font face="Arial">5. 其它参数设置<br />
在BIRT Viewer里还有一个比较特殊的参数应用，就是用户可以自定义自已的servlet，然后传递对象到Application Context中，在报表中就可以从全局的Application Context去获取到这个对象。<br />
这里相关的有两个内定的参数，AppContextKey和AppContextValue。下面是一个简单的示例。<br />
public void service( HttpServletRequest request,<br />
&nbsp;&nbsp;&nbsp; HttpServletResponse response ) throws ServletException,<br />
&nbsp;&nbsp;&nbsp; IOException, BirtException<br />
{<br />
&nbsp;&nbsp; String myKeyName = "mykey";<br />
&nbsp;&nbsp; List values = new ArrayList();<br />
&nbsp;&nbsp; values.add( "hello" );<br />
&nbsp;&nbsp; values.add( new Date() );<br />
&nbsp;&nbsp; request.setAttribute( "AppContextKey", myKeyName );<br />
&nbsp;&nbsp; request.setAttribute( "AppContextValue", values );<br />
&nbsp;&nbsp; RequestDispatcher rd = request.getRequestDispatcher( "/frameset" );<br />
&nbsp;&nbsp; rd.include( request, response );<br />
}</font></div>
<img src ="http://www.blogjava.net/mydearvivian/aggbug/240120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mydearvivian/" target="_blank">自由</a> 2008-11-12 16:42 <a href="http://www.blogjava.net/mydearvivian/articles/240120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>System.getProperty()</title><link>http://www.blogjava.net/mydearvivian/articles/238644.html</link><dc:creator>自由</dc:creator><author>自由</author><pubDate>Tue, 04 Nov 2008 09:09:00 GMT</pubDate><guid>http://www.blogjava.net/mydearvivian/articles/238644.html</guid><wfw:comment>http://www.blogjava.net/mydearvivian/comments/238644.html</wfw:comment><comments>http://www.blogjava.net/mydearvivian/articles/238644.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mydearvivian/comments/commentRss/238644.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mydearvivian/services/trackbacks/238644.html</trackback:ping><description><![CDATA[将 getProperty(String) 方法使用的当前系统属性集合作为 Properties 对象返回。如果没有当前系统属性集合，则先创建并初始化一个系统属性集合。这个系统属性集合总是包含以下键的值： <br />
<br />
<table style="border-right: #000000 2px; padding-right: 2px; border-top: #000000 2px; padding-left: 2px; padding-bottom: 2px; margin: 2px; border-left: #000000 2px; width: 485pt; padding-top: 2px; border-bottom: #000000 2px; border-collapse: collapse; background-color: #ffff99" cellspacing="0" cellpadding="0" width="647" border="0">
    <colgroup><strong>
    <col style="width: 252pt" width="336">
    <col style="width: 233pt" width="311"></strong>
    <tbody>
        <tr style="height: 13.5pt" height="18">
            <td style="width: 252pt; height: 13.5pt" width="336" height="18">
            <p align="center"><strong>键&nbsp;</strong></p>
            </td>
            <td style="border-left: medium none; width: 233pt" width="311">
            <p align="center"><strong>相关值的描述</strong></p>
            </td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.version Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">运行时环境版本</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.vendor Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">运行时环境供应商</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.vendor.url Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">供应商的 URL</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.home Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">安装目录</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.vm.specification.version Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">虚拟机规范版本</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.vm.specification.vendor Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">虚拟机规范供应商</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.vm.specification.name Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">虚拟机规范名称</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.vm.version Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">虚拟机实现版本</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.vm.vendor Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">虚拟机实现供应商</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.vm.name Java</td>
            <td style="border-top: medium none; border-left: medium none">虚拟机实现名称</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.specification.version Java</td>
            <td style="border-top: medium none; border-left: medium none">运行时环境规范版本</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.specification.vendor Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">运行时环境规范供应商</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.specification.name Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">运行时环境规范名称</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.class.version Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">类格式版本号</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.class.path Java&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">类路径</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.library.path&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">加载库时搜索的路径列表</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.io.tmpdir&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">默认的临时文件路径</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.compiler&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">要使用的 JIT 编译器的名称</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">java.ext.dirs&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">一个或多个扩展目录的路径</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">os.name&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">操作系统的名称</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">os.arch&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">操作系统的架构</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">os.version&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">操作系统的版本</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">file.separator&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">文件分隔符（在 UNIX 系统中是&#8220;/&#8221;）</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">path.separator&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">路径分隔符（在 UNIX 系统中是&#8220;:&#8221;）</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">line.separator</td>
            <td style="border-top: medium none; border-left: medium none">&nbsp;行分隔符（在 UNIX 系统中是&#8220;/n&#8221;）</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">user.name&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">用户的账户名称</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">user.home&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">用户的主目录</td>
        </tr>
        <tr style="height: 13.5pt" height="18">
            <td style="border-top: medium none; height: 13.5pt" height="18">user.dir&nbsp;</td>
            <td style="border-top: medium none; border-left: medium none">用户的当前工作目录&nbsp;</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/mydearvivian/aggbug/238644.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mydearvivian/" target="_blank">自由</a> 2008-11-04 17:09 <a href="http://www.blogjava.net/mydearvivian/articles/238644.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为SourceViewer添加Undo、Redo功能</title><link>http://www.blogjava.net/mydearvivian/articles/231676.html</link><dc:creator>自由</dc:creator><author>自由</author><pubDate>Sun, 28 Sep 2008 06:41:00 GMT</pubDate><guid>http://www.blogjava.net/mydearvivian/articles/231676.html</guid><wfw:comment>http://www.blogjava.net/mydearvivian/comments/231676.html</wfw:comment><comments>http://www.blogjava.net/mydearvivian/articles/231676.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mydearvivian/comments/commentRss/231676.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mydearvivian/services/trackbacks/231676.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 前阵子，做了一个表达式编辑器，基于JavaScript语法的，支持表达式语法验证错误提示、内容辅助输入、语法高亮等，JS语法解析部分采用ANTLR3.0实现，诸如编辑器内容辅助、内容信息装饰等在网络上有相当多的文章介绍，google搜索能有一堆，这里就不再叙述了。<br />
&nbsp;&nbsp;&nbsp; 简单说回本篇文章的主题吧，Undo、Redo功能在代码编辑器中应该是最基本的也是必备的功能，翻阅了一下SourceViewer的代码，发现它提供了一个setUndoManager(IUndoManager undoManager) 方法，再详细的阅读了下SourceViewer对Undo/Redo部分的相关支持，要实现Undo/Redo功能还是相当简单方便的，还是闲话少说，贴出代码片段大家看看就很明白了<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">SourceViewer&nbsp;expressionViewer&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;SourceViewer(viewerComposite,&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">,&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SWT.V_SCROLL&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;SWT.H_SCROLL&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;SWT.BORDER&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;SWT.MULTI&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;SWT.FULL_SELECTION);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expressionViewer.getTextWidget().setFont(JFaceResources.getFont(JFaceResources.TEXT_FONT));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008000">//</span><span style="color: #008000">支持99次</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">IUndoManager&nbsp;undoManager&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;TextViewerUndoManager(</span><span style="color: #000000">99</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;undoManager.connect(expressionViewer);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expressionViewer.setUndoManager(undoManager);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Control&nbsp;styleTextWidget&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;expressionViewer.getTextWidget();<br />
<img id="Codehighlighter1_550_693_Open_Image" onclick="this.style.display='none'; Codehighlighter1_550_693_Open_Text.style.display='none'; Codehighlighter1_550_693_Closed_Image.style.display='inline'; Codehighlighter1_550_693_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_550_693_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_550_693_Closed_Text.style.display='none'; Codehighlighter1_550_693_Open_Image.style.display='inline'; Codehighlighter1_550_693_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expressionViewer.appendVerifyKeyListener(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;VerifyKeyListener()&nbsp;</span><span id="Codehighlighter1_550_693_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_550_693_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_600_685_Open_Image" onclick="this.style.display='none'; Codehighlighter1_600_685_Open_Text.style.display='none'; Codehighlighter1_600_685_Closed_Image.style.display='inline'; Codehighlighter1_600_685_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_600_685_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_600_685_Closed_Text.style.display='none'; Codehighlighter1_600_685_Open_Image.style.display='inline'; Codehighlighter1_600_685_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;verifyKey(VerifyEvent&nbsp;event)&nbsp;</span><span id="Codehighlighter1_600_685_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_600_685_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((event.stateMask&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;SWT.CTRL)&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;event.doit&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">false</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);<br />
<img id="Codehighlighter1_751_1530_Open_Image" onclick="this.style.display='none'; Codehighlighter1_751_1530_Open_Text.style.display='none'; Codehighlighter1_751_1530_Closed_Image.style.display='inline'; Codehighlighter1_751_1530_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_751_1530_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_751_1530_Closed_Text.style.display='none'; Codehighlighter1_751_1530_Open_Image.style.display='inline'; Codehighlighter1_751_1530_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;styleTextWidget.addKeyListener(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;KeyAdapter()&nbsp;</span><span id="Codehighlighter1_751_1530_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_751_1530_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_795_1522_Open_Image" onclick="this.style.display='none'; Codehighlighter1_795_1522_Open_Text.style.display='none'; Codehighlighter1_795_1522_Closed_Image.style.display='inline'; Codehighlighter1_795_1522_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_795_1522_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_795_1522_Closed_Text.style.display='none'; Codehighlighter1_795_1522_Open_Image.style.display='inline'; Codehighlighter1_795_1522_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;keyPressed(KeyEvent&nbsp;e)&nbsp;</span><span id="Codehighlighter1_795_1522_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_795_1522_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Only&nbsp;if&nbsp;CTRL&nbsp;was&nbsp;pressed</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((e.stateMask&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">&nbsp;SWT.CTRL)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">)&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;operation&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_943_1056_Open_Image" onclick="this.style.display='none'; Codehighlighter1_943_1056_Open_Text.style.display='none'; Codehighlighter1_943_1056_Closed_Image.style.display='inline'; Codehighlighter1_943_1056_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_943_1056_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_943_1056_Closed_Text.style.display='none'; Codehighlighter1_943_1056_Open_Image.style.display='inline'; Codehighlighter1_943_1056_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(e.character&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_943_1056_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_943_1056_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Ctrl&nbsp;+&nbsp;Spacebar:&nbsp;Content&nbsp;Assist</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;operation&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;SourceViewer.CONTENTASSIST_PROPOSALS;<br />
<img id="Codehighlighter1_1101_1186_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1101_1186_Open_Text.style.display='none'; Codehighlighter1_1101_1186_Closed_Image.style.display='inline'; Codehighlighter1_1101_1186_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1101_1186_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1101_1186_Closed_Text.style.display='none'; Codehighlighter1_1101_1186_Open_Image.style.display='inline'; Codehighlighter1_1101_1186_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((e.character&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">\u0040</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">Z</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1101_1186_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1101_1186_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Ctrl&nbsp;+&nbsp;Z:&nbsp;Undo</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;operation&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ITextOperationTarget.UNDO;<br />
<img id="Codehighlighter1_1231_1316_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1231_1316_Open_Text.style.display='none'; Codehighlighter1_1231_1316_Closed_Image.style.display='inline'; Codehighlighter1_1231_1316_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1231_1316_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1231_1316_Closed_Text.style.display='none'; Codehighlighter1_1231_1316_Open_Image.style.display='inline'; Codehighlighter1_1231_1316_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;((e.character&nbsp;</span><span style="color: #000000">|</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">\u0040</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">'</span><span style="color: #000000">Y</span><span style="color: #000000">'</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_1231_1316_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_1231_1316_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Ctrl&nbsp;+&nbsp;Y:&nbsp;Redo</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;operation&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;ITextOperationTarget.REDO;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Check&nbsp;if&nbsp;operation&nbsp;is&nbsp;possible</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(operation&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">&amp;&amp;</span><span style="color: #000000">&nbsp;expressionViewer.canDoOperation(operation))&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Perform&nbsp;operation</span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;expressionViewer.doOperation(operation);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);</span></div>
大家现在可以试试了，Ctrl+Z Undo； Ctrl+Y Redo <img src="/CuteSoft_Client/CuteEditor/images/emteeth.gif" align="absMiddle" border="0"  alt="" />
<img src ="http://www.blogjava.net/mydearvivian/aggbug/231676.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mydearvivian/" target="_blank">自由</a> 2008-09-28 14:41 <a href="http://www.blogjava.net/mydearvivian/articles/231676.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT显示图片</title><link>http://www.blogjava.net/mydearvivian/articles/210818.html</link><dc:creator>自由</dc:creator><author>自由</author><pubDate>Thu, 26 Jun 2008 06:13:00 GMT</pubDate><guid>http://www.blogjava.net/mydearvivian/articles/210818.html</guid><wfw:comment>http://www.blogjava.net/mydearvivian/comments/210818.html</wfw:comment><comments>http://www.blogjava.net/mydearvivian/articles/210818.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/mydearvivian/comments/commentRss/210818.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mydearvivian/services/trackbacks/210818.html</trackback:ping><description><![CDATA[SWT没有提供专门显示图片的控件，不过可以通过Canvas组件实现<br />
1、新建Canvas，并添加PaintListener监听<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">canvas&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Canvas(composite,&nbsp;SWT.NONE);<br />
<img id="Codehighlighter1_86_193_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_193_Open_Text.style.display='none'; Codehighlighter1_86_193_Closed_Image.style.display='inline'; Codehighlighter1_86_193_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_86_193_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_86_193_Closed_Text.style.display='none'; Codehighlighter1_86_193_Open_Image.style.display='inline'; Codehighlighter1_86_193_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />canvas.addPaintListener(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;PaintListener()&nbsp;</span><span id="Codehighlighter1_86_193_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_86_193_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_130_189_Open_Image" onclick="this.style.display='none'; Codehighlighter1_130_189_Open_Text.style.display='none'; Codehighlighter1_130_189_Closed_Image.style.display='inline'; Codehighlighter1_130_189_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_130_189_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_130_189_Closed_Text.style.display='none'; Codehighlighter1_130_189_Open_Image.style.display='inline'; Codehighlighter1_130_189_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;paintControl(PaintEvent&nbsp;e)&nbsp;</span><span id="Codehighlighter1_130_189_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span id="Codehighlighter1_130_189_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(image</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">)<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.gc.drawImage(image,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">);</span></div>
2、新建Image，调用canvas.redraw()方法
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Image&nbsp;image&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Image(display,</span><span style="color: #000000">"</span><span style="color: #000000">C:/eclipse/plugins/org.eclipse.platform_2.0.2/eclipse_lg.gif</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />canvas.redraw();</span></div>
<br />
<br />
另外还有一种更加简单的方法可以显示图片，通过设置Label的setImage方法显示图片<br />
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000">Label&nbsp;label&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Label(shell,&nbsp;SWT.NONE);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />label.setImage(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Image(Display.getDefault(),&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">c:/abc.gif</span><span style="color: #000000">"</span><span style="color: #000000">));</span></div>
<img src ="http://www.blogjava.net/mydearvivian/aggbug/210818.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mydearvivian/" target="_blank">自由</a> 2008-06-26 14:13 <a href="http://www.blogjava.net/mydearvivian/articles/210818.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>自定义 CellEditor</title><link>http://www.blogjava.net/mydearvivian/articles/205309.html</link><dc:creator>自由</dc:creator><author>自由</author><pubDate>Mon, 02 Jun 2008 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/mydearvivian/articles/205309.html</guid><wfw:comment>http://www.blogjava.net/mydearvivian/comments/205309.html</wfw:comment><comments>http://www.blogjava.net/mydearvivian/articles/205309.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/mydearvivian/comments/commentRss/205309.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mydearvivian/services/trackbacks/205309.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在TableViewer或TreeViewer编辑时候，Eclipse提供了基本的CellEditor，如TextCellEditor、CheckboxCellEditor、ComboBoxCellEditor、DialogCellEditor等，但在实际应用过程中，我们通常有特殊需要，如下图类型的单元格编辑器：实现的方式相当简单，我组合了ComboBoxCellEditor、Dialog...&nbsp;&nbsp;<a href='http://www.blogjava.net/mydearvivian/articles/205309.html'>阅读全文</a><img src ="http://www.blogjava.net/mydearvivian/aggbug/205309.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mydearvivian/" target="_blank">自由</a> 2008-06-02 13:46 <a href="http://www.blogjava.net/mydearvivian/articles/205309.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GridLayout布局下Composite的隐藏</title><link>http://www.blogjava.net/mydearvivian/articles/205256.html</link><dc:creator>自由</dc:creator><author>自由</author><pubDate>Mon, 02 Jun 2008 02:01:00 GMT</pubDate><guid>http://www.blogjava.net/mydearvivian/articles/205256.html</guid><wfw:comment>http://www.blogjava.net/mydearvivian/comments/205256.html</wfw:comment><comments>http://www.blogjava.net/mydearvivian/articles/205256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mydearvivian/comments/commentRss/205256.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mydearvivian/services/trackbacks/205256.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 在SWT编程中，用GirdLayout布局好组件时，有时候会碰到这种情况：某些组件可能在运行态时需要根据选项被隐藏/显示。通常我们会把这组组件放置在同一个Composite中，并设置Composite.setVisible(false)就可以了，但是若该Composite位于GridLayout布局的中间位置，将其隐藏后，仍然会留下空白区，后面的组件并不会收缩上去重新布局，经过试验找到了一个比较完美的解决办法，如以下的代码片段： <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_18_655_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_655_Open_Text.style.display='none'; Codehighlighter1_18_655_Closed_Image.style.display='inline'; Codehighlighter1_18_655_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_18_655_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_655_Closed_Text.style.display='none'; Codehighlighter1_18_655_Open_Image.style.display='inline'; Codehighlighter1_18_655_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">switch</span><span style="color: #000000">&nbsp;(iIndex)&nbsp;</span><span id="Codehighlighter1_18_655_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_18_655_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_31_334_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_334_Open_Text.style.display='none'; Codehighlighter1_31_334_Closed_Image.style.display='inline'; Codehighlighter1_31_334_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_31_334_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_31_334_Closed_Text.style.display='none'; Codehighlighter1_31_334_Open_Image.style.display='inline'; Codehighlighter1_31_334_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">:&nbsp;</span><span id="Codehighlighter1_31_334_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_31_334_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_91_285_Open_Image" onclick="this.style.display='none'; Codehighlighter1_91_285_Open_Text.style.display='none'; Codehighlighter1_91_285_Closed_Image.style.display='inline'; Codehighlighter1_91_285_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_91_285_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_91_285_Closed_Text.style.display='none'; Codehighlighter1_91_285_Open_Image.style.display='inline'; Codehighlighter1_91_285_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(grpExpression.getLayoutData()&nbsp;</span><span style="color: #0000ff">instanceof</span><span style="color: #000000">&nbsp;GridData)&nbsp;</span><span id="Codehighlighter1_91_285_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_91_285_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridData&nbsp;gd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(GridData)grpExpression.getLayoutData();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gd.heightHint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grpExpression.setLayoutData(gd);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grpExpression.layout(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rootComposit.layout(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grpObject.setVisible(</span><span style="color: #0000ff">false</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;<br />
<img id="Codehighlighter1_348_651_Open_Image" onclick="this.style.display='none'; Codehighlighter1_348_651_Open_Text.style.display='none'; Codehighlighter1_348_651_Closed_Image.style.display='inline'; Codehighlighter1_348_651_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_348_651_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_348_651_Closed_Text.style.display='none'; Codehighlighter1_348_651_Open_Image.style.display='inline'; Codehighlighter1_348_651_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">case</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">:&nbsp;</span><span id="Codehighlighter1_348_651_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_348_651_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_408_603_Open_Image" onclick="this.style.display='none'; Codehighlighter1_408_603_Open_Text.style.display='none'; Codehighlighter1_408_603_Closed_Image.style.display='inline'; Codehighlighter1_408_603_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_408_603_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_408_603_Closed_Text.style.display='none'; Codehighlighter1_408_603_Open_Image.style.display='inline'; Codehighlighter1_408_603_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(grpExpression.getLayoutData()&nbsp;</span><span style="color: #0000ff">instanceof</span><span style="color: #000000">&nbsp;GridData)&nbsp;</span><span id="Codehighlighter1_408_603_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_408_603_Open_Text"><span style="color: #000000">{<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GridData&nbsp;gd&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(GridData)grpExpression.getLayoutData();<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gd.heightHint&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">22</span><span style="color: #000000">;&nbsp; //设成非-1的任何小于0的值即可<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grpExpression.setLayoutData(gd);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grpExpression.layout(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rootComposit.layout(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grpObject.setVisible(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
<img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
&nbsp;&nbsp;&nbsp; 上例中grpExpression位于布局中段，grpObject位于布局末尾
 <img src ="http://www.blogjava.net/mydearvivian/aggbug/205256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mydearvivian/" target="_blank">自由</a> 2008-06-02 10:01 <a href="http://www.blogjava.net/mydearvivian/articles/205256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>EMF－Ecore模型 -- 属性</title><link>http://www.blogjava.net/mydearvivian/articles/201699.html</link><dc:creator>自由</dc:creator><author>自由</author><pubDate>Tue, 20 May 2008 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/mydearvivian/articles/201699.html</guid><wfw:comment>http://www.blogjava.net/mydearvivian/comments/201699.html</wfw:comment><comments>http://www.blogjava.net/mydearvivian/articles/201699.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/mydearvivian/comments/commentRss/201699.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/mydearvivian/services/trackbacks/201699.html</trackback:ping><description><![CDATA[<h4>包（EPackage）<br />
<span style="font-size: 10pt"><span style="font-family: 新宋体">
<table style="font-size: 10pt; width: 495px; height: 114px" cellspacing="2" cellpadding="2" width="495" border="0">
    <tbody>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体"><span style="font-size: 10pt">name</span></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体"><span style="font-family: 新宋体"><span style="font-size: 10pt">字符串</span></span></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体"><span style="font-size: 10pt">名称</span></span></td>
        </tr>
        <tr>
            <td><span style="font-family: 新宋体">nsURI</span></td>
            <td><span style="font-family: 新宋体">字符串</span></td>
            <td><span style="font-family: 新宋体">名字空间的URI（与XML对应）</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-family: 新宋体">nsPrefix</span></td>
            <td><span style="font-family: 新宋体">字符串</span></td>
            <td><span style="font-family: 新宋体">名字空间的前缀（与XML对应）</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-family: 新宋体">eCLassifiers</span></td>
            <td></td>
            <td><span style="font-family: 新宋体">对包中的类的引用</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-family: 新宋体">Subpackages</span></td>
            <td></td>
            <td><span style="font-family: 新宋体">对子包的引用</span></td>
        </tr>
    </tbody>
</table>
</span></span></h4>
<strong>类（EClass等）</strong><br />
<table cellspacing="2" cellpadding="2" width="500" border="0">
    <tbody>
        <tr>
            <td colspan="3">
            <p align="center"><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 新宋体">ENameElement</span></p>
            </td>
        </tr>
        <tr>
            <td>name</td>
            <td><span style="font-size: 9pt; font-family: 新宋体"><span style="font-family: 新宋体"><span style="font-size: 10pt">字符串</span></span></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体"><span style="font-size: 10pt">名称</span></span></td>
        </tr>
        <tr>
            <td colspan="3">
            <p align="center"><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 新宋体">ETypedElement</span></p>
            </td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">eType</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">EClassifier</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">特性的类型。对于<span lang="EN-US">EAttribute</span>他是<span lang="EN-US">Attribute</span>的类型，对于<span lang="EN-US">EReference</span>他是<span lang="EN-US">Reference</span>所引用的类型。</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">lowerBound</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">整数值</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">特性的下限</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">unique</span></td>
            <td><strong><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">|false</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">当特性含有多个值时，值是否允许重复出现</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">upperBound</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">整数值</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">特性的上限</span></td>
        </tr>
        <tr>
            <td colspan="3">
            <p align="center"><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 新宋体">EStructuralFeature</span></p>
            </td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">changeable</span></td>
            <td><strong><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">|false</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">特性是否可修改</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">transient</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">ture|<strong>false</strong></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">在序列化时，特性是否被忽略</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">unsettable</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true|<strong>false</strong></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">是否能够把特性设置为&#8220;未设置&#8221;状态<br />
            <font face="Arial"><span style="color: #0000ff"><font face="Arial">注：</font></span>当设置了该属性的时候，我们还需要使用另外一个属性值，即unset，该属性就是用来告诉emf，我们是否需要使用unset这个属性。</font></span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">volatie</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true|<strong>false</strong></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">是否不需要为特性提供存储空间，一般用于表示特性是从其他特性中导出<br />
            <font face="Arial"><font face="Arial"><span style="color: #0000ff"><font face="Arial">注：</font></span></font>这种情况一般发生在当前属性值是由其他属性计算而来的时候，此时该属性的set方法可能需要我们自己实现，而不是由emf generator生成的。</font></span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">required</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true|<strong>false</strong></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">特性是否必须，如果是则等价于把下限值设为<span lang="EN-US">1</span></span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">many</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true|<strong>false</strong></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">特性是否为多值，如果是则等价于把上限值设为<span lang="EN-US">-1</span></span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">defaultValueLiteral</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">字符串</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">特性默认值的字符串表示</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">defaultValue</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">Java</span><span style="font-size: 9pt; font-family: 新宋体">类</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">默认值所对应的<span lang="EN-US">Java</span>实例</span></td>
        </tr>
        <tr>
            <td colspan="3">
            <p align="center"><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 新宋体">EAttribute</span></p>
            </td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">ID</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true|<strong>false</strong></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">该属性是否全局唯一</span></td>
        </tr>
        <tr>
            <td colspan="3">
            <p align="center"><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 新宋体">EReference</span></p>
            </td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">containment</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true|<strong>false</strong></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">引用是否是按值引用</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">container</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">布尔值</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">如果引用是双向的，则该值为<span lang="EN-US">true</span></span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">resolveProxies</span></td>
            <td><strong><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">|false</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">当引用者与被引用者处于不同的文档时，我们使用一个代理来代表被引用者，直到第一次访问被引用者时，再装入被引用者的内容并进行解释。而当引用者与被引用者位于同一个文档时，我们可以不用使用这种代理的方式，此时该值可以设置为&#8220;<span lang="EN-US">false</span>&#8221;。</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">eOpposite</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">EReference</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">如果是双向的引用，则该值指向另一个方向的引用</span></td>
        </tr>
        <tr>
            <td colspan="3">
            <p align="center"><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 新宋体">EClassifier</span></p>
            </td>
        </tr>
        <tr>
            <td>
            <p class="MsoNormal"><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">instanceClassName</span></p>
            </td>
            <td><span style="font-size: 9pt; font-family: 新宋体">字符串</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">用于表示该类型的<span lang="EN-US">Java</span>类名</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">instanceClass</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">Java</span><span style="font-size: 9pt; font-family: 新宋体">类</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">由<span lang="EN-US">instanceClassName</span>指定的类</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">defaultValue</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">Java</span><span style="font-size: 9pt; font-family: 新宋体">实例</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">instanceClass</span><span style="font-size: 9pt; font-family: 新宋体">所对应的一个实例</span></td>
        </tr>
        <tr>
            <td colspan="3">
            <p align="center"><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 新宋体">EClass</span></p>
            </td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">abstract</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true|<strong>false</strong></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">如果为<span lang="EN-US">true</span>，则该类是一抽象类</span></td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">interface</span></td>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true|<strong>false</strong></span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">如果为<span lang="EN-US">true</span>，则该类是一接口</span></td>
        </tr>
        <tr>
            <td colspan="3">
            <p align="center"><span lang="EN-US" style="font-size: 9pt; color: red; font-family: 新宋体">EDataType</span></p>
            </td>
        </tr>
        <tr>
            <td><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">serializable</span></td>
            <td><strong><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">true</span></strong><span lang="EN-US" style="font-size: 9pt; font-family: 新宋体">|false</span></td>
            <td><span style="font-size: 9pt; font-family: 新宋体">标识该类型是否需要进行序列化</span></td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/mydearvivian/aggbug/201699.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/mydearvivian/" target="_blank">自由</a> 2008-05-20 17:06 <a href="http://www.blogjava.net/mydearvivian/articles/201699.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>