Eclipse RCP command和handler

阅读数:146 评论数:0

跳转到新版页面

分类

python/Java

正文

Eclipse application model允许你指定command和handlers。

command和handlers model element的使用是可选的,你可以使用Direct MenuItem或Direct ToolItem model elements。它们定义了对类(handler class)的引用。框架会创建handler的实例,在必要的时候由框架调用其中的注解方法。

一个command就是执行的抽象行为的陈述性行为描述,例如save、edit或copy。Eclipse framework不提供标准的commands。

一个command的行为通过handler定义,一个handler model element指向一个handler class(通过contributionURI属性指定)。

commands被Handled MenuItem和Handled ToolItem model elements使用。

handler的注解和依赖注入

在一个handler class中,只能有一个方法使用@Execute注解,其它方法可以使用@CanExecute注解,当有多个方法使用@CanExecute注解时,框架只会调用其中的一个。Eclipse 在运行时使用依赖注入来为方法提供参数。

(1)@Execute

用于标记handler class对于行为的响应,框架只执行一次这个方法。例如菜单被选择。

(2)@CanExecute

标记一个方法,这个方法会被Eclipse framework访问来检查这个handler class是否可以被执行。如果返回false,Eclipse会禁用相关的用户接口元素。

package com.vogella.tasks.ui.handlers;

// import statements cut out
// ..

public class ExitHandler {
    @Execute
    public void execute(IWorkbench workbench) {
        workbench.close();
    }

    // NOT REQUIRED IN THIS EXAMPLE
    // just to demonstrates the usage of
    // the annotation
    @CanExecute
    public boolean canExecute() {
        return true;
    }

}

一个handler实例没有它自己的Eclipse context,它一般使用当前活动的model element的context,一般情况下是活动的part的context。

使用@Execute注解的方法需要注入所有需要的参数。

为一个command确定相关的handler

当一个command被选择时,在运行时为command确定相关的handler。application model允许你为application、a window和a part创建一个handler。

每一个command在一个给定的域中只会有一个有效的handler,Eclipse 框架会选择最具体的那个handler。例如,"Copy" command有两个handler,一个用于window,另一个用于part,当用户选择时会使用离当前model element最近的那个handler。

菜单快捷键

对于一个菜单,当用户按下alt+其它键时,可以激活菜单。使用&指定快捷键,例如,如果label是&Save,当按下alt+S时会激活save菜单。

command和handler IDs的命名模式

command和handler的IDs应该反应它们的关系,例如你实现了一个command为com.example.contacts.commands.show ID,你应当为handler命令为com.example.contacts.handler.show。如果一个command有多个handler,可以在ID添加一个后缀,例如com.example.contacts.handler.show.details。

常用command的默认IDs

Command ID
Save org.eclipse.ui.file.save
Save All org.eclipse.ui.file.saveAll
Undo org.eclipse.ui.edit.undo
Redo org.eclipse.ui.edit.redo
Cut org.eclipse.ui.edit.cut
Copy org.eclipse.ui.edit.copy
Paste org.eclipse.ui.edit.paste
Delete org.eclipse.ui.edit.delete
Import org.eclipse.ui.file.import
Export org.eclipse.ui.file.export
Select All org.eclipse.ui.edit.selectAll
About org.eclipse.ui.help.aboutAction
Preferences org.eclipse.ui.window.preferences
Exit org.eclipse.ui.file.exit



相关推荐

Eclipse RCP是Rich Client Platform,即富客户平台,使用者可以使用Java来创建桌面程序,这些应用程序能够得到Eclipse的底层支持。 1、下载</p

运行时,Eclipse 应用的结构是通过一个application model来描述的。这个application model包含了应用中独立的元素和它们的结构关系。 每个mode

每个plug-ins可以通过下面方式作用于application model: (1)static contributions 通过文件,这些扩展称为fragment

1、@javax.inject.Inject 定义在JSR330中 ,可以写在字段、构建函数或方法上,Eclipse 框架试图把相关的对象注入到字段或实例的参数上。

一个Eclipse应用在启动过程时会创建一个实现IEclipseContext接口的对象,这个对象称为Eclipse context。 这个context和Map数据结构类似,但和

1、@PostConstruct 当一个类的构造函数执行,字段和方法都注入后执行。 2、@PreDestroy 类被destroyed前执行,可以用来清

一个Eclipse application的配置包括icons、splash screen和plug-ins。 一个product总是指向一个application class,对

一个feature可以理解为一个逻辑单元,描述了一组plug-in和其它features。它也有name、version number和license information。 f

SWT全称是Standard Widget Toolkit。 Display和Shell Display和Shell类是SWT应用的主要组件,org.eclips

JFace是基于SWT的一组plug-ins,但是JFace不会隐藏SWT的API。JFace提供了viewers框架,它可以简化数据模型和可视化显示的匹配。 JFace也提供了帮