﻿<?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-玩转Java-随笔分类-Java插件开发</title><link>http://www.blogjava.net/jacky9881/category/28588.html</link><description>玩转Java</description><language>zh-cn</language><lastBuildDate>Wed, 23 Apr 2008 17:54:59 GMT</lastBuildDate><pubDate>Wed, 23 Apr 2008 17:54:59 GMT</pubDate><ttl>60</ttl><item><title>Eclipse插件开发问题二</title><link>http://www.blogjava.net/jacky9881/archive/2008/04/23/195233.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Wed, 23 Apr 2008 11:44:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/04/23/195233.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/195233.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/04/23/195233.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/195233.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/195233.html</trackback:ping><description><![CDATA[&nbsp;
<p><span style="font-family: 宋体">问题描述：</span></p>
<p><span style="font-family: 宋体">最近在做</span>Eclipse<span style="font-family: 宋体">插件开发的时候，在国际化的问题上遇到这样问题，比如我的</span>plugin.xml<span style="font-family: 宋体">文件中，通过</span>%xxx<span style="font-family: 宋体">来引用</span>plugin_zh.properties<span style="font-family: 宋体">中对应键</span>xxx<span style="font-family: 宋体">的信息时，在插件运行时，相应的信息显示不了，后来进过研究，发现是由于在</span>MANIFEST.MF<span style="font-family: 宋体">少配置了一项造成的</span></p>
<p>Bundle-Localization: plugin<span style="font-family: 宋体">，</span></p>
<p><span style="font-family: 宋体">而这一项配置我在</span>Overview<span style="font-family: 宋体">标签页上没有找到相应设置的地方，把这个在</span>MANIFEST.MF<span style="font-family: 宋体">加上，插件在运行时，就可以显示</span>plugin_zh.properties<span style="font-family: 宋体">中定义的消息了。</span></p>
<img src ="http://www.blogjava.net/jacky9881/aggbug/195233.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-04-23 19:44 <a href="http://www.blogjava.net/jacky9881/archive/2008/04/23/195233.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse插件开发中的问题一</title><link>http://www.blogjava.net/jacky9881/archive/2008/04/23/195232.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Wed, 23 Apr 2008 11:41:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/04/23/195232.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/195232.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/04/23/195232.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/195232.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/195232.html</trackback:ping><description><![CDATA[&nbsp; <span style="font-family: 宋体">问题描述：</span>
<p><span style="font-family: 宋体">最近在</span>Eclipse<span style="font-family: 宋体">插件开发中遇到这样的问题，我使用如入扩展点<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: #0000ff">&lt;</span><span style="color: #800000">extension<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">point</span><span style="color: #0000ff">="org.eclipse.debug.ui.launchConfigurationTabs"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">tab<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">class</span><span style="color: #0000ff">="com.example.launch.SqlDebugTab"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;group</span><span style="color: #0000ff">="org.eclipse.jdt.debug.ui.launchConfigurationTabGroup.localJavaApplication"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id</span><span style="color: #0000ff">="&nbsp;com.example.launchs.SqlDebugTab"</span><span style="color: #ff0000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name</span><span style="color: #0000ff">="SqlDebugTab"</span><span style="color: #0000ff">&gt;</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;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">associatedDelegate<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;</span><span style="color: #ff0000">delegate</span><span style="color: #0000ff">="&nbsp;com.example.launch.SqlDebugLaunchDelegate"</span><span style="color: #0000ff">&gt;</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;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">associatedDelegate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">tab</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">extension</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><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: #0000ff">&lt;</span><span style="color: #800000">extension<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #ff0000">point</span><span style="color: #0000ff">="org.eclipse.debug.core.launchDelegates"</span><span style="color: #0000ff">&gt;</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;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">launchDelegate<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;</span><span style="color: #ff0000">delegate</span><span style="color: #0000ff">="&nbsp;com.example.launch.SqlDebugLaunchDelegate"</span><span style="color: #ff0000"><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;id</span><span style="color: #0000ff">="&nbsp;com.example.launch.SqlDebugLaunchDelegate"</span><span style="color: #ff0000"><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;modes</span><span style="color: #0000ff">="debug"</span><span style="color: #ff0000"><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;type</span><span style="color: #0000ff">="org.eclipse.jdt.launching.localJavaApplication"</span><span style="color: #0000ff">&gt;</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;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">launchDelegate</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">extension</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<br />
&nbsp;
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">也就是在调式</span><span lang="EN-US">Java Application</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的对话框中，增加一个</span><span lang="EN-US">Tab</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页，</span><span lang="EN-US">Tab</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页的名字为</span><span lang="EN-US">SqlDebugTab</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，在这个</span><span lang="EN-US">Tab</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">页上增加几个复选框，复选框要显示视图的名称，如果用户选择某个复选框，点&#8220;</span><span lang="EN-US">Debug</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;后，将显示指定的视图，可是在</span><span lang="EN-US">com.example.launch.SqlDebugLaunchDelegate</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类中的</span><span lang="EN-US">launch</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法中调用</span><span lang="EN-US">PlatformUI.getWorkbench().getActiveWorkbenchWindow()</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，得到的对象却为</span><span lang="EN-US">null</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">，调试程序才发现，运行</span><span lang="EN-US">com.example.launch.SqlDebugLaunchDelegate</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">类是，走的是新线程，也就是说点&#8220;</span><span lang="EN-US">Debug</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">&#8221;按钮时，</span><span lang="EN-US">Eclipse</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">平台启动的是新的线程（非</span><span lang="EN-US">UI</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">线程），而在新线程中是取不到</span><span lang="EN-US">ActiveWorkbenchWindow</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象，为了解决这个问题</span><span lang="EN-US">,</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">花费了很多时间，最后终于找到解决方法</span><span lang="EN-US">,</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span><span lang="EN-US">launch</span><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法通过如下程序来显示视图，就可以解决上面遇到的问题：</span></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_64_253_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_253_Open_Text.style.display='none'; Codehighlighter1_64_253_Closed_Image.style.display='inline'; Codehighlighter1_64_253_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_64_253_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_64_253_Closed_Text.style.display='none'; Codehighlighter1_64_253_Open_Image.style.display='inline'; Codehighlighter1_64_253_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #000000">PlatformUI.getWorkbench().getDisplay().asyncExec(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Runnable()&nbsp;</span><span id="Codehighlighter1_64_253_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_64_253_Open_Text"><span style="color: #000000">{<br />
<img id="Codehighlighter1_87_251_Open_Image" onclick="this.style.display='none'; Codehighlighter1_87_251_Open_Text.style.display='none'; Codehighlighter1_87_251_Closed_Image.style.display='inline'; Codehighlighter1_87_251_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_87_251_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_87_251_Closed_Text.style.display='none'; Codehighlighter1_87_251_Open_Image.style.display='inline'; Codehighlighter1_87_251_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_87_251_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_87_251_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;IWorkbenchWindow&nbsp;window&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;PlatformUI.getWorkbench()<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;.getActiveWorkbenchWindow();<br />
<img id="Codehighlighter1_203_249_Open_Image" onclick="this.style.display='none'; Codehighlighter1_203_249_Open_Text.style.display='none'; Codehighlighter1_203_249_Closed_Image.style.display='inline'; Codehighlighter1_203_249_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_203_249_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_203_249_Closed_Text.style.display='none'; Codehighlighter1_203_249_Open_Image.style.display='inline'; Codehighlighter1_203_249_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">if</span><span style="color: #000000">&nbsp;(window&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_203_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_203_249_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;window.getActivePage().showView（</span><span style="color: #000000">"</span><span style="color: #000000">&#8230;&#8230;</span><span style="color: #000000">"</span><span style="color: #000000">）；<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />}</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="" /></span></div>
</span>
<img src ="http://www.blogjava.net/jacky9881/aggbug/195232.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-04-23 19:41 <a href="http://www.blogjava.net/jacky9881/archive/2008/04/23/195232.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发十二（复制粘贴部分）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/17/175815.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Thu, 17 Jan 2008 00:27:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/17/175815.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/175815.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/17/175815.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/175815.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/175815.html</trackback:ping><description><![CDATA[要在编辑器中支持复制，粘贴功能，首先，要在编辑器中选择活动节点，Eclipse工作台的菜单中复制，粘贴按钮处于激活状态，要实现这功能，我们还必须做些配置，因为编辑器没有单独的菜单栏，所有编辑器共享一个菜单栏，前面我们在定义编辑器扩展点时，有一个属性contributorClass没有指定值，它的值应该是一个实现IEditorActionBarContributor接口的类的全名，只有指定这个属性，菜单栏中的菜单项才能够对我们在编辑器中所做的操作进行相应；<br />
首先，我们增加属性contributorClass对应的类：<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: #0000ff">package</span><span style="color: #000000">&nbsp;com.example.workflow.actions;<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: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.gef.ui.actions.ActionBarContributor;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.actions.ActionFactory;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_209_377_Open_Image" onclick="this.style.display='none'; Codehighlighter1_209_377_Open_Text.style.display='none'; Codehighlighter1_209_377_Closed_Image.style.display='inline'; Codehighlighter1_209_377_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_209_377_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_209_377_Closed_Text.style.display='none'; Codehighlighter1_209_377_Open_Image.style.display='inline'; Codehighlighter1_209_377_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;WorkflowActionContributor&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;ActionBarContributor&nbsp;</span><span id="Codehighlighter1_209_377_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_209_377_Open_Text"><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;@Override<br />
<img id="Codehighlighter1_254_260_Open_Image" onclick="this.style.display='none'; Codehighlighter1_254_260_Open_Text.style.display='none'; Codehighlighter1_254_260_Closed_Image.style.display='inline'; Codehighlighter1_254_260_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_254_260_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_254_260_Closed_Text.style.display='none'; Codehighlighter1_254_260_Open_Image.style.display='inline'; Codehighlighter1_254_260_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;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;buildActions()&nbsp;</span><span id="Codehighlighter1_254_260_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_254_260_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;<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/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_317_373_Open_Image" onclick="this.style.display='none'; Codehighlighter1_317_373_Open_Text.style.display='none'; Codehighlighter1_317_373_Closed_Image.style.display='inline'; Codehighlighter1_317_373_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_317_373_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_317_373_Closed_Text.style.display='none'; Codehighlighter1_317_373_Open_Image.style.display='inline'; Codehighlighter1_317_373_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;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;declareGlobalActionKeys()&nbsp;</span><span id="Codehighlighter1_317_373_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_317_373_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;addGlobalActionKey(ActionFactory.COPY.getId());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>在declareGlobalActionKeys增加对复制命令的申明，同时把属性contributorClass指定为这个类，包含全路径。再定义复制动作CopyAction，代码如下：<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: #0000ff">package</span><span style="color: #000000">&nbsp;com.example.workflow.actions;<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: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.gef.ui.actions.SelectionAction;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.IWorkbenchPart;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.actions.ActionFactory;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_221_394_Open_Image" onclick="this.style.display='none'; Codehighlighter1_221_394_Open_Text.style.display='none'; Codehighlighter1_221_394_Closed_Image.style.display='inline'; Codehighlighter1_221_394_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_221_394_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_221_394_Closed_Text.style.display='none'; Codehighlighter1_221_394_Open_Image.style.display='inline'; Codehighlighter1_221_394_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;CopyAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;SelectionAction</span><span id="Codehighlighter1_221_394_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_221_394_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_264_319_Open_Image" onclick="this.style.display='none'; Codehighlighter1_264_319_Open_Text.style.display='none'; Codehighlighter1_264_319_Closed_Image.style.display='inline'; Codehighlighter1_264_319_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_264_319_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_264_319_Closed_Text.style.display='none'; Codehighlighter1_264_319_Open_Image.style.display='inline'; Codehighlighter1_264_319_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">public</span><span style="color: #000000">&nbsp;CopyAction(IWorkbenchPart&nbsp;part)&nbsp;</span><span id="Codehighlighter1_264_319_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_264_319_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;</span><span style="color: #0000ff">super</span><span style="color: #000000">(part);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setId(ActionFactory.COPY.getId());<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/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_371_391_Open_Image" onclick="this.style.display='none'; Codehighlighter1_371_391_Open_Text.style.display='none'; Codehighlighter1_371_391_Closed_Image.style.display='inline'; Codehighlighter1_371_391_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_371_391_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_371_391_Closed_Text.style.display='none'; Codehighlighter1_371_391_Open_Image.style.display='inline'; Codehighlighter1_371_391_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;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;calculateEnabled()&nbsp;</span><span id="Codehighlighter1_371_391_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_371_391_Open_Text"><span style="color: #000000">{&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;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<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/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>&nbsp;</p>
<p><br />
注意构造函数中一定要把这个action的id设置为ActionFactory.COPY.getId()，和前面统一起来；</p>
<p>到这儿还没有结束，还必须在编辑器类中注册这个action，覆盖编辑器父类中的createActions()方法：</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_31_219_Open_Image" onclick="this.style.display='none'; Codehighlighter1_31_219_Open_Text.style.display='none'; Codehighlighter1_31_219_Closed_Image.style.display='inline'; Codehighlighter1_31_219_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_31_219_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_31_219_Closed_Text.style.display='none'; Codehighlighter1_31_219_Open_Image.style.display='inline'; Codehighlighter1_31_219_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">protected</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;createActions()&nbsp;</span><span id="Codehighlighter1_31_219_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_31_219_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">super</span><span style="color: #000000">.createActions();<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;CopyAction&nbsp;copyAction&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;CopyAction((IWorkbenchPart)&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;getActionRegistry().registerAction(copyAction);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;getSelectionActions().add(copyAction.getId());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
但是当我们在复制按钮可用情况，点击之后，我们希望把我们选择的对象，拷贝到剪切板上，这个在其他软件中已经成功实现，但要是在我们开发的流程设计器中，要实现这个功能，我们还必须自己写代码来实现，必须重写CopyAction父类中的run方法，把我们选择的对象放到剪切板上，代码如下：<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_85_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_85_Open_Text.style.display='none'; Codehighlighter1_18_85_Closed_Image.style.display='inline'; Codehighlighter1_18_85_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_18_85_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_85_Closed_Text.style.display='none'; Codehighlighter1_18_85_Open_Image.style.display='inline'; Codehighlighter1_18_85_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><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_18_85_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_18_85_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;Clipboard.getDefault().setContents(</span><span style="color: #0000ff">super</span><span style="color: #000000">.getSelectedObjects());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<p>这样当我们点复制按钮之后，流程设计器就把我们选择的内容放到剪切板上，下一步要做的就是粘贴了。</p>
<p>要使粘贴按钮可用，所做的修改和复制类似，在类WorkflowActionContributor 的方法declareGlobalActionKeys中增加addGlobalActionKey(ActionFactory.PASTE.getId())</p>
<p>增加PasteAction类，代码如下：</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: #0000ff">package</span><span style="color: #000000">&nbsp;com.example.workflow.actions;<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: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.gef.ui.actions.Clipboard;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.gef.ui.actions.SelectionAction;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.IWorkbenchPart;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">import</span><span style="color: #000000">&nbsp;org.eclipse.ui.actions.ActionFactory;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_267_523_Open_Image" onclick="this.style.display='none'; Codehighlighter1_267_523_Open_Text.style.display='none'; Codehighlighter1_267_523_Closed_Image.style.display='inline'; Codehighlighter1_267_523_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_267_523_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_267_523_Closed_Text.style.display='none'; Codehighlighter1_267_523_Open_Image.style.display='inline'; Codehighlighter1_267_523_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">class</span><span style="color: #000000">&nbsp;PasteAction&nbsp;</span><span style="color: #0000ff">extends</span><span style="color: #000000">&nbsp;SelectionAction</span><span id="Codehighlighter1_267_523_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_267_523_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_311_367_Open_Image" onclick="this.style.display='none'; Codehighlighter1_311_367_Open_Text.style.display='none'; Codehighlighter1_311_367_Closed_Image.style.display='inline'; Codehighlighter1_311_367_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_311_367_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_311_367_Closed_Text.style.display='none'; Codehighlighter1_311_367_Open_Image.style.display='inline'; Codehighlighter1_311_367_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">public</span><span style="color: #000000">&nbsp;PasteAction(IWorkbenchPart&nbsp;part)&nbsp;</span><span id="Codehighlighter1_311_367_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_311_367_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;</span><span style="color: #0000ff">super</span><span style="color: #000000">(part);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setId(ActionFactory.PASTE.getId());<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/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_419_520_Open_Image" onclick="this.style.display='none'; Codehighlighter1_419_520_Open_Text.style.display='none'; Codehighlighter1_419_520_Closed_Image.style.display='inline'; Codehighlighter1_419_520_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_419_520_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_419_520_Closed_Text.style.display='none'; Codehighlighter1_419_520_Open_Image.style.display='inline'; Codehighlighter1_419_520_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;</span><span style="color: #0000ff">boolean</span><span style="color: #000000">&nbsp;calculateEnabled()&nbsp;</span><span id="Codehighlighter1_419_520_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_419_520_Open_Text"><span style="color: #000000">{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img id="Codehighlighter1_471_491_Open_Image" onclick="this.style.display='none'; Codehighlighter1_471_491_Open_Text.style.display='none'; Codehighlighter1_471_491_Closed_Image.style.display='inline'; Codehighlighter1_471_491_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_471_491_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_471_491_Closed_Text.style.display='none'; Codehighlighter1_471_491_Open_Image.style.display='inline'; Codehighlighter1_471_491_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;</span><span style="color: #0000ff">if</span><span style="color: #000000">(Clipboard.getDefault().getContents()</span><span style="color: #000000">!=</span><span style="color: #0000ff">null</span><span style="color: #000000">)</span><span id="Codehighlighter1_471_491_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_471_491_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;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">true</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_496_517_Open_Image" onclick="this.style.display='none'; Codehighlighter1_496_517_Open_Text.style.display='none'; Codehighlighter1_496_517_Closed_Image.style.display='inline'; Codehighlighter1_496_517_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_496_517_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_496_517_Closed_Text.style.display='none'; Codehighlighter1_496_517_Open_Image.style.display='inline'; Codehighlighter1_496_517_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;}</span></span><span style="color: #0000ff">else</span><span id="Codehighlighter1_496_517_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_496_517_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;</span><span style="color: #0000ff">return</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;}</span></span><span style="color: #000000"><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/InBlock.gif" align="top"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />}</span></span></div>
<br />
这里对Paste菜单的可用性作了判断，只有当剪切板中内容不为空时，粘贴按钮才可用，否则为不可用状<br />
态。<br />
另外还要在编辑器中对这个action进行申明，<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">PasteAction&nbsp;pasteAction&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;PasteAction((IWorkbenchPart)&nbsp;</span><span style="color: #0000ff">this</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />getActionRegistry().registerAction(pasteAction);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />getSelectionActions().add(pasteAction.getId());</span></div>
到这里，当我们在编辑器中选择活动，选择复制之后，粘贴按钮可用，但点粘贴按钮具体做什么，我们还没有定义，要实现这个做什么功能，还必须覆盖PasteAction父类中的run方法：<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_559_Open_Image" onclick="this.style.display='none'; Codehighlighter1_18_559_Open_Text.style.display='none'; Codehighlighter1_18_559_Closed_Image.style.display='inline'; Codehighlighter1_18_559_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_18_559_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_18_559_Closed_Text.style.display='none'; Codehighlighter1_18_559_Open_Image.style.display='inline'; Codehighlighter1_18_559_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><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_18_559_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_18_559_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;List&nbsp;list&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(List)Clipboard.getDefault().getContents();<br />
<img id="Codehighlighter1_110_556_Open_Image" onclick="this.style.display='none'; Codehighlighter1_110_556_Open_Text.style.display='none'; Codehighlighter1_110_556_Closed_Image.style.display='inline'; Codehighlighter1_110_556_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_110_556_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_110_556_Closed_Text.style.display='none'; Codehighlighter1_110_556_Open_Image.style.display='inline'; Codehighlighter1_110_556_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;</span><span style="color: #0000ff">for</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;i</span><span style="color: #000000">=</span><span style="color: #000000">0</span><span style="color: #000000">;i</span><span style="color: #000000">&lt;</span><span style="color: #000000">list.size();i</span><span style="color: #000000">++</span><span style="color: #000000">)</span><span id="Codehighlighter1_110_556_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_110_556_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;AbstractActivityEditPart&nbsp;part&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(AbstractActivityEditPart)list.get(i);<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;AbstractActivity&nbsp;model&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(AbstractActivity)part.getModel();<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;WorkflowProcess&nbsp;parent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(WorkflowProcess)part.getParent().getModel();<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;AbstractActivity&nbsp;clone&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;AbstractActivity();<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;clone.setName(</span><span style="color: #000000">"</span><span style="color: #000000">CloneActivity</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;clone.setLocation(model.getLocation());<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;clone.setSize(model.getSize());<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;clone.setFigure(model.getFigure());<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;parent.addChild(clone);<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/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
这里只是做了一下简单处理，更复杂的逻辑用户可以根据自己应用的需要，这里的run可以通过执行一个命令，以支持撤销，重做功能，原理就是这样的，另外剪切功能和这类似，只是在复制基础上多了个删除操作。
<img src ="http://www.blogjava.net/jacky9881/aggbug/175815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-17 08:27 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/17/175815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发十一（扩展点部分）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/16/175576.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Wed, 16 Jan 2008 00:42:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/16/175576.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/175576.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/16/175576.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/175576.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/175576.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;到目前为止，一个完整的流程设计器已基本完成，为了增加系统的可扩展性，比如目前活动的类型有三种，假如以后我们要增加活动的类型，怎么办？按照目前的做法，我们只能修改代码，为了使系统的扩展性更好，即我们如果要增加活动类型，只需要修改配置文件，而无须修改现有系统的代码，为此，我们把活动类型定义一个扩展点，用户以后要增加活动类型，只需扩展这个扩展点就可以了。（代码）在plugin.xml...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/16/175576.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/175576.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-16 08:42 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/16/175576.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发十（新建向导部分）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/15/175352.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Tue, 15 Jan 2008 00:45:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/15/175352.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/175352.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/15/175352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/175352.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/175352.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;这一节主要介绍如何通过新建向导，来新建我们扩展的文件(.workflow),要在新建增加内容，必须扩展org.eclipse.ui.newWizards，因此我们要修改plugin.xml文件，增加内容如下：(代码下载)&lt;extension&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;point="org.ec...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/15/175352.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/175352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-15 08:45 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/15/175352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发九（属性页部分）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/14/175062.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Mon, 14 Jan 2008 00:59:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/14/175062.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/175062.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/14/175062.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/175062.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/175062.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这一节主要介绍如何给编辑器增加属性页，属性页主要用来显示编辑器中选中对象的属性的，比如在编辑器选中活动，可以在属性页上显示活动的大小和位置等信息，要实现这一功能，首先要让模型实现IPropertySource接口，我们让模型的基类ModelElement实现这个接口，基类要实现这接口中六个方法，这六个方法如下：/**&nbsp;*//**&nbsp;An&nbsp;empty&nbsp;p...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/14/175062.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/175062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-14 08:59 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/14/175062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发八（大纲视图部分）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/11/174481.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Fri, 11 Jan 2008 00:44:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/11/174481.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/174481.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/11/174481.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/174481.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/174481.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;要实现大纲视图，我们先回顾一下以前在编辑器中实现GraphicalViewer视图，是如何实现的，找到以前的代码，在WorkflowProcessEditor的configureGraphicalViewer方法中，GraphicalViewer&nbsp;viewer&nbsp;=&nbsp;getGraphicalViewer();viewer.setEditPartFac...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/11/174481.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/174481.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-11 08:44 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/11/174481.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发七（转移拐点部分）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/10/174184.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Thu, 10 Jan 2008 01:46:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/10/174184.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/174184.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/10/174184.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/174184.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/174184.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 这一节主要介绍如何在转移上增加拐点，要实现这功能，首先要修改转移的模型，增加一个列表属性，维护转移上所有的拐点，转移模型为实现拐点功能而增加的代码如下：&nbsp;public&nbsp;static&nbsp;final&nbsp;String&nbsp;BENDPOINT_PROP&nbsp;=&nbsp;"Transition.BendPoint";private&nbsp;Li...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/10/174184.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/174184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-10 09:46 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/10/174184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发六（转移建立和删除）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/09/173935.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Wed, 09 Jan 2008 03:10:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/09/173935.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/173935.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/09/173935.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/173935.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/173935.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 哪个模型的控制器能接受在活动之间建立转移的请求呢，只有活动模型的控制器了，因为活动模型中维护着活动的输入和输出转移的列表，在活动控制器增加策略，使该控制器能接受建立转移的请求，代码如下：protectedvoid&nbsp;createEditPolicies()&nbsp;{&nbsp;&nbsp;&nbsp;&nbs...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/09/173935.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/173935.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-09 11:10 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/09/173935.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发五（移动和删除活动部分）</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/07/173390.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Mon, 07 Jan 2008 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/07/173390.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/173390.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/07/173390.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/173390.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/173390.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这一节我们来介绍如何在编辑器中移动活动，改变活动的大小和删除活动，在流程控制器中已经安装的策略WorkflowProcessXYLayoutEditPolicy，可以接受移动活动和改变活动大小的请求，但不能接受删除活动的请求，要处理删除活动的请求，必须在活动控制器中安装策略。&nbsp;&nbsp;&nbsp;&nbsp;&nb...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/07/173390.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/173390.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-07 17:16 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/07/173390.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发四(策略和命令部分)</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/04/172635.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Fri, 04 Jan 2008 00:49:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/04/172635.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/172635.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/04/172635.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/172635.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/172635.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 要实现向编辑器增加活动，我们应该在面板上选一种活动（开始活动，普通活动，结束活动），拖到编辑器中。为此我们必须在面板和编辑器中分别加监听。修改WorkflowProcessEditor类在编辑器的GraphicalViewer加监听protectedvoid&nbsp;initializeGraphicalViewer()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/04/172635.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/172635.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-04 08:49 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/04/172635.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发三(编辑器部分)</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/03/172356.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Thu, 03 Jan 2008 00:54:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/03/172356.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/172356.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/03/172356.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/172356.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/172356.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;为了实现流程编辑器，光有我们建立的模型，控制器和视图还不够，我们还必须新建一个编辑器类，为此，我们要新建一个插件项目，我们新建的插件项目com.example.workflow结构如下：&nbsp;&nbsp;&nbsp;&nbsp;为了实现一个编辑器，我们必须扩展org.eclipse.ui.editors这个扩展点，这个可...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/03/172356.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/172356.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-03 08:54 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/03/172356.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发二(控制器和视图部分)</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/02/172254.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Wed, 02 Jan 2008 08:51:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/02/172254.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/172254.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/02/172254.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/172254.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/172254.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;这一节，我们讲控制器的设计，在gef框架中，控制器作为连接模型和视图的桥梁，它主要根据用户的操作来修改模型，并且刷新视图。在前面我们定义了流程模型（WorkflowProcess），活动模型（AbstractActivity），转移模型（Transition），在这里我们分别定义相应的控制器（EditPart），首先我们定义流程模型对应的控制器(Wo...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/02/172254.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/172254.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-02 16:51 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/02/172254.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程设计器开发一(模型部分)</title><link>http://www.blogjava.net/jacky9881/archive/2008/01/02/172223.html</link><dc:creator>玩转Java</dc:creator><author>玩转Java</author><pubDate>Wed, 02 Jan 2008 07:32:00 GMT</pubDate><guid>http://www.blogjava.net/jacky9881/archive/2008/01/02/172223.html</guid><wfw:comment>http://www.blogjava.net/jacky9881/comments/172223.html</wfw:comment><comments>http://www.blogjava.net/jacky9881/archive/2008/01/02/172223.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/jacky9881/comments/commentRss/172223.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jacky9881/services/trackbacks/172223.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp;&nbsp;我自从进入公司后，一直从事有关gef方面的开发工作，在这期间，走过不少弯路，仅仅是把GEF框架弄明白，就费了很大力气，所以，现在想写一点东西出来，供初学者阅读。&nbsp;&nbsp;&nbsp;&nbsp;GEF(Graphical Editing Framework)是图形化编辑器开发的工具，比较典型的应用就是IBM 的Rose，它是一个...&nbsp;&nbsp;<a href='http://www.blogjava.net/jacky9881/archive/2008/01/02/172223.html'>阅读全文</a><img src ="http://www.blogjava.net/jacky9881/aggbug/172223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jacky9881/" target="_blank">玩转Java</a> 2008-01-02 15:32 <a href="http://www.blogjava.net/jacky9881/archive/2008/01/02/172223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>