﻿<?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-bob-文章分类-eclipse RCP</title><link>http://www.blogjava.net/keweibo/category/36491.html</link><description>一专  Java 多能  Delphi,Powerbuilder ... </description><language>zh-cn</language><lastBuildDate>Sat, 09 Jun 2012 02:16:38 GMT</lastBuildDate><pubDate>Sat, 09 Jun 2012 02:16:38 GMT</pubDate><ttl>60</ttl><item><title>通过RCP创建的view，怎样直接显示出来</title><link>http://www.blogjava.net/keweibo/articles/380322.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 08 Jun 2012 03:25:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/380322.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/380322.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/380322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/380322.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/380322.html</trackback:ping><description><![CDATA[新创建的VIEW已经加到透视图中,但是打开程序时就是不显示相应的视图.<br /><br />解决方法:<br /><br /><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; color: #111111; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 22px; text-align: left; background-color: #ffffff; ">原来是设置了这个导致的</p><p style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; background-color: #ffffff; "><font color="#111111" face="Verdana, Arial, Helvetica, sans-serif"><span style="line-height: 22px;">configurer.setSaveAndRestore(true);<br /></span></font>代码如下:<br /><div><span style="line-height: 22px;">package com.act.mac.upload.intro;</span></div><div><span style="line-height: 22px;"><br /></span></div><div><span style="line-height: 22px;">import org.eclipse.ui.application.IWorkbenchConfigurer;</span></div><div><span style="line-height: 22px;">import org.eclipse.ui.application.IWorkbenchWindowConfigurer;</span></div><div><span style="line-height: 22px;">import org.eclipse.ui.application.WorkbenchAdvisor;</span></div><div><span style="line-height: 22px;">import org.eclipse.ui.application.WorkbenchWindowAdvisor;</span></div><div><span style="line-height: 22px;"><br /></span></div><div><span style="line-height: 22px;">public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {</span></div><div><span style="line-height: 22px;"><br /></span></div><div><span style="line-height: 22px;"><span style="white-space:pre">	</span>private static final String PERSPECTIVE_ID = "com.act.mac.upload.perspective";</span></div><div><span style="line-height: 22px;"><br /></span></div><div><span style="line-height: 22px;">&nbsp; &nbsp; public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {</span></div><div><span style="line-height: 22px;">&nbsp; &nbsp; &nbsp; &nbsp; return new ApplicationWorkbenchWindowAdvisor(configurer);</span></div><div><span style="line-height: 22px;">&nbsp; &nbsp; }</span></div><div><span style="line-height: 22px;">&nbsp; &nbsp;&nbsp;</span></div><div><span style="line-height: 22px;">&nbsp; &nbsp; public void initialize(IWorkbenchConfigurer configurer) {</span></div><div><span style="line-height: 22px;">&nbsp; &nbsp; &nbsp; &nbsp; super.initialize(configurer);</span></div><div><span style="line-height: 22px;">&nbsp; &nbsp; &nbsp; &nbsp; //configurer.setSaveAndRestore(true);//注释掉就OK了</span></div><div><span style="line-height: 22px;">&nbsp; &nbsp; }</span></div><div><span style="line-height: 22px;"><br /></span></div><div><span style="line-height: 22px;"><span style="white-space:pre">	</span>public String getInitialWindowPerspectiveId() {</span></div><div><span style="line-height: 22px;"><span style="white-space:pre">		</span>return PERSPECTIVE_ID;</span></div><div><span style="line-height: 22px;"><span style="white-space:pre">	</span>}</span></div><div><span style="line-height: 22px;">}</span></div><div style="color: #111111; font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 22px; "></div></p><img src ="http://www.blogjava.net/keweibo/aggbug/380322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2012-06-08 11:25 <a href="http://www.blogjava.net/keweibo/articles/380322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RCP开发---Log4j配置</title><link>http://www.blogjava.net/keweibo/articles/376986.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sat, 28 Apr 2012 09:56:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/376986.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/376986.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/376986.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/376986.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/376986.html</trackback:ping><description><![CDATA[<div style="text-align: left;"><div>运行控制台打印:(只在控制台上，不在.log文件中)</div><div>log4j:WARN No appenders could be found for logger (myrcp.OpenViewAction).</div><div>log4j:WARN Please initialize the log4j system properly.</div><div>这是因为没有添加Log4j的配置信息。</div><div></div><div>在启动RCP的插件中的start方法里：</div><div>&nbsp; &nbsp; public void start(BundleContext context) throws Exception {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; super.start(context);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; plugin = this; &nbsp; &nbsp; &nbsp;&nbsp;</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; Properties prop = new Properties();</div><div>&nbsp; &nbsp; &nbsp; &nbsp; try {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; prop.load(Activator.class.getResourceAsStream("log4j.properties")); //$NON-NLS-1$</div><div>&nbsp; &nbsp; &nbsp; &nbsp; } catch (IOException e) {</div><div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; // e.printStackTrace();</div><div>&nbsp; &nbsp; &nbsp; &nbsp; }</div><div></div><div>&nbsp; &nbsp; &nbsp; &nbsp; PropertyConfigurator.configure(prop);</div><div>&nbsp; &nbsp; }</div><div></div><div>在myrcp.Activator同级目录下添加log4j.properties：&nbsp;</div></div><img src ="http://www.blogjava.net/keweibo/aggbug/376986.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2012-04-28 17:56 <a href="http://www.blogjava.net/keweibo/articles/376986.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SWT的SHELL样式</title><link>http://www.blogjava.net/keweibo/articles/326316.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 16 Jul 2010 07:26:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/326316.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/326316.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/326316.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/326316.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/326316.html</trackback:ping><description><![CDATA[<table class="modth" width="100%" border="0" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td class="modtl" width="7"><br />
            </td>
            <td class="modtc" nowrap="nowrap"><br />
            </td>
            <td class="modtc" align="right" nowrap="nowrap"><br />
            </td>
            <td class="modtr" width="7"><br />
            </td>
        </tr>
    </tbody>
</table>
<br />
<div class="cnt">
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000;">Shell&nbsp;&nbsp;  dlgShell&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;  Shell(parent,&nbsp;&nbsp;&nbsp;  SWT.DIALOG_TRIM&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;
SWT.APPLICATION_MODAL);&nbsp;&nbsp;&nbsp;</span></div>
<span style="font-size: 10pt;"><font color="#ff0000">&nbsp;&nbsp;
所谓模态对话框，就是指除非采取有效的关闭手段，用户的鼠标焦点或者输入光标将一直停留在其上的对话框。非模态对话框则不会强制此种特性，用户可以在当前
对话框以及其他窗口间进行切换。</font> </span><br />
<br />
<span style="font-size: 10pt;">setShellStyle(这里可以任意设置样式);能够设
置的样式如下：（以下属性可以多选，但是某些属性相冲突时会导致设置的其他属性失效）<br />
</span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000;">SWT.BORDER </span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个有边框但没有标题栏的窗口</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.CLOSE </span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个只有关闭按钮的窗口</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.MIN&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个不能最大化的窗口</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.MAX, </span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个可以最大化最小化的窗口</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.NO_TRIM </span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个没有任何边界和标题栏的窗口</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.RESIZE </span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个可以改变大小的窗口</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.TITLE </span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个没有标题栏图标，没有关闭按钮的窗口</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.ON_TOP </span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个总是在上的窗口，注意：此属性最好与CLOSE、MIN、MAX一起使用。</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.TOOL&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个类似工具栏的窗口</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.APPLICATION_MODAL
</span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个APPLICATION模态窗口</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.MODELESS </span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个非模态窗口</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.PRIMARY_MODAL </span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个PRIMARY模态窗口</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">SWT.SYSTEM_MODAL&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个SYSTEM模态窗口</span></div>
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp;  还有两个快捷属性来建立窗口<br />
</span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #000000;">SHELL_TRIM </span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个标准模式的窗口，相当于属性设置为CLOSE | TITLE | MIN | MAX | RESIZE</span><span style="color: #008000;"><br />
<img src="../../Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000;">DIALOG_TRIM </span><span style="color: #008000;">//</span><span style="color: #008000;">建立一个对话框模式的窗口，相当于属性设置为TITLE | CLOSE | BORDER</span></div>
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/326316.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2010-07-16 15:26 <a href="http://www.blogjava.net/keweibo/articles/326316.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>透视图的标签改成波浪形</title><link>http://www.blogjava.net/keweibo/articles/288679.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 28 Jul 2009 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/288679.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/288679.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/288679.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/288679.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/288679.html</trackback:ping><description><![CDATA[使用硬代碼的方式，具體類代碼如下<br />
package gecs.mes.ke.reelup.apps;<br />
<br />
import gecs.mes.ke.reelup.sys.IAppConstants;<br />
<br />
import org.eclipse.ui.IWorkbenchPreferenceConstants;<br />
import org.eclipse.ui.PlatformUI;<br />
import org.eclipse.ui.application.IWorkbenchConfigurer;<br />
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;<br />
import org.eclipse.ui.application.WorkbenchAdvisor;<br />
import org.eclipse.ui.application.WorkbenchWindowAdvisor;<br />
<br />
public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {<br />
<br />
&nbsp;&nbsp;&nbsp; private static final String PERSPECTIVE_ID = IAppConstants.DEFAULT_PERSPECTIVE_ID;<br />
<br />
&nbsp;&nbsp;&nbsp; public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return new ApplicationWorkbenchWindowAdvisor(configurer);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; public void initialize(IWorkbenchConfigurer configurer) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; super.initialize(configurer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; configurer.setSaveAndRestore(false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlatformUI.getPreferenceStore().setValue(IWorkbenchPreferenceConstants.SHOW_INTRO, false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //設置視圖標題欄的外觀弧線外觀<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlatformUI.getPreferenceStore().setValue(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR, IWorkbenchPreferenceConstants.TOP_RIGHT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlatformUI.getPreferenceStore().setDefault(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS, false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PlatformUI.getPreferenceStore().setValue(IWorkbenchPreferenceConstants.SHOW_PROGRESS_ON_STARTUP, true);<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
&nbsp;&nbsp;&nbsp; public String getInitialWindowPerspectiveId() {<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return PERSPECTIVE_ID;<br />
&nbsp;&nbsp;&nbsp; }<br />
}<br />
<br />
<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/288679.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-07-28 09:39 <a href="http://www.blogjava.net/keweibo/articles/288679.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解決在eclipse项目中使用utf-8字符時导出错误</title><link>http://www.blogjava.net/keweibo/articles/288671.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Tue, 28 Jul 2009 01:17:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/288671.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/288671.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/288671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/288671.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/288671.html</trackback:ping><description><![CDATA[在eclipse项目中使用utf-8字符可能会造成导出时产生错误，程序不能正常运行
<br />
我以前网上找到的办法都不好，解决的办法其实十分简单
<br />
在build.properties文件中加入
<br />
<br />
javacDefaultEncoding.. = UTF-8
<img src ="http://www.blogjava.net/keweibo/aggbug/288671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-07-28 09:17 <a href="http://www.blogjava.net/keweibo/articles/288671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>往Eclipse RCP视图中添加右键弹出菜单（轉）</title><link>http://www.blogjava.net/keweibo/articles/288565.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 27 Jul 2009 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/288565.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/288565.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/288565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/288565.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/288565.html</trackback:ping><description><![CDATA[源文：http://hi.baidu.com/wyyhzc/blog/item/dbb498196a493e4042a9ad11.html<br />
<font size="2">往eclipse的默认NavigationView中，添加右键菜单项是非常容易的，甚至不需要自己写代码，只要在plugin.xml中添加扩展项便可以了。<br />
但是这远远达不到我们的要求。如果要我们在自己的rcp程序的View中添加右键弹出菜单就不是很容易了。现在我介绍一下如何在一个树视图中针对不同的TreeObject添加不同的右键弹出菜单的方法。<br />
如果不清楚如何构建一个树，请参考</font><a href="http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/CatalogSWT-JFace-Eclipse.htm"><font size="2">http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/CatalogSWT-JFace-Eclipse.htm</font></a><font size="2">,
这里有很多关于eclipse
Tree的实例。简单将来，Eclipse中创建树有两种，一种是使用SWT提供的树，依照一定的格式给其提供数据，我自己只用这种方法创建一些简单的、
静态的树。另一种方法，针对于RCP程序，可以使用JFace提供的TreeViewer类，非常灵活并且易于扩展。使用TreeViewer需要实现
ITreeContentProvider接口和ITreeLableProvider接口。由于我的时间有限，不能向大家提供具体的实现方法，请原谅。
可以参考以下文章：</font><a href="http://eclipse.org/articles/treeviewer-cg/TreeViewerArticle.htm"><font size="2">http://eclipse.org/articles/treeviewer-cg/TreeViewerArticle.htm</font></a><br />
<font size="2">在大体了解了如何构造一个树之后，我们下面就来介绍右键弹出菜单context menu的实现方法。<br />
一个TreeViewer 必须继承ViewPart方法，并且重写其中的createPartControl(Composite parent)类。</font><br />
<br />
<font style="background-color: #ffffff;" color="#000080" face="Tahoma"><font size="2"><font style="background-color: #9acd32;" color="#000080">1  </font>&nbsp;&nbsp;  public void createPartControl(Composite parent) {<br />
<font style="background-color: #9acd32;">2  </font><br />
<font style="background-color: #9acd32;">3  </font>&nbsp;&nbsp;  /* Set the imput data and image model of the tree viewer,<br />
<font style="background-color: #9acd32;">4  </font>&nbsp;&nbsp;   * and layout the viewer on the left part of the composite.<br />
<font style="background-color: #9acd32;">5  </font>&nbsp;&nbsp;   */<br />
<font style="background-color: #9acd32;">6  </font>&nbsp;&nbsp;&nbsp;  viewer = new TreeViewer(parent);<br />
<font style="background-color: #9acd32;">7  </font>&nbsp;&nbsp;&nbsp;  viewer.setContentProvider(new ViewContentProvider());<br />
<font style="background-color: #9acd32;">8  </font>&nbsp;&nbsp;&nbsp;  viewer.setLabelProvider(new ViewLabelProvider());<br />
<font style="background-color: #9acd32;">9  </font>&nbsp;&nbsp;&nbsp;  viewer.setInput(createDummyModel());<br />
<font style="background-color: #9acd32;">10</font><br />
<font style="background-color: #9acd32;">11</font>&nbsp;&nbsp;  createActions();<br />
<font style="background-color: #9acd32;">12</font>&nbsp;&nbsp;  createMenus();<br />
<font style="background-color: #9acd32;">13</font>&nbsp;&nbsp;  createContextMenu(parent);<br />
</font></font><font style="background-color: #ffffff;" color="#000080" face="Tahoma"><font size="2"><font style="background-color: #9acd32;">14</font><br />
<font style="background-color: #9acd32;">15</font>&nbsp;&nbsp;  //handles the actions related with treeviewer.<br />
<font style="background-color: #9acd32;">16</font>&nbsp;&nbsp;  makeActions(parent);<br />
</font></font><font style="background-color: #000080;"><font face="Tahoma"><font style="background-color: #ffffff;" color="#000080"><font size="2"><font style="background-color: #9acd32;">17</font> }<br />
</font><font color="#000000"><font size="2">其中，第7到9行为设置TreeViewer的内容提供器、图像提供器、以及初始化时的输入数据。第13行为创建右键弹出菜单。<br />
<br />
</font><font color="#000080"><font size="2"><font style="background-color: #9acd32;">1&nbsp;&nbsp;</font>&nbsp;&nbsp;  private void createContextMenu(Composite parent) { <br />
<font style="background-color: #9acd32;">2  </font><br />
<font style="background-color: #9acd32;">3&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MenuManager mgr = new MenuManager(); <br />
<font style="background-color: #9acd32;">4&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mgr.setRemoveAllWhenShown(true); <br />
<font style="background-color: #9acd32;">5&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mgr.addMenuListener(new IMenuListener() { <br />
<font style="background-color: #9acd32;">6&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void menuAboutToShow(IMenuManager manager) { <br />
<font style="background-color: #9acd32;">7&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fillContextMenu(manager); <br />
<font style="background-color: #9acd32;">8&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
<font style="background-color: #9acd32;">9&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }); <br />
<font style="background-color: #9acd32;">10</font><font style="background-color: #ffffff;">&nbsp;&nbsp;&nbsp;&nbsp;  Menu menu = mgr.createContextMenu(viewer.getControl()); </font><br />
<font style="background-color: #9acd32;">11</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; viewer.getControl().setMenu(menu); <br />
<font style="background-color: #9acd32;">12</font>&nbsp;&nbsp;&nbsp;&nbsp;  getSite().registerContextMenu(mgr, viewer); <br />
<font style="background-color: #9acd32;">13</font>&nbsp;&nbsp;  }<br />
</font><font color="#000000" face="Times New Roman"><font size="2">第4行代码
中，setRemoveAllWhenShown(true)的作用是清空以前显示的菜单项，当触发了menu事件时，重新填充
（fillContextMenu），所以如果不把removeAllWhenShow置为true的话，每点一下右键你就会看到菜单项多出一倍来。
Menu是swt的控件，而Menumanager是Jface中的控件，不象SWT那样直接同底层打交道。用MenuManager可以创建出一个
Menu对象。第十行</font><font color="#000080" face="Tahoma"><font size="2">mgr.createContextMenu(viewer.getControl());</font><font color="#000000" face="Times New Roman"><font size="2">这里的viewer即为上面的viewer。第十一行，然后我们将树的setMenu方法将树控件与Menu控件联系在一起就好了。<br />
最重要的是第十二行，这是context menu能不能显示的关键。一个视图中可以有多个context menu, 而每一个context menu都必须注册给workbench。这需要通过调用</font><font color="#000080" face="Tahoma"><font size="2">org.eclipse.ui.IWorkbenchPartSite.registerContextMenu(MenuManager menuManager, ISelectionProvider selectionProvider)<font color="#000000" face="Times New Roman">或者（当有多个注册的context menu时）</font>org.eclipse.ui.IWorkbenchPartSite.registerContextMenu(String
menuId, MenuManager menuManager, ISelectionProvider selectionProvider) </font><font color="#000000" face="Times New Roman"><font size="2">增加的参数menuId用于区分不同的context menu。<br />
接下来，我们有两种方法来创建右键弹出菜单项。第一种，实现fillContextMenu()方法。典型的实现代码如下：<br />
</font><font color="#000080"><font face="Tahoma"><font size="2"><font style="background-color: #9acd32;">1&nbsp;&nbsp;</font>&nbsp;&nbsp;  protected void fillContextMenu(IMenuManager manager) {<br />
<font style="background-color: #9acd32;">2&nbsp;&nbsp;</font><br />
<font style="background-color: #9acd32;">3&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  manager.add(openAction);<br />
<font style="background-color: #9acd32;">4&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  manager.add(removeAction);<br />
<font style="background-color: #9acd32;">5&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; manager.add(addAction);<br />
<font style="background-color: #9acd32;">6&nbsp;&nbsp;</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }  <br />
</font></font></font></font></font></font></font></font></font></font></font></font></font><br />
<font size="2">这些Action都可由自己定义创建。<br />
另外的方法，可以编辑plugin.xml文件。不需要自己写任何代码便可以显示出自己想要的弹出项。<br />
这次先讲到这里，下次介绍另外的一种实现方式。（主要是由于刚创建Blog，不知道如何插入图片，这么写太费劲也太枯燥了，相信大家一定不能忍了吧！咱们下次再见</font><img src="../../Emoticons/regular_smile.gif" border="0" width="19" height="19"  alt="" />）<br />
<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/288565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-07-27 13:50 <a href="http://www.blogjava.net/keweibo/articles/288565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclispe RCP 小技巧（轉）</title><link>http://www.blogjava.net/keweibo/articles/288564.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Mon, 27 Jul 2009 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/288564.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/288564.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/288564.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/288564.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/288564.html</trackback:ping><description><![CDATA[<div class="g_blog_list">
<div class="g_t_center g_c_pdin g_p_center c07 content" id="blogtext_fks_082064087086088064084087095095086080088070081080084069">
<div>
<p><font color="#993366">一、同时关闭所有打开的view&nbsp;<br />
&nbsp;<br />
在view中,只有一个close,每次只能关闭当前窗口 <br />
在eclipse的编辑窗口的标题上点右键,里面有 close All <br />
可以使用遍历的方法，遍历所有打开的View，然后将其隐藏： <br />
AsyncUtil.asyncExec(new Runnable() <br />
{ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void run() <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IViewReference[] iViewReferences = page.getViewReferences(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (IViewReference iViewReference: iViewReferences) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!ID.equals(iViewReference.getId())) <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page.hideView(iViewReference); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
});&nbsp;&nbsp;&nbsp; <br />
&nbsp; 二、RCP中产生目标区的Bar&nbsp;<br />
&nbsp;<br />
产生红线区域的Bar,实现方法如下：<br />
1、这个是perspective，要创建多个perspective，然后设置某个为active<br />
2、在WorkbenchWindowAdvisor中preWindowOpen内，加下面这段代码<br />
public void preWindowOpen() {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apiStore.setValue(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IWorkbenchPreferenceConstants.TOP_RIGHT);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; apiStore.setValue(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; false);<br />
&nbsp;}<br />
3、需要加 config.setShowPespectivebar(true);&nbsp; <br />
三、RCP项目－－窗口关闭事件&nbsp;<br />
在ApplicationWorkbenchWindowAdvisor中override <br />
public boolean preWindowShellClose() { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // do nothing, but allow the close() to proceed <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MessageBox msgBox = new MessageBox(new Shell(), SWT.YES|SWT.NO|SWT.ICON_QUESTION); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msgBox.setText("退出系统"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; msgBox.setMessage("确定退出系统?"); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(msgBox.open()==SWT.YES){ <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false; <br />
&nbsp;&nbsp;&nbsp; } <br />
以后使用IWorkbenchWindow的getShell().close();都会调用该处代码.&nbsp;&nbsp; <br />
四、在RCP中设计界面适合桌面大小&nbsp;<br />
&nbsp;<br />
final int screenWidth = Display.getCurrent().getBounds().width;<br />
final int screenHeight = Display.getCurrent().getBounds().height;<br />
&nbsp;<br />
五、Treeviewer中通过代码，选中树上的某个node节点&nbsp;<br />
StructuredSelection sel=new StructuredSelection(node);<br />
&nbsp;tree.setSelected(sel);&nbsp; <br />
六、TreeViewer实现双击展开、关闭&nbsp;<br />
private class DoubleEventPro implements MouseListener {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void mouseDoubleClick(MouseEvent e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TreeItem item = viewer.getTree().getItem(new Point(e.x, e.y));</font></p>
<p><font color="#993366">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (item != null &amp;&amp; item.getItem(0).getText().trim().length() == 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; viewer.expandToLevel(item.getData(), 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font color="#993366">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (item != null &amp;&amp; item.getItemCount() &gt; 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; item.getItem(0).getText().trim().length() &gt; 0) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item.setExpanded(!item.getExpanded());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</font></p>
<p><font color="#993366">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void mouseDown(MouseEvent e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void mouseUp(MouseEvent e) {</font></p>
<p><font color="#993366">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }&nbsp; <br />
七、 如何屏蔽掉视图窗口上的右键弹出菜单？ <br />
</font></p>
<p><br />
<font color="#993366">方法一：在 postWindowOpen() 中执行下面语句:<br />
PlatformUI.getWorkbench().getDisplay().addFilter(SWT.MouseUp, new Listener() {<br />
&nbsp;&nbsp;&nbsp; public void handleEvent(final Event event) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(event.widget == your editor &amp;&amp; event.button == 3) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int hwndCursor = OS.GetCapture (); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OS.PostMessage(hwndCursor, OS.WM_LBUTTONDOWN, hwndCursor, OS.HTCLIENT | (OS.WM_MOUSEMOVE &lt;&lt; 16));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
});</font></p>
<p><font color="#993366">其它：org.eclipse.ui.internal.presentations.util包中的StandardViewSystemMenu类控制着这些菜单，还没来得急仔细研究，研究过后再补充</font></p>
<p><font color="#993366">八、在使用tableviewer的时候导入大量数据的问题</font></p>
<p><font color="#993366">创建了一个tableviewer，然后使用setInput方法导入数据，如果数据量很大的话根本就无效率可言了，以下是几种解决的方法：</font></p>
<p><font color="#993366">方法一：通过移动滚动条来达到自动加载的目的，在滚动条的事件中加入翻页的代码，可以参考《Eclipse从入门到精通》第二版的P383</font></p>
<p><font color="#993366">方法二：分页显示（</font><a href="http://www.eclipseworld.org/bbs/read-cec-tid-11678-keyword-table.html"><font color="#993366">http://www.eclipseworld.org/bbs/read-cec-tid-11678-keyword-table.html</font></a><font color="#993366">）</font></p>
<p><font color="#993366">方法三：使用 Virtual Tables，JFace3.2的Viewer已经支持SWT.VIRTUAL样式<br />
</font><a href="http://www.eclipse.org/articles/Article-SWT-Virtual/Virtual-in-SWT.html"><font color="#993366">http://www.eclipse.org/articles/Article-SWT-Virtual/Virtual-in-SWT.html</font></a></p>
<p><font color="#993366">1 int COUNT = 10000; <br />
2 final String [] itemStrings = new String [COUNT]; <br />
3 for (int i = 0; i &lt; COUNT; i++) { <br />
4&nbsp;&nbsp; itemStrings = "item " + i; <br />
5 } <br />
6 final Table table = new Table(parent, SWT.BORDER | SWT.VIRTUAL); <br />
7 table.addListener(SWT.SetData, new Listener() { <br />
8&nbsp;&nbsp; public void handleEvent(Event event) { <br />
9&nbsp;&nbsp;&nbsp;&nbsp; TableItem item = (TableItem)event.item; <br />
10&nbsp;&nbsp;&nbsp;&nbsp; int index = event.index; <br />
11&nbsp;&nbsp;&nbsp;&nbsp; item.setText(itemStrings [index]); <br />
12&nbsp;&nbsp; } <br />
13 }); <br />
14 table.setItemCount(COUNT);</font></p>
<p><font color="#993366">九、在透视图快捷方式栏中同时显示多个透视图快捷方式</font></p>
<p><font color="#993366">如果在程序中做了多个个透视图，默认只显示初始透视图快捷方式，每次都要 打开透视图——other，特麻烦，所以，一下提供两种方法：</font></p>
<p><font color="#993366">1、在切换栏中显示<br />
public class PIMWorkbenchAdvisor extends WorkbenchAdvisor {<br />
&nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp; public void postStartup() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super.postStartup();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //2007.01.11 设置同时显示多个透视图标<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PerspectiveBarManager barManager=((WorkbenchWindow)activeWorkbenchWindow).getPerspectiveBar();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(barManager != null){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
IPerspectiveDescriptor mailPerspective =
WorkbenchPlugin.getDefault().getPerspectiveRegistry&nbsp;&nbsp;
().findPerspectiveWithId("MyWork_mail.perspective");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
PerspectiveBarContributionItem item=new
PerspectiveBarContributionItem(mailPerspective,activeWorkbenchWindow.getActivePage());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; barManager.addItem(item);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
2、在下拉框中(shortcut)显示<br />
public class UiPerspective implements IPerspectiveFactory<br />
{<br />
&nbsp;&nbsp;&nbsp; public void createInitialLayout(IPageLayout layout){<br />
....<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //增加透视图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; layout.addPerspectiveShortcut("net.sf.pim.plugin.UiPerspective");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; layout.addPerspectiveShortcut("MyWork_mail.perspective");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
}<br />
十、控制&#8220;最近打开文档&#8221;的个数<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RCP中在继承ActionBarAdvisor的类中定义:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private IContributionItem reOpenAction = ContributionItemFactory.REOPEN_EDITORS.create(window);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后在fillMenuBar(IMenuManager menuBar)方法中添加上面的aciton<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行时&#8220;最近打开的文档&#8221;只有4个，如果想自己控制&#8220;最近打开的文档&#8221;的数量，则设置一下Workbench中的初始化首选项时RECENT_FILES的默认参数值如：<br />
WorkbenchPlugin.getDefault().getPreferenceStore().setDefault(IPreferenceConstants.RECENT_FILES,10);</font></p>
<p><font color="#993366">十一、设置Eclipse RCP程序的外观和首选项 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
RCP应用程序的缺省外观是一个空白窗口，一般我们要通过一个WorkbenchAdvisor类对界面进行定制。
WorkbenchAdvisor有很多回调方法，可以在preWindowOpen()方法里设置菜单、工具条、状态栏、进度栏、透视图切换工具是否可
见，在fillActionBars()方法里添加菜单和工具条项，在getInitialWindowPerspectiveId()方法里指定首选的
透视图。</font></p>
<p><font color="#993366">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
缺省情况下，透视图切换工具位于窗口左上角，在Eclipse里可以通过Window-&gt;Preferences-&gt;
Workbench-&gt;Appearance改变它的位置，那么怎样用程序控制它呢？有两个方法，第一个是使用如下代码设置
IPreferenceStore中的变量：</font></p>
<p><font color="#993366">IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore(); <br />
apiStore.setValue(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR, IWorkbenchPreferenceConstants.TOP_RIGHT); <br />
另一个方法是在plugin所在目录建一个名为plugin_customization.ini的文件，里面写如下内容： </font></p>
<p><font color="#993366">your.plugin.id/DOCK_PERSPECTIVE_BAR=topRight <br />
其他与plugin相关的Preference值可以用同样方法设置。</font></p>
<p><font color="#993366">Update:在最新的Eclipse 3.1M5a版本中，对RCP应用程序菜单和工具条的定制方法有所改变，应该使用新加入的ActionBarAdvisor类来完成此项工作。</font></p>
<p><font color="#993366">十二、获得自己开发的plugin被安装的目录<br />
&nbsp; /** *//**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * @return 本插件的安装路径<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp; public String getInstallDir() ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (installPath == null) ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; URL localUrl = null;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localUrl = FileLocator.toFileURL(getDefault().getBundle()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .getEntry("/"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; installPath = localUrl.getFile().substring(1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) ...{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; log(e);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return installPath;<br />
&nbsp;&nbsp;&nbsp; }</font></p>
<p><font color="#993366">轉自http://duguanglong002.blog.163.com/blog/static/26955626200955415545/</font></p>
</div>
</div>
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/288564.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-07-27 13:46 <a href="http://www.blogjava.net/keweibo/articles/288564.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>其它線程訪問UI線程</title><link>http://www.blogjava.net/keweibo/articles/286959.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 16 Jul 2009 03:52:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/286959.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/286959.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/286959.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/286959.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/286959.html</trackback:ping><description><![CDATA[Display.getDefault().asyncExec(new Runnable() {<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; @Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; public void run() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // TODO Auto-generated method stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; ... ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />
&nbsp;});<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/286959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-07-16 11:52 <a href="http://www.blogjava.net/keweibo/articles/286959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Eclipse切换界面顯示的語言</title><link>http://www.blogjava.net/keweibo/articles/283352.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Sat, 20 Jun 2009 06:42:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/283352.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/283352.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/283352.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/283352.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/283352.html</trackback:ping><description><![CDATA[<div class="postTitle">
<a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/waya/archive/2006/12/13/590844.html"><br />
</a>
</div>
<div class="postText">
<p><span style="font-size: 10pt; font-family: 新細明體;" lang="ZH-CN">首先要加入Eclipse的語言包，官方有提供<a href="http://www.eclipse.org/">www.eclipse.org</a>注意適用的版本。<br />
<br />
要切換不同的界面語言，只需的快捷鏈接中加入參數：<br />
</span><span style="font-size: 10pt; font-family: 新細明體;" lang="ZH-CN"><span style="font-size: 10pt; font-family: Verdana;" lang="EN-US">-nl "zh_CN"&nbsp; 簡體中文<br />
<span style="font-size: 10pt; font-family: Verdana;" lang="EN-US">-nl "zh_TW" 繁體中文</span><span style="font-size: 10pt; font-family: Verdana;" lang="EN-US"><br />
</span><span style="font-size: 10pt; font-family: Verdana;" lang="EN-US">-nl "en_US" 英文</span><span style="font-size: 10pt; font-family: Verdana;" lang="ZH-CN"> </span></span></span><span style="font-size: 10pt; font-family: 新細明體;" lang="ZH-CN"><span style="font-size: 10pt; font-family: Verdana;" lang="EN-US"><span style="font-size: 10pt; font-family: Verdana;" lang="ZH-CN"><br />
<br />
<span style="font-size: 10pt; font-family: Verdana;" lang="EN-US">C:\Program Files\eclipse\eclipse.exe -nl "en_US"</span></span></span></span></p>
</div>
<img src ="http://www.blogjava.net/keweibo/aggbug/283352.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-06-20 14:42 <a href="http://www.blogjava.net/keweibo/articles/283352.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rcp添加jar文件</title><link>http://www.blogjava.net/keweibo/articles/268293.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Thu, 30 Apr 2009 01:52:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/268293.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/268293.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/268293.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/268293.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/268293.html</trackback:ping><description><![CDATA[把jar文件放到项目目录下,<br />
在plugin.xml中，runtime页面，class-path节中，点add，选择刚才的jar包。 就OK了<br />
<img src ="http://www.blogjava.net/keweibo/aggbug/268293.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2009-04-30 09:52 <a href="http://www.blogjava.net/keweibo/articles/268293.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>系統托盤</title><link>http://www.blogjava.net/keweibo/articles/244711.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 05 Dec 2008 15:56:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/244711.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/244711.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/244711.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/244711.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/244711.html</trackback:ping><description><![CDATA[<p>package hellorcp.tool;</p>
<p>import org.eclipse.jface.action.Action;<br />
import org.eclipse.jface.action.IMenuManager;<br />
import org.eclipse.jface.action.MenuManager;<br />
import org.eclipse.swt.SWT;<br />
import org.eclipse.swt.events.ShellAdapter;<br />
import org.eclipse.swt.events.ShellEvent;<br />
import org.eclipse.swt.widgets.Event;<br />
import org.eclipse.swt.widgets.Listener;<br />
import org.eclipse.swt.widgets.Menu;<br />
import org.eclipse.swt.widgets.Shell;<br />
import org.eclipse.swt.widgets.Tray;<br />
import org.eclipse.swt.widgets.TrayItem;<br />
import org.eclipse.ui.IWorkbenchWindow;<br />
import org.eclipse.ui.PlatformUI;<br />
import org.eclipse.ui.plugin.AbstractUIPlugin;</p>
<p>public class HookSysTray {</p>
<p>&nbsp;private TrayItem trayItem;<br />
&nbsp;<br />
&nbsp;public HookSysTray() {<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public void createSysTray(final IWorkbenchWindow window) {<br />
&nbsp;&nbsp;trayItem = initTrayItem(window);<br />
&nbsp;&nbsp;if(trayItem != null) {<br />
&nbsp;&nbsp;&nbsp;trayPopupMenu(window);<br />
&nbsp;&nbsp;&nbsp;trayMinimize(window);<br />
&nbsp;&nbsp;}<br />
&nbsp;}<br />
&nbsp;//最小化到颖P<br />
&nbsp;private void trayMinimize(final IWorkbenchWindow window) {<br />
&nbsp;&nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp;window.getShell().addShellListener(new ShellAdapter(){</p>
<p>&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;public void shellIconified(ShellEvent e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;window.getShell().setVisible(false);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;});<br />
&nbsp;&nbsp;trayItem.addListener(SWT.Selection, new Listener(){</p>
<p>&nbsp;&nbsp;&nbsp;public void handleEvent(Event event) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;Shell shell = window.getShell();<br />
&nbsp;&nbsp;&nbsp;&nbsp;if(!shell.isVisible()) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shell.setVisible(true);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;window.getShell().setMinimized(false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;});<br />
&nbsp;}<br />
&nbsp;//颖P出菜?<br />
&nbsp;private void trayPopupMenu(final IWorkbenchWindow window) {<br />
&nbsp;&nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp;trayItem.addListener(SWT.MenuDetect, new Listener() {</p>
<p>&nbsp;&nbsp;&nbsp;public void handleEvent(Event event) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;MenuManager trayMenu = new MenuManager();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu menu = trayMenu.createContextMenu(window.getShell());<br />
&nbsp;&nbsp;&nbsp;&nbsp;fillTrayItem(trayMenu, window);<br />
&nbsp;&nbsp;&nbsp;&nbsp;menu.setVisible(true);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;});<br />
&nbsp;}</p>
<p>&nbsp;//造颖P菜雾<br />
&nbsp;private void fillTrayItem(IMenuManager trayMenu, final IWorkbenchWindow window) {<br />
&nbsp;&nbsp;Action exitSystem = new Action("退出系統[&amp;E]", <br />
AbstractUIPlugin.imageDescriptorFromPlugin(<br />
&nbsp;&nbsp;&nbsp;&nbsp;IAppConstants.APPLICATION_ID, IImagekey.EXIT_STSTEN)) {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void run() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PlatformUI.getWorkbench().close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;};<br />
&nbsp;&nbsp;trayMenu.add(exitSystem);<br />
&nbsp;}<br />
&nbsp;//初始化<br />
&nbsp;private TrayItem initTrayItem(IWorkbenchWindow window) {<br />
&nbsp;&nbsp;// TODO Auto-generated method stub<br />
&nbsp;&nbsp;final Tray tray = window.getShell().getDisplay().getSystemTray();<br />
&nbsp;&nbsp;if(tray == null)<br />
&nbsp;&nbsp;&nbsp;return null;<br />
&nbsp;&nbsp;trayItem = new TrayItem(tray, SWT.NONE);<br />
&nbsp;&nbsp;trayItem.setImage(CacheImage.getInstance().getImage(<br />
&nbsp;&nbsp;&nbsp;&nbsp;IAppConstants.APPLICATION_ID, IImagekey.WINDOW_IMAGE));<br />
&nbsp;&nbsp;trayItem.setToolTipText(IAppConstants.APPLICATION_TITLE);<br />
&nbsp;&nbsp;return trayItem;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;//最小化程式窗口<br />
&nbsp;public void windowMinimized(final Shell shell) {<br />
&nbsp;&nbsp;shell.setMinimized(true);<br />
&nbsp;&nbsp;shell.setVisible(false);<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;//<br />
&nbsp;public void disponse() {<br />
&nbsp;&nbsp;if(trayItem != null)<br />
&nbsp;&nbsp;&nbsp;trayItem.dispose();<br />
&nbsp;}<br />
}<br />
</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/244711.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2008-12-05 23:56 <a href="http://www.blogjava.net/keweibo/articles/244711.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>圖片緩存類（CacheImage） </title><link>http://www.blogjava.net/keweibo/articles/244710.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 05 Dec 2008 15:54:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/244710.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/244710.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/244710.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/244710.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/244710.html</trackback:ping><description><![CDATA[<p>package hellorcp.tool;</p>
<p>import java.util.HashMap;<br />
import java.util.Iterator;<br />
import java.util.Map;</p>
<p>import org.eclipse.swt.graphics.Image;<br />
import org.eclipse.ui.plugin.AbstractUIPlugin;</p>
<p>public class CacheImage {</p>
<p>&nbsp;private final Map&lt;String, Image&gt; imageMap = new HashMap&lt;String, Image&gt;();<br />
&nbsp;private static CacheImage INSTANCE = null;<br />
&nbsp;<br />
&nbsp;private CacheImage(){<br />
&nbsp;&nbsp;<br />
&nbsp;}<br />
&nbsp;//單例<br />
&nbsp;public static CacheImage getInstance() {<br />
&nbsp;&nbsp;if(INSTANCE == null)<br />
&nbsp;&nbsp;&nbsp;INSTANCE = new CacheImage();<br />
&nbsp;&nbsp;return INSTANCE;<br />
&nbsp;}<br />
&nbsp;//獲得圖片<br />
&nbsp;public Image getImage(String applicationId, String imageName) {<br />
&nbsp;&nbsp;if(imageName == null)<br />
&nbsp;&nbsp;&nbsp;return null;<br />
&nbsp;&nbsp;Image image = imageMap.get(imageName);<br />
&nbsp;&nbsp;if(image == null) {<br />
&nbsp;&nbsp;&nbsp;image = AbstractUIPlugin.imageDescriptorFromPlugin(applicationId, <br />
imageName).createImage();//應用程序的ID，圖片的路徑<br />
&nbsp;&nbsp;&nbsp;imageMap.put(imageName, image);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return image;<br />
&nbsp;}<br />
&nbsp;//dispose資源<br />
&nbsp;public void dispose() {<br />
&nbsp;&nbsp;Iterator&lt;Image&gt; iterator = imageMap.values().iterator();<br />
&nbsp;&nbsp;while(iterator.hasNext())<br />
&nbsp;&nbsp;&nbsp;iterator.next().dispose();<br />
&nbsp;&nbsp;imageMap.clear();<br />
&nbsp;}<br />
}<br />
</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/244710.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2008-12-05 23:54 <a href="http://www.blogjava.net/keweibo/articles/244710.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>顯示視圖類（ShowViewAction ）與ActionManager類一起使用</title><link>http://www.blogjava.net/keweibo/articles/244709.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 05 Dec 2008 15:46:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/244709.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/244709.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/244709.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/244709.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/244709.html</trackback:ping><description><![CDATA[<p>package testrcp.actions;</p>
<p>import org.eclipse.jface.action.Action;<br />
import org.eclipse.jface.dialogs.ErrorDialog;<br />
import org.eclipse.ui.IWorkbenchPage;<br />
import org.eclipse.ui.IWorkbenchWindow;<br />
import org.eclipse.ui.PartInitException;<br />
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;<br />
import org.eclipse.ui.views.IViewDescriptor;</p>
<p>public class ShowViewAction extends Action implements IWorkbenchAction {</p>
<p>&nbsp;private IWorkbenchWindow workbenchWindow;<br />
&nbsp;private IViewDescriptor desc;<br />
&nbsp;<br />
&nbsp;public ShowViewAction(IWorkbenchWindow window, IViewDescriptor desc) {<br />
&nbsp;&nbsp;super("");<br />
&nbsp;&nbsp;/** 获得视图的名称 */<br />
&nbsp;&nbsp;String label = desc.getLabel();<br />
&nbsp;&nbsp;/** 设置操作的名称 */<br />
&nbsp;&nbsp;setText(label);<br />
&nbsp;&nbsp;/** 设置操作的图标为视图的图标 */<br />
&nbsp;&nbsp;setImageDescriptor(desc.getImageDescriptor());<br />
&nbsp;&nbsp;/** 设置操作的提示文本 */<br />
&nbsp;&nbsp;setToolTipText(label);<br />
&nbsp;&nbsp;setId("ShowView" + desc.getId());<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;this.workbenchWindow = window;<br />
&nbsp;&nbsp;this.desc = desc;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;@Override<br />
&nbsp;public void run() {<br />
&nbsp;&nbsp;/** 获得当前工作区及获得工作页面 */<br />
&nbsp;&nbsp;IWorkbenchPage page = workbenchWindow.getActivePage();<br />
&nbsp;&nbsp;/** 如果页面不为null */<br />
&nbsp;&nbsp;if (page != null) {<br />
&nbsp;&nbsp;&nbsp;try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;/** 显示视图 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;page.showView(desc.getId());<br />
&nbsp;&nbsp;&nbsp;} catch (PartInitException e) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;ErrorDialog.openError(workbenchWindow.getShell(), "打开视图错误<br />
！", e.getMessage(), e.getStatus());<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>&nbsp;@Override<br />
&nbsp;public void dispose() {<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;workbenchWindow = null;<br />
&nbsp;}</p>
<p>}<br />
</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/244709.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2008-12-05 23:46 <a href="http://www.blogjava.net/keweibo/articles/244709.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Action 管理類（ActionManager ）</title><link>http://www.blogjava.net/keweibo/articles/244708.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 05 Dec 2008 15:45:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/244708.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/244708.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/244708.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/244708.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/244708.html</trackback:ping><description><![CDATA[<p>package testrcp.actions;</p>
<p>import org.eclipse.ui.IWorkbenchWindow;<br />
import org.eclipse.ui.actions.ActionFactory.IWorkbenchAction;<br />
import org.eclipse.ui.views.IViewDescriptor;</p>
<p>public class ActionManager {</p>
<p>&nbsp;public static IWorkbenchAction createHelloWorldAction(IWorkbenchWindow window) {<br />
&nbsp;&nbsp;if(window == null)<br />
&nbsp;&nbsp;&nbsp;throw new IllegalArgumentException();<br />
&nbsp;&nbsp;IWorkbenchAction helloWorldAction = new HelloWorldAction(window);<br />
&nbsp;&nbsp;return helloWorldAction;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;/**获得plugin.xml文件中配置的视图信息*/<br />
&nbsp;public static IWorkbenchAction createShowViewAction(IWorkbenchWindow window, String viewId) {<br />
&nbsp;&nbsp;if(window == null)<br />
&nbsp;&nbsp;&nbsp;throw new IllegalArgumentException();<br />
&nbsp;&nbsp;IViewDescriptor desc = window.getWorkbench().getViewRegistry().find(viewId);<br />
&nbsp;&nbsp;IWorkbenchAction action = new ShowViewAction(window, desc);<br />
&nbsp;&nbsp;return action;<br />
&nbsp;}<br />
}<br />
</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/244708.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2008-12-05 23:45 <a href="http://www.blogjava.net/keweibo/articles/244708.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ApplicationWorkbenchWindowAdvisor 類</title><link>http://www.blogjava.net/keweibo/articles/244707.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 05 Dec 2008 15:42:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/244707.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/244707.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/244707.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/244707.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/244707.html</trackback:ping><description><![CDATA[<p>package testrcp.app;</p>
<p>import org.eclipse.jface.action.MenuManager;<br />
import org.eclipse.swt.SWT;<br />
import org.eclipse.swt.graphics.Image;<br />
import org.eclipse.swt.graphics.Point;<br />
import org.eclipse.swt.graphics.Rectangle;<br />
import org.eclipse.swt.widgets.Display;<br />
import org.eclipse.swt.widgets.Event;<br />
import org.eclipse.swt.widgets.Listener;<br />
import org.eclipse.swt.widgets.Menu;<br />
import org.eclipse.swt.widgets.Shell;<br />
import org.eclipse.swt.widgets.Tray;<br />
import org.eclipse.swt.widgets.TrayItem;<br />
import org.eclipse.ui.IWorkbenchWindow;<br />
import org.eclipse.ui.application.ActionBarAdvisor;<br />
import org.eclipse.ui.application.IActionBarConfigurer;<br />
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;<br />
import org.eclipse.ui.application.WorkbenchWindowAdvisor;</p>
<p>public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {</p>
<p>&nbsp;private TrayItem trayItem;//系统托盘对象<br />
&nbsp;private Image trayImage;//系统托盘图标对象<br />
&nbsp;/** 程序的菜单条 */<br />
&nbsp;private ApplicationActionBarAdvisor actionBarAdvisor;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp; public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; super(configurer);<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; /** 创建菜单条对象 */<br />
&nbsp;&nbsp;&nbsp; public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actionBarAdvisor = new ApplicationActionBarAdvisor(configurer);<br />
&nbsp;&nbsp;&nbsp; &nbsp;return actionBarAdvisor;<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /** 打开窗口前调用该方法，对窗口初始化设置 */<br />
&nbsp;&nbsp;&nbsp; public void preWindowOpen() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IWorkbenchWindowConfigurer configurer = getWindowConfigurer();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; configurer.setInitialSize(new Point(600, 400));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; configurer.setShowCoolBar(true);//工具栏<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; configurer.setShowStatusLine(false);//状态栏<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; configurer.setShowPerspectiveBar(true);//透视图<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; configurer.setShowProgressIndicator(true);//进度条<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; final IWorkbenchWindow window = super.getWindowConfigurer().getWindow();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** 创建系统托盘 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trayItem = initTrayItem(window);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /** 如果支持系统托盘，则创建托盘的菜单 */<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(trayItem != null) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;createPopupMenu(window);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; /**<br />
&nbsp; * 创建系统托盘菜单<br />
&nbsp; * <br />
&nbsp; * @param window<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 工作台窗口对象<br />
&nbsp; */<br />
&nbsp;&nbsp;&nbsp; private void createPopupMenu(final IWorkbenchWindow window) {<br />
&nbsp;&nbsp;trayItem.addListener(SWT.MenuDetect, new Listener() {</p>
<p>&nbsp;&nbsp;&nbsp;@Override<br />
&nbsp;&nbsp;&nbsp;public void handleEvent(Event event) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;MenuManager trayMenu = new MenuManager();<br />
&nbsp;&nbsp;&nbsp;&nbsp;Menu menu = trayMenu.createContextMenu(window.getShell());<br />
&nbsp;&nbsp;&nbsp;&nbsp;/**<br />
&nbsp;&nbsp;&nbsp;&nbsp; * 调用fillTrayItem方法创建系统托盘对象，可以直接利用菜单栏中的操作 而不需要，重新创建操作<br />
&nbsp;&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;&nbsp;actionBarAdvisor.fillTrayItem(trayMenu);<br />
&nbsp;&nbsp;&nbsp;&nbsp;menu.setVisible(true);<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;});<br />
&nbsp;&nbsp;<br />
&nbsp;}</p>
<p>&nbsp;/**<br />
&nbsp; * 初始化系统托盘对象<br />
&nbsp; * <br />
&nbsp; * @param window<br />
&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 工作台窗口对象<br />
&nbsp; * @return 该程序所对应的系统托盘对象<br />
&nbsp; */<br />
&nbsp;private TrayItem initTrayItem(IWorkbenchWindow window) {<br />
&nbsp;&nbsp;final Tray tray = Display.getCurrent().getSystemTray();<br />
&nbsp;&nbsp;if(tray == null)<br />
&nbsp;&nbsp;&nbsp;return null;<br />
&nbsp;&nbsp;TrayItem trayItem = new TrayItem(tray, SWT.NONE);<br />
&nbsp;&nbsp;trayImage = Activator.getImageDescriptor("icons/logo.gif").createImage();<br />
&nbsp;&nbsp;trayItem.setImage(trayImage);<br />
&nbsp;&nbsp;trayItem.setToolTipText("System Tray");<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;return trayItem;<br />
&nbsp;}</p>
<p>&nbsp;@Override<br />
&nbsp;public void postWindowOpen() {<br />
&nbsp;&nbsp;//窗口居中显示<br />
&nbsp;&nbsp;Shell shell = getWindowConfigurer().getWindow().getShell();<br />
&nbsp;&nbsp;Rectangle screenSize = Display.getDefault().getClientArea();<br />
&nbsp;&nbsp;Rectangle frameSize = shell.getBounds();<br />
&nbsp;&nbsp;shell.setLocation((screenSize.width - frameSize.width)/2, (screenSize.height - frameSize.height)/2);<br />
&nbsp;}<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;/** 释放窗口，释放系统托盘 */<br />
&nbsp;public void dispose() {<br />
&nbsp;&nbsp;if (trayImage != null) {<br />
&nbsp;&nbsp;&nbsp;trayImage.dispose();<br />
&nbsp;&nbsp;&nbsp;trayItem.dispose();<br />
&nbsp;&nbsp;}<br />
&nbsp;}</p>
<p>}<br />
</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/244707.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2008-12-05 23:42 <a href="http://www.blogjava.net/keweibo/articles/244707.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>窗口居中顯示代碼</title><link>http://www.blogjava.net/keweibo/articles/244706.html</link><dc:creator>Ke</dc:creator><author>Ke</author><pubDate>Fri, 05 Dec 2008 15:40:00 GMT</pubDate><guid>http://www.blogjava.net/keweibo/articles/244706.html</guid><wfw:comment>http://www.blogjava.net/keweibo/comments/244706.html</wfw:comment><comments>http://www.blogjava.net/keweibo/articles/244706.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/keweibo/comments/commentRss/244706.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/keweibo/services/trackbacks/244706.html</trackback:ping><description><![CDATA[<p>重寫ApplicationWorkbenchWindowAdvisor類的postWindowOpen方法<br />
public void postWindowOpen() {<br />
&nbsp;&nbsp;//窗口居中<br />
&nbsp;&nbsp;Shell shell = getWindowConfigurer().getWindow().getShell();<br />
&nbsp;&nbsp;Rectangle screenSize = Display.getDefault().getClientArea();<br />
&nbsp;&nbsp;Rectangle frameSize = shell.getBounds();<br />
&nbsp;&nbsp;shell.setLocation((screenSize.width - frameSize.width)/2, (screenSize.height - frameSize.height)/2);<br />
&nbsp;}</p>
<img src ="http://www.blogjava.net/keweibo/aggbug/244706.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/keweibo/" target="_blank">Ke</a> 2008-12-05 23:40 <a href="http://www.blogjava.net/keweibo/articles/244706.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>