Eclipse_Swt_Jface_核心应用_部分15

4星(超过85%的资源)
所需积分/C币:9 2011-10-09 14:40:33 6.81MB PDF
38
收藏 收藏
举报

第1章 Java语言的GUI历史 2 1.1 最初的AWT 2 1.2 Swing工具包 3 1.3 Eclipse的诞生 3 1.4 Eclipse贡献SWT工具包 5 1.4.1 SWT的结构 6 1.4.2 SWT所支持的操作系统 6 1.5 Sun AWT/Swing与Eclipse SWT 7 1.5.1 Swing与SWT的比较 7 1.5.2 SWT的优势和不足 8 1.6 SWT与JFace、Eclipse 9 1.6.1 JFace是SWT的扩展 9 1.6.2 Eclipse的UI界面基于JFace 10 1.7 本章小结 10 第2章 配置SWT开发环境 11 2.1 下载和安装Eclipse 11 2.1.1 Eclipse下载页面介绍 11 2.1.2 下载Eclipse 12 2.1.3 安装Eclipse语言包 14 .2.1.4 在不同的语言中切换 15 2.2 直接获取SWT工具包 16 2.3 下载和安装Visual Editor 17 2.3.1 Visual Editor的下载 17 2.3.2 Visual Editor的安装 18 2.4 第一个SWT程序 19 2.4.1 创建SWT程序 19 2.4.2 编译和运行程序 20 2.5 本章小结 21 第3章 Eclipse开发环境概述 22 3.1 Eclipse界面一览 22 3.2 Eclipse项目的文件结构 23 3.2.1 设置编译后.class文件的保存目录 23 3.2.2 导入项目使用的包 25 3.2.3 设置编译方式 26 3.2.4 运行程序 27 3.3 常用的代码编辑功能 28 3.3.1 添加注释 28 3.3.2 自定义格式化代码 28 3.3.3 自动生成getter和setter代码 30 3.3.4 代码的重构 31 3.3.5 查看源代码 31 3.3.6 代码的展开和折叠 32 3.3.7 代码比较 33 3.3.8 子类中覆盖父类的方法 34 3.4 代码错误提示 34 3.4.1 如何定位错误 34 3.4.2 自动修正错误 35 3.5 文件查找 35 3.5.1 文件内部查找 35 3.5.2 项目内查找 36 3.6 使用快捷键 36 3.6.1 显示快捷键说明 37 3.6.2 自定义快捷键 37 3.7 本章小结 38 第2篇 SWT进阶篇 第4章 SWT开发基础 40 4.1 SWT应用程序基本结构 40 4.2 Display类 42 4.2.1 Display类概述 42 4.2.2 Display类常用方法 42 4.3 Shell类 45 4.3.1 Shell类概述 45 4.3.2 不同窗口的样式 46 4.3.3 应用多个样式 47 4.3.4 Shell类的主要方法 47 4.3.5 创建多个窗口 49 4.4 SWT包类结构 51 4.5 本章小结 52 第5章 SWT基本组件 53 5.1 SWT控件类概述 53 5.1.1 窗口小部件:Widget 53 5.1.2 Widget的继承关系 53 5.1.3 SWT中的子类 54 5.1.4 控件(Controls)与面板(Composites) 55 5.1.5 Widgets不是Controls 55 5.2 按钮(Button) 58 5.2.1 普通按钮(SWT.PUSH) 58 5.2.2 切换按钮(SWT.TOGGLE) 59 5.2.3 箭头按钮(SWT.ARROW) 60 5.2.4 单选按钮(SWT.RADIO) 60 5.2.5 多选按钮(SWT.CHECK) 61 5.2.6 常用的方法 63 5.3 标签(Label) 64 5.3.1 文本标签 64 5.3.2 分割线标签 64 5.3.3 自定义标签(CLabel) 65 5.4 文本框(Text) 65 5.4.1 文本框的样式 66 5.4.2 文本框程序示例 66 5.4.3 常用的方法 68 5.5 列表框(List) 69 5.5.1 列表框的样式 69 5.5.2 列表框程序示例 70 5.5.3 常用的方法 73 5.6 组合框(Combo) 74 5.6.1 组合框的样式 75 5.6.2 组合框程序示例 75 5.6.3 组合
第23章RCP开发 485 3.1编辑器扩展点 下面就来看一下如何实现图23.13所示效果的编辑器。首先找到扩展编辑器的扩展点 org. eclipse, ul views, 配置扩展信息。配置好的 plugin. xml文件如下 extensio point="org. eclipse. ui.editors"> <editor class="com. fengmanfei. mrcp. editors. Js Editor" contributor Class="com. fengmanfei myrcp editors Js EditorContributor" default="false icon="icons/samples. gif id="com. fengmanfei. myrcp. editors. JsEdi name="JsEditor"/> <extension> 其中,编辑器扩展点的各元素的说明如下: 口编辑器的扩展点类型为 org. eclipse. ui.editors 口与视图一样,一个编辑器也对应一个 class类,该类必须是实现了 org. eclipse ui.IEditorPart的类。 口id是该编辑器对象的唯一标识,name为编辑器显示的名称 旦 default:表示是否使用默认的编辑器 口 contributor Class是实现了 org. eclipse. ui. IEditor Action BarContributor接口的类, Eclipse中 Editor Action BarContributor类已经实现了该接口,通常的做法是继承该类, 然后覆盖父类中的方法实现的。 口另外,除了以上所示的这几个元素属性外,还有一些其他的元素需要注意。如下 ◆ extensions:打开该编辑器的所对应的文件的扩展名,例如“htm,htm”。 ● command和 launcher: command为要运行以启动外部编辑器的命令。 Launcher 为实现了 org.eclipse.ui. EditorLauncher的类。这样启动程序将打开外部编辑器。 其中 class、 command和 launcher都是打开编辑器的方式,属性是互斥的 filenames:编辑器打开文件时可选的文件名。 ◆ symbolicFontName:编辑器字体的名称 matchingStrategy:实现 org.eclipse. ui. IEditor Strategy的类。这允许编 辑器扩展提供一个策略,使编辑器的输入与指定的编辑器输入相匹配。 一般开发编辑器时通常会用到这些属性,但在RCP开发中,如果不是开发的RCP编辑 器程序,一般是用不到这些属性的。 2332编辑器类 同视图一样,一个编辑器也对应一个Java类,本例中对应的类是 com. fengmanfei. mrcp 486 Eclipse SWT/ JFace核心应用 editors sEditor.首先看一下该类实现的具体代码后,再详细地解释。该类的代码如下: JsEditor. Java package com. fengmanfei, mrcp. editors: import org. eclipse. core runtime. I ProgressMonitor, import org eclipse swt SWT import org. eclipse. swt events. Modify Event; import org. eclipse. swt events. Modify Listener import org. eclipse. swt widgets. Composite import org. eclipse. swt widgets. Text: import org. eclipse. ui. lEditorInput import org. eclipse. ui. lEditorPart import org. eclipse ui. eDitor Site import org. eclipse ui. PartInitException. port org. eclipse. ui part. EditorPart, public class JsEditor extends EditorPart ∥对应 plugin. xm指定的id public static final String ID="com. fengmanfei. myrcp editors JsEditor private Text text, ∥编辑器中的内容是否被修改的标志 private boolean bDirty false public JsEditorO)I pero ∥初始化编辑器 public void init(IEditorSite site, IEditorInput input) throws PartInitException this. setsite(site)/设置sie ths. setInput( input)设置输入的 ditorInput对象 this. setPartName( Input getName()/设置编辑器上方显示的名称 ∥刨建编辑器中的控件 public void create PartControl(Composite parent)( text= new Text(parent, SWT. NONE) ∥当文本框修改时,设定内容被修改过 text. addModifyListener(new Modify)( public void modify Text(Modify Event e)( i( lis Dirty()《如果未修改 setDirty(tue)设置修改 ∥更改编辑器的状态 fireProperty Change(lEditorPart PROP DIRTY): ∥编器关闭时,保存编辑器内容时所调用的方法 public void dosave(PRogress Monitor monitor)( 第23章RCP开发 487 ∥将保存状态显示在状态栏中 try i monitor begin Tasl k("保存文件…",100) for(int i=0, i< 10&& Imonitoris Canceled(: i++)( Thread. sleep(500) monitor, worked(10) double d=(i+1)/10d monitor sub Task(“已完成”+d*100+"%");∥显示任务状态 monitor, done(; if(monitor is Canceled throw new InterruptedException("取消保存") I catch (InterruptedException e)I ∥另存为调用的方法 public void do SaveAs( ∥判断是否被修改过 public boolean isDirty()( return bDirty ∥是否允许保存 public boolean is SaveAsAllowed([ return true: ∥设置焦点 public void setFocusO)( text setF: 设置编辑器内容被修改过 public void setDirty(boolean b)t dIrty=b 创建编辑器类时应该注意以下问题: 口编辑器所对应的类为实现了 TEditorPart接口的类, Eclipse插件开发中已经实现了该 接口的类如图23.14所示。通常可以继承这些类,本例中使用的是继承了 EditorPart 类,例如下文中讲述的多页编辑器则要继承自 MultiPageEditorPart类,表单编辑器 则要继承 FormEditor类。 口另外,在创建编辑器扩展的向导中,有一个XML编辑器的示例程序,该程序继承 的则是 TextEditor。一般开发代码编辑器会继承该类,读者可以阅读相关的代码。 口编辑器中显示的控件是 create Part Control方法,本例中创建了一个很简单的文本框。 488 Eclipse SWT/ JFace核心应用 口另外需要注意的是几个有关编辑器状态的方法,如下所示: ◆ is Dirty:判断编辑器内容是否被修改过,如果被修改过,标签上会显示一个 *”号,如图23.15所示。 e IEdi torPor C Edi torBert ⊙ A Abstractterteditor G ErrorEditorPart e Foreface G ultiEditer C Multi PartEditox *Editor x E PagEd tor Part AAAAAAAAA FormEd tor ⊙置 encampEd ton 图23.14实现了 EditorPart接口的类 图23.15内容被修改后的编辑器的界面效果 本例中判断是否修改是根据一个布尔型的变量 dIrty来判断的,当文本框的内容修改 时,则将该值设置为ure。另外,当状态改变时要及时地更新界面的效果,此时要使用以下 方法,将界面改成已修改的效果 fire Property Change(lEditorPart PROP DIRTY) ◆ is SaveAsAllowedo:是否允许全部保存 ◆ dosaveAso:另存为时调用的方法 ◆ do SaveD:保存时调用的方法。本例中,当保存编辑器时设置在状态栏中显示 相应的进度,如图23.16所示。其中使用 monitor对象就可以了,有关进度条 的使用方法请读者参阅上文有关 JFace的部分 日e110ECP 黄于 心鲁●。 门开国器22 区 显示保存的调度 已元4D保存文件 温 图23.16保存时显示保存进度效果 ● setFocusO):设置编辑器激活时焦点所在的控件 23.3.3打开编辑器 与视图不同,视图不能直接显示到透视图的某一个区域,而是由一项操作所打开的 通常使用 I WorkbenchPage的以下两种方法: a open Editor(IEditorlnput input, String editorld):其中 Input对象为打开文件器时所指 定输入到编辑器的内容,为了实现 IEditorlnput接口的类, editora则为编辑器的唯 标识 第23章RCP开发 489 open Editor(IEditorInput input, String editorId, boolean activate):其中, activate表示是 否打开后并激活该编辑器。 本例中所创建的实现了接口的类为 JsEditorInput类。该类的具体代码如下: JsEditorInput. java package com. fengmanfei. myrcp editors import org. eclipse. ui. IEditorinput,9e import org. eclipse jface resource Image Descriptor, import org. eclipse. ui. IPersistable Element: import myRCP. MyRCPPlugin public class JsEditorInput implements lEditorInput ∥输入的字符 private String input; public Js EditorInput( String input M this input =input ∥是否将编辑器保存在最近访问的记录中 public boolean exists(( return true: /输偷入内容的图标 public Image Descriptor getImage Descriptor()I return MyRCPPlugin getImage Descriptor("icon/sample.gif ) 输入信息的名称 public String getName()( return input ∥是否可以持久化该编辑器 public IPersistable Element getPersistableO( return null. ∥设置编辑器标签中显示提示信息 public String getToolTip Texto( return input 返回与该输入相关的类的对象 public Object getAdapter(Class adapter)( return null. 这些方法都是 EditorInput接口中的方法。另外除了可以自己创建实现该接口的类外, dipe中已经有一些实现了该接口的类,可以直接使用或者是通过继承的方法。这些类如 217所示 490 Eclipse Sw/Face核心应用 u里 ds Earle C waltiEdikorInpnt G onEittingileLdi terIeput G tolcoseEdi tor Imput 0 IPathEdi terInput ee rileEditortn c FleInPlaceEdi tor Input G farslileEa ter Input 白0工n1 aetas talent C Fil.I-Plseatai terIrput 白0 SHgrareldi torInpet 0 Iril. torn Be Fil+EditorInput ⊙Ti1 nPlaceldi toring 图23.17 Eclipse中已实现的 EditorInput接口的类 创建了打开编辑器输入内容的类,也有了对应的编辑器,就可以打开编辑器了。要想 打开编辑器,还需要创建一个视图,视图中放置一个列表List,然后单击列表中的一项来打 开编辑器。按照前面创建视图的方法定义 plugin.xm和对应类。 plugin.xml文件中的配置代码如下: ≤ew class="com. fengmanfei myrcp. views. OpenEditorView icon="icons/samples. gif id=com. fengmanfei. myrcp views OpenEditorview name="打开编辑器"/> 对应的视图类如下 OpenEditorView java package com. fengmantel.myrcp views import org. eclipse swt SWT import org.eclipse. swt. events. SelectionAdapte import org. eclipse. swt events. Selection Event, import org. eclipse, swt widgets. Composite; import org. eclipse. swt widgets. List import org eclipse. ui. IWorkbenchPage import org. eclipse. ui. PartInitException import org. eclipse, ui part View Part; import com. fengmanfei. myrcp. editors. JsEditor import com. fengmanfei, myrcp. editors, Js EditorInput public class OpenEditorview extends View Part public static final String ID="com. fengmanfei, myrcp views OpenEditor'View public List list: public OpenEditor View()I super(). public void createPartControl(Composite parent)( list=new List(parent, SWT. NONE) list add(Editor): list. add(MutiPage Editor) list, add("Form Editor ) 第23章RCP开发 491 list. addSelectionListener(new SelectionAdapter() public void widget Selected(Selection Event e)( String select= list, get Selection[O: 获得当前激活的 Workbench Page对象 IWorkbenchPage page getViewSite()-getworkbench Window().GetActive PageO) f( select equals(" Editor)如果选中“ Editor项 ∥创建输入的内容对象 JsEditorInput editor new Js Editorlnput(select) ∥打开该编辑器 page. openEditor(editor, JsEditor. ID) catch(PartInitException ee) eeprintStackTrace( public void setFocus)( list. setFocus(, 这里,打开编辑器的代码主要在事件处理部分。 2334添加编辑器的菜单和工具栏 对于编辑器,也可以设置编辑器所对应的菜单、工具栏和上下文菜单。图23.18所示为 辑器激活时,该编辑器所使用的菜单和工具栏为可用状态。图23.19所示为编辑器未激活 时,菜单和工具栏都处于不可用状态。 a Bell RCP ■ ello RCl 器单 Coddenu () Tro Henu nase RS 共于 口唱 Hiter Part Editor 编辑器未最活时,菜单和工具 栏 器活时,棄单和工 老不可用 图23.18编辑器已激活时 图23.19编辑器未激活时 要想实现这样的效果,首先要配置该编辑器设置 contributorClass属性,该属性对应 1个a类,本例中对应的是 com.fengmanfei. myrcpeditors.JsEditorContributor类 该属性对 492 Eclipse SWT/JFace核心应用 应的类必须是实现了 IEditor Action BarContributor接口的类,而 Editor Action BarContributo 类已经实现了该类,所以 Js EditorContributor类通过继承 Editor Action BarContributor 的方法 来实现。该类具体的代码如下: Js Editor Contributor. java package com. fengmanfei. myrcp editors import org.eclipse jface action Action import org. eclipse jface, action. IMenuManager: import org. eclipse jface action. IToolBarManager: import org. eclipse, jface, action, MenuManager import org. eclipse. ui. ISharedlmages, import org eclipse. ui. PlatformUI import org. eclipse. ui part. EditorAction Contributor public class JsEditor Contributor extends EditorActionBarContributor private Action action1 private Action action2 public Js Editor Contributor) super() makeActions( public void makeActions(( action1= new Action0 public void run(I action1 setText( Action 1), action1. setToolTip Text("Action 1 tooltip") action1. setlmageDescriptor(PlatformUI getWorkbench()-getSharedlmages( getimage Descriptor(ISharedImages IMG DEF VIEW) action2=new Action( public void run() } action2. setText("Action 2); action2.setToolTip Text("Action 2 tooltip") action2. setlmageDescriptor( PlatformUI getWorkbench(). getSharedlmages() getlmageDescriptor(ISharedImages IMG OBJS WARN TSK)); ∥覆盖父类中的方法,创建菜单 public void contribute ToMenu(IMenuManager menuManager)i MenuManager editMenu= new MenuManager("编辑器菜单") editMenu, add( action1 )

...展开详情
试读 36P Eclipse_Swt_Jface_核心应用_部分15
立即下载 身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
liushaofeng89 少了一部分。唯一的遗憾……
2013-11-22
回复
sunshineoflife 拍的一般,分太多了,下的麻烦
2013-01-11
回复
lzqlyc 分卷,内容很齐全,就是下载太累了
2012-10-15
回复
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
  • 分享宗师

关注 私信
上传资源赚钱or赚积分
最新推荐
Eclipse_Swt_Jface_核心应用_部分15 9积分/C币 立即下载
1/36
Eclipse_Swt_Jface_核心应用_部分15第1页
Eclipse_Swt_Jface_核心应用_部分15第2页
Eclipse_Swt_Jface_核心应用_部分15第3页
Eclipse_Swt_Jface_核心应用_部分15第4页
Eclipse_Swt_Jface_核心应用_部分15第5页
Eclipse_Swt_Jface_核心应用_部分15第6页
Eclipse_Swt_Jface_核心应用_部分15第7页
Eclipse_Swt_Jface_核心应用_部分15第8页

试读结束, 可继续读3页

9积分/C币 立即下载