问题描述:
在Eclipse插件开发过程中,都会涉及到“弹出对话框”的问题,今天偶然发现了一个现象:弹出的对话框打开后,再按ESC键,对话框自动就关闭了。后来发现在Eclipse中也是一样的。比如创建一个类的时候,弹出对话框以后按ESC,对话框就直接关闭了。这样设计主要是为了方便用户,可是当我们不需要这样的效果的时候,应该怎么做呢?
问题分析:
在Eclipse中,在键盘上按下的每一个键,都会触发相应的事件,Eclipse拦截到事件后,再进行后续的处理。再回到我们上面提到的问题: 既然对话框是在按ESC键后关闭的,那我们很自然的想到:如果能够屏蔽按下ESC键触发的事件,对话框应该就不会关闭了。
解决方案:
经过上面的分析,问题已经清楚了:为了解决这个问题,我们需要搞定下面的两件事儿:
1、找到按ESC时触发的事件;
2、拦截这个事件,不让事件生效(相当于用户没按ESC)。
感谢万能的Google大神,我们找到了这个接口:TraverseListener。上源码:
/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.swt.events; import org.eclipse.swt.internal.SWTEventListener; /** * Classes which implement this interface provide a method * that deals with the events that are generated when a * traverse event occurs in a control. * <p> * After creating an instance of a class that implements * this interface it can be added to a control using the * <code>addTraverseListener</code> method and removed using * the <code>removeTraverseListener</code> method. When a * traverse event occurs in a control, the keyTraversed method * will be invoked. * </p> * * @see TraverseEvent */ public interface TraverseListener extends SWTEventListener { /** * Sent when a traverse event occurs in a control. * <p> * A traverse event occurs when the user presses a traversal * key. Traversal keys are typically tab and arrow keys, along * with certain other keys on some platforms. Traversal key * constants beginning with <code>TRAVERSE_</code> are defined * in the <code>SWT</code> class. * </p> * * @param e an event containing information about the traverse */ public void keyTraversed(TraverseEvent e); }
从描述中可以看出,这个接口是专门用来监听特殊按键的。具体的信息大家可以自己去看SWT的源码。
第一个问题已经解决,我们看看怎么样拦截ESC:
public void keyTraversed(TraverseEvent e) { if(e.detail == SWT.TRAVERSE_ESCAPE){ e.doit = false; } }
根据detai可以判断出来按下的是ESC,然后将doti设定为false就可以了。
拦截ESC的代码已经有了,还剩最后一个问题:监听器只有注册了之后才能生效,那这个监听器我们在哪里注册呢?
还是看源码,在面板类Composite以及Shell中,提供了接口addTraverseListener,通过这个借口,我们就可以注册监听器了。
总结:
1、在创建页面的时候,我们可以在将监听器注册到根面板(root composite)中;
2、如果页面是通过继承Dialog类来实现,可以在createDialogArea方法中注册监听;
3、如果页面作为向导页(继承WizardPage),可以在createControl方法中注册监听。
声明:
文章来自于ITeye,欢迎访问我的博客:xiaoyu1985ban.iteye.com
ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者。
相关推荐
在Eclipse插件开发中,查找(Search)功能是一个至关重要的部分,它允许开发者在庞大的代码库中快速定位和检索特定的信息。深入理解这一功能及其扩展点对于提升开发效率和优化开发体验至关重要。本文将详细探讨...
开发插件时,我们通常需要在PDE中编写Java代码,创建用户界面,定义扩展点,以及处理用户输入。 Eclipse插件开发的另一个重要方面是掌握Eclipse工作台(Workbench)的扩展。Eclipse工作台是Eclipse IDE的用户界面...
Eclipse插件开发中的查找(Search)功能及扩展点涉及到以下知识点: 1. Eclipse查找功能的重要性:Eclipse作为一款流行的集成开发环境(IDE),其查找功能对于开发者来说是一个非常重要的特性。它不仅支持基本的...
【Eclipse插件系列——SQLExplorer插件的安装和使用】 Eclipse是一个广泛使用的开源集成开发环境(IDE),尤其在Java编程中应用广泛。为了增强其功能,Eclipse支持安装各种插件,其中SQLExplorer就是一个非常实用的...
本文将深入探讨Eclipse插件开发的相关知识点,结合提供的"全书分为4篇共24章"的学习笔记和源码,帮助你更全面地理解和实践Eclipse插件开发。 第一篇:基础篇 在这一篇中,你将学习到Eclipse插件开发的基础知识,...
### Eclipse插件开发指南知识点概览 #### 一、Eclipse概述 **1.1 Eclipse简介** - **1.1.1 Eclipse的历史背景** - Eclipse最初由IBM于2001年11月发布,版本号为1.0。 - 随着时间的发展,Eclipse逐渐成为了一个...
《Eclipse插件开发(第3版 - 高清)》是关于Eclipse平台扩展开发的一本经典著作,由[美] Dan Rubel撰写,并由陈沛等人翻译,ISBN为978-7-111-30336-7。这本书深入浅出地介绍了如何利用Java、SWT和JFace技术来构建...
从提供的文件内容中,我们可以提取出关于Eclipse插件开发的多个知识点。 首先,Eclipse是一个用Java编写的开源集成开发环境(IDE),而Eclipse插件开发是指通过编写插件来扩展Eclipse的功能,实现从一个基本的代码...
Eclipse是一款广泛使用的开源集成开发环境(IDE),其强大的可扩展性主要体现在丰富的插件系统。本资料包包含了从基础到高级的Eclipse插件开发教程,覆盖了开发过程中的关键知识点,旨在帮助开发者深入理解和实践...
通过学习《Eclipse插件开发方法与实战》,开发者可以掌握插件开发的核心知识,并能够根据自己的需求开发出实用的插件,从而提升个人和团队的开发效率,丰富Eclipse这一强大的开发平台。同时,对于有志于参与开源项目...
10. **调试支持**:Eclipse的调试框架允许开发插件以扩展调试功能,如添加新的断点类型或提供自定义调试视图。 通过深入学习和实践Eclipse插件开发教程PPT中的内容,开发者不仅可以提升自身技能,还能更好地利用...
《Eclipse插件开发》由浅入深、有重点、有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章。第一篇介绍Eclipse平台界面开发的基础知识,包括SWT控件的使用、界面布局、事件处理等内容;第二篇是插件开发核心...
标题中的“Eclipse插件开发方法与实战”告诉我们文档的主题是关于Eclipse这个集成开发环境(IDE)的插件开发。Eclipse是一个功能强大的开源IDE,最初由IBM开发,用于Java语言开发,但后来支持了其他多种编程语言和开发...
《Eclipse插件开发(原书第3版)(畅销插件开发指南新版)》主要介绍了开发Eclipse商业插件的完整过程,并从标准窗口小部件工具集、命令与操作、视图、透视图、实现帮助、国际化等方面对创建Eclipse商业插件进行了详细...
3. "Eclipse入门--Eclipse的使用简介及插件开发.pdf":适合初学者,介绍Eclipse基本操作和初步的插件开发概念。 4. "Eclipse-plugin_插件开发.ppt":可能是PPT形式的讲解材料,包含插件开发的重点和难点。 总之,...
《Eclipse插件开发(原书第3版)(畅销插件开发指南新版)》主要介绍了开发Eclipse商业插件的完整过程,并从标准窗口小部件工具集、命令与操作、视图、透视图、实现帮助、国际化等方面对创建Eclipse商业插件进行了详细...
《Eclipse插件开发学习笔记》PDF 高清版
本书由浅入深、有重点、有针对性地介绍了Eclipse插件开发技术,全书分为4篇共24章。第一篇介绍Eclipse平台界面开发的基础知识,包括SWT控件的使用、界面布局、事件处理等内容;第二篇是插件开发核心技术,主要介绍...
Eclipse插件开发中编辑器代码的定位、背景色改变、高亮