`
junjie.li1985
  • 浏览: 50385 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于GEF在Editor里响应SelectAll快捷键的问题

    博客分类:
  • GEF
阅读更多

最近在学习GEF-whole-upload那本书,在模仿书上例子的过程中,想给里面的图形编辑器增加一些快捷键,比如Ctrl+A(全选图
形),Ctrl+S(保存)等等。

最初的想法是再Editor的setKeyHandler方法里面,使用KeyStroke类,注册Ctrl+A,Ctrl+S等键盘事件:
private void setKeyHandler() {
        KeyHandler keyHandler = new KeyHandler();
                ...
        keyHandler.put(KeyStroke.getPressed('a', 0x1, SWT.CTRL),

getActionRegistry().getAction(ActionFactory.SELECT_ALL.getId()));
        getGraphicalViewer().setKeyHandler(
                        new GraphicalViewerKeyHandler(getGraphicalViewer())
                                        .setParent(keyHandler));

 

}

但是经过试验,这种方法无法响应Ctrl+A事件。具体原因不清楚,上网查了很多资料得不到解答。后来和傻鸟大哥讨论了一下这个问题,他认为是有更高级
的注册机制存在,屏蔽了以这种形式注册的Ctrl+A事件的响应。

今天咖啡老大刚好有空,向他请教了这个问题,终于得到解决的方法。(老大果然厉害!万分感谢!)

具体的解决方法如下:

1. 修改ApplicationActionBarAdvisor.java:在makeActions方法里面添加:
selectAll = ActionFactory.SELECT_ALL.create(window);
register(selectAll);

2. 给Editor增加一个getAction的方法:
public IAction getAction(String key) {
        return getActionRegistry().getAction(key);

 

}

3. 再在DiagramActionBarContributor.java里面的setActiveEditor方法中添加:
actionBars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(),
action);
actionBars.updateActionBars();

注意:actionBars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(),
action) 的第二个参数action是需要通过Editor来获取的。因此,最后
DiagramActionBarContributor.java文件的修改为:

protected IAction getAction(IEditorPart editor, String actionID) {
        if (editor instanceof DiagramEditor) {
            return ((DiagramEditor) editor).getAction(actionID);
        }

        return null;

 

}

public void setActiveEditor(IEditorPart activeEditor) {
        IActionBars actionBars = this.getActionBars();
        actionBars.setGlobalActionHandler(ActionFactory.SELECT_ALL.getId(),
getAction(activeEditor, ActionFactory.SELECT_ALL.getId()));
        actionBars.updateActionBars();

 

}

到此为止,图形编辑器可以响应Ctrl+A实现全选。

分享到:
评论
1 楼 lggege 2008-09-11  
是可以的.
见: http://lggege.iteye.com/blog/240499

问题在你的这一句:
keyHandler.put(KeyStroke.getPressed('a', 0x1, SWT.CTRL),


可用的代码如下:
keyHandler.put(KeyStroke.getReleased('', 97, SWT.CTRL),



getPressed 和 getReleased 是有区别的.

相关推荐

    Eclipse HTML Editor GEF安装

    - 在该页面上,选择适合你当前 Eclipse 版本的 GEF-ALL-XX.zip 文件进行下载。XX 表示版本号,确保它与你的 Eclipse 版本兼容。 - 下载完成后,解压缩 ZIP 文件,将解压得到的 `eclipse` 目录下的两个文件夹复制到...

    GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料

    【GEF-ALL-3.7+GEF-ALL-3.8+GEF_Draw2d学习资料】是一份综合性的资源包,包含了GEF(Graphical Editing Framework)的3.7和3.8版本以及与其相关的Draw2D库的学习材料。GEF是Eclipse平台上用于构建图形化编辑器框架的...

    visual editor gef 3.6

    "Visual Editor GEF 3.6" 是一个针对Eclipse集成开发环境(IDE)的插件,主要用于图形化地构建和编辑应用程序。GEF(Graphical Editing Framework)是Eclipse平台的一部分,它提供了一个框架,使得开发者能够创建...

    GEF简易教程-学习GEF的入门教程

    在RCP项目中,**Editor**是最常见的GEF承载对象,它继承自`EditorPart`,提供了图形修改后的自动保存机制,这是View不具备的功能。 为了构建GEF编辑器,需要创建以下三个核心组件: 1. **模型(Model)**:定义数据...

    Eclipse插件开发:GEF入门系列宝典_gef_

    由于工作的需要,最近开始研究GEF(Graphical Editor Framework)这个框架,它可以用来给用户提供图形化编辑模型的功能,从而提升用户体验,典型的应用如图形化的流程设计器、UML类图编辑器等等。

    gef版本的helloworld

    4. 关于Editor和View的区别:文档中提到,虽然GEF可以建立在Eclipse的View中,但是通常建议建立在Editor中,因为Editor提供了文件保存的机制。这里暗示了View和Editor之间的区别,但具体内容需要读者进一步查阅相关...

    GEF-ALL-3.4.2(1).zip

    标题中的"GEF-ALL-3.4.2(1)"指的是该压缩包包含的是GEF框架的版本3.4.2的一个特定构建,可能是包含了一些增强或修复的版本。 GEF的核心设计理念是将图形编辑器的实现分解为一系列可重用的组件,这些组件可以组合...

    自己下的GEF资源打包

    标题中的“GEF资源打包”指的是一个集合了关于GEF(Graph Edit Framework)的各种学习资料的压缩文件。这个资源包可能包含了对理解、学习和使用GEF非常有帮助的材料。描述进一步说明了这个包中包含的具体内容,如...

    GEF-ALL-3.6.2.zip

    标题中的"GEF-ALL-3.6.2.zip"是指通用图形编辑框架(Generalized Eclipse Framework)的一个版本,这是Eclipse平台上的一个开源项目,主要用于构建图形化用户界面,尤其是设计和实现图形编辑工具。这个3.6.2版本可能是...

    gef all 3.5.2 源码

    Gef All 3.5.2 版本可能包含了一些新的特性、修复了已知问题,提升了整体性能和用户体验。 在源码包中,你将找到以下关键部分: 1. **核心模块**:这部分代码实现了Gef All的基本架构和核心功能,包括与GDB的交互...

    GEF_Demo_Code20170307

    这个项目旨在演示如何利用GEF进行图形界面开发,并且特别关注了通过适配器(Adapter)扩展点来实现属性页配置以及在非Editor的ViewPart中使用GEF。 GEF是Eclipse平台下的一个开源库,专门用于构建可自定义的、图形...

    GEF-ALL-3.1.zip

    GEF-ALL-3.1.zip是一个包含了GEF框架3.1版本的压缩包,它通常用于开发者在Eclipse环境中开发图形界面应用程序或工具,特别是那些需要图形化表示和编辑数据的项目。Eclipse是一个开源的集成开发环境(IDE),提供了...

    GEF-ALL-3.2.2

    GEF: Graphical Editing Framework <br>GEF是一套MVC Framework,它能帮你比较容易的...依赖:org.eclipse.draw2d*** 本软件GEF-ALL-3.2.2完整版包含(Draw2D, GEF and Zest) 大小:6.6M 请用于Eclipse3.2.2环境下.

    GEF-ALL-3.3.zip

    标题中的"GEF-ALL-3.3.zip"指的是通用图形编辑框架(General Purpose Editing Framework,简称GEF)的一个版本3.3的压缩包。GEF是Java平台上的一个开源框架,主要用于构建图形用户界面(GUI),特别是用于创建可交互...

    GEF-ALL-3.7.2

    解压GEF-ALL-3.4.1.zip,得到一个eclipse文件夹,打开可看到: 下面有三个文件夹:features,plugins,readme 分别拷贝上面三个文件夹下面的内容把它们对应放到Eclipse安装目录D:\eclipse下面对应的同 名文件夹下...

    GEF实现拷贝粘贴

    5. **监听剪贴板事件**:为了支持系统级别的拷贝和粘贴,你需要监听剪贴板的改变事件,确保当用户使用系统菜单或者快捷键进行拷贝和粘贴时,GEF能够正确响应。 6. **UI反馈**:确保在执行CopyCommand和PasteCommand...

    GEF-ALL-3.10.1.zip

    标题中的"GEF-ALL-3.10.1.zip"指的是Graphical Editing Framework (GEF) 的全集,版本为3.10.1,它是一个被压缩的文件包。GEF是Eclipse框架下用于创建图形化用户界面(GUI)的开源库,特别适用于开发基于模型的可视...

    GEF快速入门教程和EMF教程

    通过此教程,读者能够理解GEF的基本架构以及如何在Eclipse RCP应用中集成GEF。 ### 前提条件 在开始之前,请确保您的开发环境符合以下要求: - **操作系统**: Windows XP (Windows 2000用户可能遇到问题,将在...

    GEF开发指南---插件开发

    - **Editor类的创建**:文档提到了如何在`gef.tutorial.step.ui`包中创建Editor类。这通常涉及到从`org.eclipse.ui.part.EditorPart`类继承,并实现必要的方法来支持图形编辑功能。 - **图形绘制**:文档虽然没有...

Global site tag (gtag.js) - Google Analytics