﻿<?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-nighty-随笔分类-Eclipse</title><link>http://www.blogjava.net/nighty/category/24946.html</link><description>折腾的年华</description><language>zh-cn</language><lastBuildDate>Wed, 03 Jun 2015 06:45:20 GMT</lastBuildDate><pubDate>Wed, 03 Jun 2015 06:45:20 GMT</pubDate><ttl>60</ttl><item><title>MyEclipse 9.0 安装freemarker编辑器</title><link>http://www.blogjava.net/nighty/archive/2011/05/22/350787.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Sun, 22 May 2011 14:15:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2011/05/22/350787.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/350787.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2011/05/22/350787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/350787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/350787.html</trackback:ping><description><![CDATA[<div>&nbsp;&nbsp;&nbsp; freemarker几天前才发布了2.3.17版本，5月21号又发布了2.3.18，距2.3.16已经一年多了。老的编辑器已经不能安装在新版本的eclipse和myeclipse上面了，最新的官方编辑器仍在开发阶段，有网友貌似知道最新的源代码链接位置，不过肯定是不稳定的。<br />&nbsp;&nbsp;&nbsp; 另一个可选的编辑器就是JBoss Tools 3.2中的FreeMarker编辑器，值得安慰，启动MyEclipse9.0后进入MyEclipse Configuration Center --&gt; Software --&gt; add site，输入Name: freemarker,&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp; URL:&nbsp;<a href="http://download.jboss.org/jbosstools/updates/stable/helios/">&nbsp;&nbsp;http://download.jboss.org/jbosstools/updates/stable/helios/</a>&nbsp; 然后在All JBoss Tools 3.2.0下选择FreeMarker IDE，其它的大概你不需要都不用管，也不影响下载时间，然后一路确认安装就OK!</div><img src ="http://www.blogjava.net/nighty/aggbug/350787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2011-05-22 22:15 <a href="http://www.blogjava.net/nighty/archive/2011/05/22/350787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RssOwl2源码阅读 -- ActionSet</title><link>http://www.blogjava.net/nighty/archive/2008/08/21/223431.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Thu, 21 Aug 2008 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/08/21/223431.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/223431.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/08/21/223431.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/223431.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/223431.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; ActionSet是Eclipse RCP里面一非常重要的概念，因为菜单、工具栏、上下文菜单、状态栏很多操作都是共享的，所以Action就是用来处理重复出现的东西。至于Eclipse里面定义ActionSet有非常多的技巧，可能无法一一列举，而且使用方法也多种多样。下面介绍的是RssOwl2项目的ui源代码部分的一小块。<br />
&nbsp;&nbsp; 1.&nbsp; 菜单的插入点 -- GroupMarker和Separator的使用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ApplicationActionBarAdvisor类是定义全局所有Action插入点和入口，查看fillMenuBar(IMenuManager)方法，为了简化，以其中的辅助方法createFileMenu(IMenuManager)为例，讲述一下实现菜单&#8220;文件&#8221;的内容，先看一下菜单的结构<br />
<div align="left"><img height="330" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/file.JPG" width="425" border="0" /><br />
</div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 像Close，Import...之类的非常简单，看一下它是如何实现New这个子菜单的。首先看一下它的源代码如何定义插入点<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<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_0_15_Open_Image" onclick="this.style.display='none'; Codehighlighter1_0_15_Open_Text.style.display='none'; Codehighlighter1_0_15_Closed_Image.style.display='inline'; Codehighlighter1_0_15_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_0_15_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_0_15_Closed_Text.style.display='none'; Codehighlighter1_0_15_Open_Image.style.display='inline'; Codehighlighter1_0_15_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span id="Codehighlighter1_0_15_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_0_15_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;Menu:&nbsp;File&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_69_1206_Open_Image" onclick="this.style.display='none'; Codehighlighter1_69_1206_Open_Text.style.display='none'; Codehighlighter1_69_1206_Closed_Image.style.display='inline'; Codehighlighter1_69_1206_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_69_1206_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_69_1206_Closed_Text.style.display='none'; Codehighlighter1_69_1206_Open_Image.style.display='inline'; Codehighlighter1_69_1206_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;createFileMenu(IMenuManager&nbsp;menuBar)&nbsp;</span><span id="Codehighlighter1_69_1206_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_69_1206_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;MenuManager&nbsp;fileMenu&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MenuManager(</span><span style="color: #000000">"</span><span style="color: #000000">&amp;File</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;IWorkbenchActionConstants.M_FILE);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;menuBar.add(fileMenu);<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;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.FILE_START));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.NEW_EXT));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<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;fileMenu.add(getAction(ActionFactory.CLOSE.getId()));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(getAction(ActionFactory.CLOSE_ALL.getId()));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.CLOSE_EXT));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(getAction(ActionFactory.SAVE_AS.getId()));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.SAVE_EXT));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(getAction(ActionFactory.PRINT.getId()));<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;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));<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;fileMenu.add(fReopenEditors);&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;TODO&nbsp;Consider&nbsp;moving&nbsp;into&nbsp;a&nbsp;"Go"&nbsp;Menu!</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;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;GroupMarker(IWorkbenchActionConstants.FILE_END));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;fileMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Separator());<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;fileMenu.add(getAction(ActionFactory.QUIT.getId()));<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;}</span></span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其中有一行fileMenu.add(new GroupMarker(IWorkbenchActionConstants.NEW_EXT)); 这里是定义一个GroupMarker作为组标记，把子菜单New容纳进来。这个NEW_EXT的值是：new.ext<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在跳回到plugin.xml去看一下它的ActionSet定义，结构如下：<br />
<img height="240" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/actionSet.jpg" width="242" border="1" />，点击New(menu)，它的path值为：file/new.ext，这个路径就是在createFileMenu方法定义的路径，第一个是&#8220;File&#8221;本身的ID。也就是把子菜单New(menu)插入到指定的那个GroupMarker，ID为new.ext。然后定义了三个ID分别为bookmark，newsbin,searchmark,的groupmarker和一个folder的separator，这个三ID分别就对应上面actionSet定义的三个action，以其中的Bookmark（action）为例，它的menubarPath为：file/new_sub/bookmark，代表插入到"File"主菜单中定义的new_sub子菜单中，new_sub是New(menu)的ID。因为folder是定义为separator，所以它会有一条分隔线。这只是RssOwl的定义方法，其实以前自己做开发的时候是没有这样定义的，而且把子菜单New也写在方法fillMenuBar中的，菜单把ID都写在里面，ActionSet的配置就没有子菜单出现了，但是这样定义看起来就比较乱。采用这种写法感觉比较简洁。<br />
&nbsp;&nbsp;&nbsp; 2.&nbsp; Action的实现<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 仍以bookmark为例，它的实现类是NewBookMarkAction，实现了IWorkbenchWindowActionDelegate, IObjectActionDelegate二个接口，第一个是ActionSet指定实现接口，第二个是对象操作菜单要求实现的接口（但事实发现没有再定义它的配置，可能是internal版本的原因），也就是说这个Action是多功能，它将会出现在主菜单，工具栏，和局部的右键菜单上。主菜单和工具栏的位置都在ActionSet配置定义了，看看它的右键菜单实现是在哪里的，这个右键是在视图Bookmarks定义的，那么跳转到org.rssowl.ui.internal.views.explorer.BookMarkExplorer类去看看。里面有一个hookContextualMenu()方法，就是定义它的右键菜单的，看一下代码实现：<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_34_761_Open_Image" onclick="this.style.display='none'; Codehighlighter1_34_761_Open_Text.style.display='none'; Codehighlighter1_34_761_Closed_Image.style.display='inline'; Codehighlighter1_34_761_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_34_761_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_34_761_Closed_Text.style.display='none'; Codehighlighter1_34_761_Open_Image.style.display='inline'; Codehighlighter1_34_761_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;hookContextualMenu()&nbsp;</span><span id="Codehighlighter1_34_761_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_34_761_Open_Text"><span style="color: #000000">{<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;MenuManager&nbsp;manager&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MenuManager();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_86_99_Open_Image" onclick="this.style.display='none'; Codehighlighter1_86_99_Open_Text.style.display='none'; Codehighlighter1_86_99_Closed_Image.style.display='inline'; Codehighlighter1_86_99_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_86_99_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_86_99_Closed_Text.style.display='none'; Codehighlighter1_86_99_Open_Image.style.display='inline'; Codehighlighter1_86_99_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_86_99_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_86_99_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;New&nbsp;Menu&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;MenuManager&nbsp;newMenu&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;MenuManager(</span><span style="color: #000000">"</span><span style="color: #000000">New</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;manager.add(newMenu);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" /><br />
<img id="Codehighlighter1_182_199_Open_Image" onclick="this.style.display='none'; Codehighlighter1_182_199_Open_Text.style.display='none'; Codehighlighter1_182_199_Closed_Image.style.display='inline'; Codehighlighter1_182_199_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_182_199_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_182_199_Closed_Text.style.display='none'; Codehighlighter1_182_199_Open_Image.style.display='inline'; Codehighlighter1_182_199_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_182_199_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_182_199_Open_Text"><span style="color: #008000">/*</span><span style="color: #008000">&nbsp;New&nbsp;BookMark&nbsp;</span><span style="color: #008000">*/</span></span><span style="color: #000000"><br />
<img id="Codehighlighter1_243_743_Open_Image" onclick="this.style.display='none'; Codehighlighter1_243_743_Open_Text.style.display='none'; Codehighlighter1_243_743_Closed_Image.style.display='inline'; Codehighlighter1_243_743_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_243_743_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_243_743_Closed_Text.style.display='none'; Codehighlighter1_243_743_Open_Image.style.display='inline'; Codehighlighter1_243_743_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;newMenu.add(</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;Action(</span><span style="color: #000000">"</span><span style="color: #000000">Bookmark<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000">"</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_243_743_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_243_743_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;@Override<br />
<img id="Codehighlighter1_285_629_Open_Image" onclick="this.style.display='none'; Codehighlighter1_285_629_Open_Text.style.display='none'; Codehighlighter1_285_629_Closed_Image.style.display='inline'; Codehighlighter1_285_629_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_285_629_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_285_629_Closed_Text.style.display='none'; Codehighlighter1_285_629_Open_Image.style.display='inline'; Codehighlighter1_285_629_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&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_285_629_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_285_629_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;IStructuredSelection&nbsp;selection&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(IStructuredSelection)&nbsp;fViewer.getSelection();<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IFolder&nbsp;parent&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;getParent(selection);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMark&nbsp;position&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;(IMark)&nbsp;((selection.getFirstElement()&nbsp;</span><span style="color: #0000ff">instanceof</span><span style="color: #000000">&nbsp;IMark)&nbsp;</span><span style="color: #000000">?</span><span style="color: #000000">&nbsp;selection.getFirstElement()&nbsp;:&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">new</span><span style="color: #000000">&nbsp;NewBookMarkAction(fViewSite.getShell(),&nbsp;parent,&nbsp;position).run(</span><span style="color: #0000ff">null</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;}</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;&nbsp;&nbsp;@Override<br />
<img id="Codehighlighter1_698_737_Open_Image" onclick="this.style.display='none'; Codehighlighter1_698_737_Open_Text.style.display='none'; Codehighlighter1_698_737_Closed_Image.style.display='inline'; Codehighlighter1_698_737_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_698_737_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_698_737_Closed_Text.style.display='none'; Codehighlighter1_698_737_Open_Image.style.display='inline'; Codehighlighter1_698_737_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">public</span><span style="color: #000000">&nbsp;ImageDescriptor&nbsp;getImageDescriptor()&nbsp;</span><span id="Codehighlighter1_698_737_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_698_737_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">return</span><span style="color: #000000">&nbsp;OwlUI.BOOKMARK;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top"  alt="" />&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/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">其它定义<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #008000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /></span><span style="color: #000000">}</span></span></div>
&nbsp;&nbsp;&nbsp;&nbsp; 原来实现也很简单，只是往MenuManager里面添加一个Action而已,而且run方法就是直接调用定义好的NewBookMarkAction的run方法，但是把选中对象做为参数传进去，因为这个new是涉及当前上下文选择对象的。<br />
&nbsp;&nbsp;&nbsp; 3. 下拉类型的工具按钮定义<br />
&nbsp;&nbsp;&nbsp; 非常常见的Dropdown类型的工具栏按钮可以把功能类型的按钮归为一类，做成一个下拉菜单形式，有默认的按下功能，也有可以选择其它类似功能的下三角形式，样子如下：<br />
<img height="123" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/dropdown.JPG" width="139" border="0" /><br />
&nbsp;&nbsp;&nbsp; 这个dropdown的Action是定义在ActionSet配置里的。style是pulldown类型的，所以实现类NewTypeDropdownAction实现了IWorkbenchWindowPulldownDelegate接口，它的run方法就是定义默认点击不做选择时的事情，这个下拉菜单是实现getMenu(Control parent)方法而来，它定义了如何生成这个菜单，这就用到了最原始的SWT中的MenuItem了，并且为它们添加SelectionListener，方法实现，不用说都知道了，又是New一个先前定义好的NewBookMarkAction类，然后又是调用它的run方法。所以总结一下，Action的重用不一定是这个类的重用，关键是它的run方法的重用，在不同的场景下它的外在表现形式可能会多种多样，但是它的run内容是一致的。像添加这种添加的run大部分时候都是弹出一个对话框，而对话框大都又是Winzard类型的，因为Winzard可以共享放到dialog里面。所以这种复用的思想在Eclipse里面随处可见。<br />
&nbsp;&nbsp; 归结一下，其实这些技巧都是次要的，因为做GUI一个比较痛苦的事情就是经常要写很多重复类似的代码，抽取的不好，可能就变得不伦不类了。怎么利用它的这种思想，把复用的代码都抽取在一起，而阅读起来又比较轻松才是关键。<br />
&nbsp;&nbsp; 知道的就这些，先介绍到这里，下次再谈谈其它新的发现。<br />
<img src ="http://www.blogjava.net/nighty/aggbug/223431.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2008-08-21 11:29 <a href="http://www.blogjava.net/nighty/archive/2008/08/21/223431.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>学习RssOwl2中的添加隐藏工具栏和状态栏的功能</title><link>http://www.blogjava.net/nighty/archive/2008/07/31/219038.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Thu, 31 Jul 2008 07:13:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/07/31/219038.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/219038.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/07/31/219038.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/219038.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/219038.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp; 许久没有弄RCP了，刚好近来闲暇一点，找来个RSSOwl的源代码看看，有点收获。RssOwl非常出名，只是可能很多人不知道它是用Java做的。以前看过RssOwl第一版的源码，没有详细研究，down下来之后放上公司的共享CVS服务器，倒是几个同事饶有兴趣地研究起来。第一个版本写得较早，可能Eclipse的RCP框架都还没有出来，所以全部采用的SWT/JFace...&nbsp;&nbsp;<a href='http://www.blogjava.net/nighty/archive/2008/07/31/219038.html'>阅读全文</a><img src ="http://www.blogjava.net/nighty/aggbug/219038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2008-07-31 15:13 <a href="http://www.blogjava.net/nighty/archive/2008/07/31/219038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse3.3安装中文语言包</title><link>http://www.blogjava.net/nighty/archive/2008/05/30/204106.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Fri, 30 May 2008 07:44:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2008/05/30/204106.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/204106.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2008/05/30/204106.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/204106.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/204106.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp; Eclipse3.3出来很久了，一直都使用英文版，刚好看到有网友介绍Eclipse的一个Project，叫Babel，官方的描述这样：Eclipse is a global community. It is in everyone's interest to ensure that Eclipse is available and translated in as many locales as possible. 项目的主页地址是：<a href="http://www.eclipse.org/babel/">http://www.eclipse.org/babel/</a> 。按照说明从这里可以下载安装到语言包。<br />
&nbsp;&nbsp; 直接从Eclipse3.3的菜单"Help --&gt; Software Updates --&gt; Find and Insatll..."，新建一个远程站点，URL为 <a href="http://download.eclipse.org/technology/babel/update-site/">http://download.eclipse.org/technology/babel/update-site/</a> ，然后直接在线安装。在弹出的语言选择界面上选择中文简体。如下图：<br />
&nbsp;&nbsp;&nbsp;<img height="801" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/update.JPG" width="741" border="0" /></p>
<p>&nbsp;&nbsp;&nbsp; 网络情况如果正常的话，安装应该不会有问题的，中间可能会弹出几次下载jar文件失败的对话框，继续retry就行。<br />
&nbsp;&nbsp;&nbsp;<img height="262" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/download.JPG" width="999" border="0" /><br />
&nbsp;&nbsp;&nbsp; 最后重启一下，可以看到都变成中文界面的。<br />
&nbsp;&nbsp;&nbsp; <img height="768" alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/v.jpg" width="1024" border="0" /><br />
&nbsp; <br />
&nbsp; 原来是3.3的Eclipse，怎么变成3.2呢？原因估计是语言插件的版本是3.2的导致的，所以你看到有一些地方汉化并不完全，像Error Log视图的标题，项目右键菜单，以及一些顶级菜单都没有完全汉化。<br />
&nbsp; 希望以后Babel项目后面更新跟得上主版本的变化，不过习惯了英文版的，其实也是差不多的。</p>
<img src ="http://www.blogjava.net/nighty/aggbug/204106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2008-05-30 15:44 <a href="http://www.blogjava.net/nighty/archive/2008/05/30/204106.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>保存你的RCP视图状态</title><link>http://www.blogjava.net/nighty/archive/2007/10/30/156952.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Tue, 30 Oct 2007 07:51:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2007/10/30/156952.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/156952.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2007/10/30/156952.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/156952.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/156952.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;&nbsp; 每当做开发的时候，你有可能在一次调试程序的过程中打开很多个编辑器，或是对Eclipse默认的视图布局不满意，手工作了一些调整。如果在工作的过程你因为有事离开或是不小心把Eclipse关掉了，不用担心，在你下次打开的时候，Eclipse仍然会为您记住上次的工作场景。下面是一个例子场景:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp...&nbsp;&nbsp;<a href='http://www.blogjava.net/nighty/archive/2007/10/30/156952.html'>阅读全文</a><img src ="http://www.blogjava.net/nighty/aggbug/156952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2007-10-30 15:51 <a href="http://www.blogjava.net/nighty/archive/2007/10/30/156952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>添加完整的Eclipse RCP帮助系统</title><link>http://www.blogjava.net/nighty/archive/2007/10/25/155795.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Thu, 25 Oct 2007 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2007/10/25/155795.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/155795.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2007/10/25/155795.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/155795.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/155795.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 开发基于Eclipse开的RCP软件可以直接加入Eclipse的帮助系统，使您的产品更加完善。Eclipse帮助系统提供的良好组织模式以及基于lucene的全文搜索功能。在Eclipse的网站上有一篇文章专门介绍如何为Mail示例RCP添加帮助系统的，但是写的不完全，按照里面的说明添加后无法正常地显示帮助框架。网上有少部分文章也提及这个主题，但是都没有说明白。<br />
&nbsp;&nbsp;&nbsp; 经过一翻摸索，最后终于折腾出来，在这里记录下面，与大家分享。如果你做过RCP产品，下面这些内容应该很熟悉。<br />
&nbsp;&nbsp;&nbsp; 1. 添加帮助的菜单。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在ApplicationActionBarAdvisor类中加入帮助菜单项。代码片断如下：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 0);">//</span><span style="color: rgb(0, 128, 0);">帮助</span><span style="color: rgb(0, 128, 0);"><br />
</span><span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">private</span><span style="color: rgb(0, 0, 0);">&nbsp;IWorkbenchAction&nbsp;helpAction;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;创建操作<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">protected</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;makeActions(IWorkbenchWindow&nbsp;window)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;帮助&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.....<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helpAction&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;ActionFactory.HELP_CONTENTS.create(window);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;register(helpAction);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .....</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/**</span><span style="color: rgb(0, 128, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;填充主菜单<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">protected</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">void</span><span style="color: rgb(0, 0, 0);">&nbsp;fillMenuBar(IMenuManager&nbsp;menuBar)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 128, 0);">/*</span><span style="color: rgb(0, 128, 0);">&nbsp;主菜单栏&nbsp;</span><span style="color: rgb(0, 128, 0);">*/</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IMenuManager&nbsp;mainMenu&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;getActionBarConfigurer().getMenuManager();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MenuManager&nbsp;helpMenu&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">new</span><span style="color: rgb(0, 0, 0);">&nbsp;MenuManager(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">帮助(&amp;H)</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">,&nbsp;IWorkbenchActionConstants.M_HELP);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helpMenu.add(introAction);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helpMenu.add(helpAction);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;....<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mainMenu.add(helpMenu);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
&nbsp;&nbsp; 2.&nbsp; 添加相关的依赖项。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 打开plugin.xml，转到"依赖项"的tab页,点击"添加"按钮，需要加入下面的这些依赖项：
<div style="border: 1px solid rgb(102, 102, 102);">1.<span><span style="font-family: 'Times New Roman'; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> </span></span><tt>org.apache.lucene<br />
2.</tt><tt>org.eclipse.help.appserver<br />
3.</tt><tt>org.eclipse.help.base<br />
4.</tt><tt>org.eclipse.help.ui<br />
5.</tt><tt>org.eclipse.help.webapp<br />
6.</tt><tt>org.eclipse.tomcat<br />
7.org.eclipse.ui.forms<br />
</tt></div>
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 3. 添加org.eclipse.help.toc扩展点<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  这个非常容易，转到"扩展"tab页，点击&#8220;添加&#8221;按钮。网上或是相关的书籍有很多关于添加help内容的介绍，为了节省篇幅，这里直接添加一个扩展向导来完成。选择"扩展向导"--&gt;"帮助内容"，确定后可以看到&#8220;所有扩展&#8221;的列表中多了一个org.eclipse.help.toc扩展，这里可能需要修改一下，生成的toc.xml和testToc.xml里面的label属性标签不能是乱码，不然帮助框架会读不出，到时候显示不出帮助的组织结构。<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  结构如下：<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;  <br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">extension<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(255, 0, 0);">point</span><span style="color: rgb(0, 0, 255);">="org.eclipse.help.toc"</span><span style="color: rgb(0, 0, 255);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">toc&nbsp;</span><span style="color: rgb(255, 0, 0);">file</span><span style="color: rgb(0, 0, 255);">="toc.xml"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;</span><span style="color: rgb(128, 0, 0);">toc<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(255, 0, 0);">file</span><span style="color: rgb(0, 0, 255);">="testToc.xml"</span><span style="color: rgb(255, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;primary</span><span style="color: rgb(0, 0, 255);">="true"</span><span style="color: rgb(0, 0, 255);">/&gt;</span><span style="color: rgb(0, 0, 0);"><br />
&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">&lt;/</span><span style="color: rgb(128, 0, 0);">extension</span><span style="color: rgb(0, 0, 255);">&gt;</span></div>
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 4. 部署产品配置<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; 为您的RCP添加一个产品配置，打开产品配置编辑器（xxx.product），转到"配置"tab页，点击&#8220;添加&#8221;，加入你的插件，然后点击&#8220;添加必需的插件&#8221;,这样在&#8220;插件和段&#8221;列表会看到你的插件以及你的RCP要完整启动的所有必需相关插件。在这里你应该看到你在plugin.xml中依赖的那七个help相关的插件，以及一些以nl1结尾的插件，这些是语言插件。保存，转到&#8220;概述&#8221;tab页，点击"启动产品"。然后打开&#8220;帮助--&gt; 帮助内容&#8221;，就可能看到你的帮助系统了。<br />
&nbsp;&nbsp;&nbsp; 到此一个完整的帮助系统就完成了。下面是一个截图：<br />
&nbsp;&nbsp;&nbsp; <img alt="" src="http://www.blogjava.net/images/blogjava_net/nighty/h.jpg" /><br />
<br />
<img src ="http://www.blogjava.net/nighty/aggbug/155795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2007-10-25 10:30 <a href="http://www.blogjava.net/nighty/archive/2007/10/25/155795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个ActionDelegate代理多个Action</title><link>http://www.blogjava.net/nighty/archive/2007/08/15/136823.html</link><dc:creator>寒武纪</dc:creator><author>寒武纪</author><pubDate>Wed, 15 Aug 2007 01:55:00 GMT</pubDate><guid>http://www.blogjava.net/nighty/archive/2007/08/15/136823.html</guid><wfw:comment>http://www.blogjava.net/nighty/comments/136823.html</wfw:comment><comments>http://www.blogjava.net/nighty/archive/2007/08/15/136823.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/nighty/comments/commentRss/136823.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/nighty/services/trackbacks/136823.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/nighty/archive/2007/08/15/136823.html'>阅读全文</a><img src ="http://www.blogjava.net/nighty/aggbug/136823.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/nighty/" target="_blank">寒武纪</a> 2007-08-15 09:55 <a href="http://www.blogjava.net/nighty/archive/2007/08/15/136823.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>