动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.Eclipse 3.2 Java开发新特征全面.
.认识JDBC 2.0中的高级数据类型.
.将JAVA编译为EXE的几种方法.
.Java远程方法调用 (5).
.Java Socket编程(三)-1.
.微软.Net VS Java两军对垒 Web服.
.嵌入式Java的应用实例.
.java 基本数据类型.
.封装JNDI操作LDAP服务器的工具类.
.Java Servlets技术.
.设计模式中文版.
.Java SE 6中JDBC 4.0的增强特性.
.深入分析J2ME平台MIDP低级事件处.
.Java套接字编程(下).
.初学Java要注意什么.
.中国年历算法和程式.
.如何在JBOSSServer上发布EJB.
.一种常用的权限控制算法的实现.
.开源技术:Hibernate 3注释简介.
.Java 语法介绍(五):条件控制.

扩展Eclipse的Java开发工具(三)

发表日期:2008-1-5 |



  如何扩展 JDT 的特定元素的用户界面(象 Outline 视图中的成员)?扩展视图还是它们的底层模型?
  简单的“Hello, World”示例显示了添加菜单选项只需要在插件清单文件中添加几行 XML()以及一个处理实际操作的类(com.ibm.lab.helloworld.SampleAction)。向视图的下拉菜单、公共编辑器的工具栏以及弹出菜单添加操作基本上很简单。所提供的弹出菜单归结为两类:一类只与视图相关而与所选的对象无关(也就是,对视图的“空白处”单击鼠标右键通常会显示的“缺省”弹出菜单),另一类则更常见,它们与应用于所选对象的选项相关。在我们的例子中,我们希望目标只是具体选择的对象,所以通过在插件清单文件中定义一个扩展,我们将提供的操作对象提供给这些对象的弹出菜单(对下面几个标识符进行了缩写,以获得更佳的格式;用‘…’表示),如清单 8 所示。
  
  清单 8. 修饰符操作
  
  <extension point="org.eclipse.ui.popupMenus">
   <objectContribution
     objectClass="org.eclipse.jdt.core.IMember"
     id="...imember">
     
    <menu
      label="Soln: Modifiers"
      path="group.reorganize"
      id="...imember.modifiers">
     <separator name="group1"/>
     <separator name="group2"/>
    </menu>
    
    <action
     label="Private"
     menubarPath="...imember.modifiers/group1"
     class="...jdt.excerpt.MakeIMemberPrivateAction"
     id="...imember.makeprivate">
    </action>
    
    <action
     label="Protected"
     menubarPath="...imember.modifiers/group1"
     class="...jdt.excerpt.MakeIMemberProtectedAction"
     id="...imember.makeprotected">
    </action>
    
    ...all menu choices not shown...
    
   </objectContribution>
  </extension>
  
  扩展点命名为 org.eclipse.ui.popupMenus,顾名思义,它定义了向出现在工作台中的弹出菜单提供的对象。这个非凡示例只提供给明确选择的对象,即实现 IMember 接口的对象(请回忆一下 Java 语言规范中的定义,成员包含方法和字段)。我们的研究没有白费;我们得到了当前问题的答案,我们差不多预备好回答下一个问题了。
  
  在这样做之前,此时请注重,我们找到的用于简单“Hello, World”操作示例的模式将对所提供的其它菜单操作进行重复。即,将把选择更改告知 class 属性中指定的类(通过其 selectionChanged 方法),并还将告知它用户何时选择菜单选项(通过其 run 方法)。我们“旅行”的用户界面部分快要结束了;更困难的部分,也是影响我们所期望更改的部分还在前面。正如下一个问题所说的那样,在继续之前只要做一两次观察。
  
  Package EXPlorer 中显示的元素和其它视图(如 Outline 视图)中显示的相同元素之间有什么关系?我们的扩展是否需要知道它们之间的任何区别?
  
  您可能已经注重到,当您在 Outline 视图和 Hierarchy 视图中选择了一个方法时,所选对象的类并非总是相同的。例如,假如您在 Package Explorer 中展开一个库(JAR 文件)的内容,随后选择了一个类(或方法),那么它也不会是 Java 编辑器的 Outline 视图中同一选择的那个类。到底怎么回事?
  
  这里,我们正在观察 JDT 的 Java 模型中“可编辑的”部分和始终为只读的部分之间的差别。这两部分 Java 模型都实现了公共接口(象 IMember),但是它们拥有用来理解底层限制的实现类是不同的。另一个示例是,有一个表示 Java 编译单元的实现类,它派生自 Package Explorer 所显示的 JAR 文件的 .class 文件,还有另一个类表示直接派生自 .java 文件的编译单元。后一个实现将答应进行一些前者所不答应的修改,而它们 API 的共享部分是由接口 ICompilationUnit 表示的。
  
  您以前在编辑 Java 源代码时,一定会观察到:在您输入方法特征符时 Outline 视图进行了更新(假如您没有注重到,那就试一下!)。这个示例说明了 JDT 如何在不同的区域暂放其“未提交的更改”,这与处理那些已保存、编译和集成到 Java 模型中的更改不同。有些视图(象 Java 编辑器的 Outline 视图)知道未提交的更改和已提交的更改,而其它象 Navigator 这样的视图只关心已保存到文件系统的已提交更改。
  
  随后,我们所提供的用来修改 Java 成员的操作必须(至少在某种程度上)知道在什么上下文中调用它。即,它必须识别出某些所选成员是可修改的(那些位于 Java 编辑器的 Outline 视图中的成员),而另一些成员是不可以修改的(存储在 JAR 文件中以及显示在 Package Explorer 中的 .class 文件中的成员)。记住这一点,让我们继续下一个问题。
  
  如何通过编程更改 JDT 模型?
  假如您在前面的“旅行”中稍作了研究,那么可能已经注重到 IMember、IJavaElement 以及我们的操作所看到的由所选的与 Java 相关的项实现的作为大部分接口的那部分都没有 setXXX 方法。那么如何修改这些接口呢?
  
  您将发现这出奇地简单,不过可能在直觉上不那么明显。JDT 的 Java 模型在大多数实践情况下都是“只读”的。通过与 Java 编译器的集成协作,给定元素的底层 Java 源代码进行的更改就与 Java 模型的其余部分的更改同步了。实际上,您要做的就是更新 Java 源代码,而对模型所作的其余必要更改就传送给任何依靠它们的元素中。例如,每当 Java 源代码/Java 模型发生更改时,JDT 的索引会自动更新,所以仍然可以快速执行搜索,重新编译从属类(按照项目特性中指定的 Java 构建路径所指示的),等等。
  
  可以大松一口气了!以下就是 Java 模型是插件集成之要害的原因所在:Java 模型提供了整个 Java 环境的常见的内存中共享的模型,它的范围从一个项目,一直到其所有被引用的库,所有这些都不要您费心去操作文件系统中的 .java 文件、.class 文件以及 .jar 文件。您可以将精力集中于高级模型,而让 JDT 处理这其中的许多杂乱细节。
  
  还不能确信它很轻易?清单 9 包含了这个解决方案的核心代码的一小部分,它是从提供操作的 run 方法上抽取出的,并出于可读性考虑,稍作了简化:
  
  清单 9. selectionChanged 方法,小型解决方案
  
  public void selectionChanged(IAction action, ISelection selection) {
   IMember member = (IMember)
     ((IStrUCturedSelection) selection).getFirstElement();
   ICompilationUnit cu = member.getCompilationUnit();
  
   if (cu.isWorkingCopy()) {
    IBuffer buffer = cu.getBuffer();
    buffer.replace(...);
    cu.reconcile();
   }
  }
  
  似乎有点虎头蛇尾,不是吗?对您提供的操作提供了选中的成员,向它请求其父容器(Java .class 或 .java 文件的模型,用 JDT 的说法,全都称为编译单元),因为其父容器治理底层源代码,验证该成员是否属于“未提交的” Java 模型(换句话说,它目前在编辑器中是打开的),然后修改作为缓冲器返回的源代码。IBuffer 接口类似于 StringBuffer,其原理不同之处在于,更改与编译单元相关的缓冲区更新了 Java 模型的对应元素。对 reconcile 的最终调用告知 JDT 去通知其它相关各方(象 Package Explorer 视图):您的模型更新已预备好作为公共消费品。
  
  您一定注重到上述代码中的省略号。在那里,您必须分析源代码本身以进行修改。同样,JDT 会提供帮助,正如我们将在下一个问题中看到的。
上一篇:Step-by-Step 使用 SWT 开发 GUI 人气:450
下一篇:扩展Eclipse的Java开发工具(一) 人气:529
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成