- 浏览: 241697 次
- 性别:
- 来自: 济南
文章分类
最新评论
-
heartneo:
破解原作真是太厉害了。
Spket 1.6.18的简单破解 -
mwp1115:
谢谢,现在官方的demo代码还是jdk1.2的
Swing JTreeTable范例 -
bulktree:
Spket 谢谢了,js格式化 行宽太小了,你这个帮了我很大的 ...
Spket 1.6.18的简单破解 -
REGAL2T:
谢谢, 可以使用了
Spket 1.6.18的简单破解 -
wuwei1616:
我想问下lz 我生成了 wsdl文件 我用客户端去调用 怎么总 ...
调用CXF工具 生成 WSDL
来自:http://hi.baidu.com/shiytower/blog/item/b8cc705869322584800a1885.html |
Eclipse的每个视图(View)都有自己的菜单和工具条,View通过与自己相关的IViewSite对象与这些东西打交道,确切的说,是通过这个IViewSite对象的IActionBars对象来管理,ActionBars对象负责菜单、工具条和状态栏。 一个典型的View(继承org.eclipse.ui.part.ViewPart)的代码结构会是这样,作为例子,假设我们有三个功能项: Open、Remove和Reload,我们的View是一个简单的表格TableViewer,里面显示一些条目列表,允许用户进行多选:
TableViewer tvResult;
OpenAction openAction;
RemoveAction removeAction;
ReloadAction reloadAction;
public
void
createPartControl(Composite parent) {
// 创建视图界面 // 创建菜单 createActions(); createMenu(); createContextMenu(); createToolbar(); hookGlobalActions(); }
其中,createActions()是创建必要的IAction对象,这些对象可用在菜单、工具条里;createMenu()的作用是把刚刚创 建的IAction对象放进与View相关的MenuManager里,就像前面所说,MenuManager可以通过getViewSite(). getActionBars().getMenuManager()方法得到;createToolbar()则是把同样的对象放在工具条里,获得工具条 的方法与菜单类似;createContextMenu()则是建立鼠标右键触发的上下文菜单,方法是建立一个新的MenuManager,然后由它建立 一个Menu对象,再将Menu对象与控件联系;hookGlobalActions()的作用是把IAction对象与系统菜单(而不是View菜单联 系),达到同一菜单项对不同View具有不同响应的效果。下面来看一下具体代码:
package net.sf.solo.actions;
import java.io.IOException; import java.util.Iterator; import net.sf.solo.model.IInstance; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; public class OpenAction extends Action implements ISelectionChangedListener { IStructuredSelection selection; public OpenAction() { setEnabled( false ); } public void run() { for (Iterator iter = selection.iterator(); iter.hasNext();) { IInstance ins = (IInstance) iter.next(); try { // TODO Only in windows can do this. Runtime.getRuntime().exec( " cmd /E:ON /c start " + ins.getReferenceURL()); } catch (IOException e) { e.printStackTrace(); } } } public void selectionChanged(SelectionChangedEvent event) { selection = (IStructuredSelection) event.getSelection(); setEnabled(selection.size() > 0 ); } public String getText() { return " &Open in browser " ; } }
上面是一个例子IAction,它的作用是在触发时将用户选中的条目在浏览器里打开。这个类同时还实现了 ISelectionChangeAction,这样就可以在用户没有选中任何条目的时候将自己变为不可用。当然,你要把它作为监听器加入某个列表对象的 监听器列表,像下面代码里这样:
private
void
createActions() {
openAction = new OpenAction(); removeAction = new RemoveAction(tvResult); reloadAction = new ReloadAction(tvResult); tvResult.addSelectionChangedListener(openAction); tvResult.addSelectionChangedListener(removeAction); tvResult.addSelectionChangedListener(reloadAction); }
注意,最后的三句就是加入监听列表的功能。有些IAction需要改变所监听对象(比如一个TableViewer)的行为,所以要把那个对象作为参数传递给它才行。下面是把IAction对象加入菜单的代码:
private
void
createMenu() {
IMenuManager mgr = getViewSite().getActionBars().getMenuManager(); mgr.add(openAction); mgr.add(removeAction); mgr.add(reloadAction); }
把IAction对象加到工具条的代码几乎完全一样,只是第一句有所不同:
private
void
createMenu() {
IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager(); mgr.add(openAction); mgr.add(removeAction); mgr.add(reloadAction); }
上下文菜单就显得有些麻烦了,因为View并没有一个“PopupMenuManager”这样的东西,所以我们只能半手动的来建立:
private
void
createContextMenu() {
MenuManager mgr = new MenuManager(); mgr.setRemoveAllWhenShown( true ); mgr.addMenuListener( new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { fillContextMenu(manager); } }); Menu menu = mgr.createContextMenu(tvResult.getControl()); tvResult.getControl().setMenu(menu); getSite().registerContextMenu(mgr, tvResult); }
这个MenuManager和我们在createMenu()里通过getMenuManager()得到的是同一个类(但不是同一个实例哦), setRemoveAllWhenShown(true)的作用是清空以前显示的菜单项,当触发了menu事件时,重新填充 (fillContextMenu),所以如果你不把removeAllWhenShow置为true的话,每点一下右键你就会看到菜单项多出一倍来。 Menu是swt的控件(刚才说的MenuManager、ToolbarManager都是jface里的东西,jface给swt包了一层),用 MenuManager可以创建出一个Menu对象,然后我们用表格的setMenu方法将表格控件与Menu控件联系在一起就好了。 最后还有一句,它是为扩展这个上下文菜单用的,例如你可以在plugin.xml里统一指定给某种类型的元素都加上某个菜单项(例如,如果用户选中 了一个.zip文件,会多出一个“解压缩”选项)。那么新加的菜单项会出现在上下文菜单的哪里呢,最上方还是最下方,还是……?所以呢,要在 fillContextMenu的时候指定一下:
protected
void
fillContextMenu(IMenuManager manager) {
manager.add(openAction); manager.add(removeAction); manager.add(reloadAction); manager.add( new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS)); }
前三句都没什么特别,最后一句就是指定了上面我们说的这个“增加点”,这样,你想让后来的菜单放在哪里都行了。 最后,Eclipse的Workbench提供了一些比较通用的系统菜单项,如下:
public static final String [] GLOBAL_ACTIONS
=
{
UNDO, REDO, CUT, COPY, PASTE, PRINT, DELETE, FIND, SELECT_ALL, BOOKMARK };
当你的焦点在不同的View或Editor里时,同一个系统菜单项会有不同的作用产生。例如在文本编辑器中delete项是删除当前选中的文字,而 在你的视图里,你希望delete的作用是删除用户选中的表格条目,刚好是removeAction的功能。所以你要把你的IAction对象和系统菜单 挂在一起:
private
void
hookGlobalActions() {
IActionBars bars = getViewSite().getActionBars();
bars.setGlobalActionHandler(IWorkbenchActionConstants.DELETE, removeAction); }
注意,要选择语义上比较相近的系统菜单项来挂接,否则会造成用户的困扰。比如你非要把COPY实现为openAction,当用户在系统菜单里选了copy命令,本以为会把当前选中的条目复制到剪贴板,你却给人家打开了这些条目,多滑稽。 好了,菜单方面基本上就这些内容。可以看出,Eclipse的Workbench的确为我们提供了很多方便,特别是如果能够灵活利用plugin来进行定义,不仅可以节约大量的代码,还能让我们始终保持对系统的掌握。所以说,RCP的风行可不是没有道理哦。 |
发表评论
-
目录树的生成
2011-09-22 08:54 1393项目上线需要生成个目录树文件,本来可以用dos的tree就搞定 ... -
Eclipse Tip: Define Custom Content Types to Identify Your Data Files
2010-06-13 08:53 1215【转自】http://www.developer.com/ja ... -
WTP Facet 之 AddFilter
2010-06-11 14:22 1260做插件开发的人员都知道,如果你不晓得该使用那个Eclipse提 ... -
Properties文件的读写 : Properties操作示例
2010-04-21 14:19 1527package properties; import j ... -
wizardPage参考
2010-04-15 13:23 2514插件向导开发最好的例子莫过于Eclipse中本身一些向导,但如 ... -
如何访问当前Project???
2010-04-14 08:27 1126【转】http://wiki.eclipse.org/FAQ_ ... -
How to create dynamic web project using facets
2010-03-22 08:51 1487To create a blank faceted proje ... -
Introduction to the XSD Editor(XML Schema Editor)
2010-03-13 16:46 1356By Trung Ha August 30, 2006 ... -
同类编辑器只能打开一个
2010-02-23 13:28 1293在(http://sxw7362693.iteye.com/b ... -
通过事件驱动,创建不同的部件
2010-02-20 15:43 1073非常easy的东西,就是先dispose再create。 ... -
Tree Check 带复选框的树
2009-08-25 13:23 7700在SWT/JFace中,带复选框树最好使用Contain ... -
Swing JTreeTable范例
2009-08-21 13:48 3039由于工作需要,看了一点Swing的JtreeTable的实现。 ... -
SWT/JFACE——toolbar/toolItem
2009-04-23 22:47 10813工具栏通常有两种: toolbar、coolBar。两者的区 ... -
SWT-Menu篇
2009-04-23 17:12 3308今天用到Menu,本以为小菜一碟,都是老掉牙的东东了还不简单。 ... -
Eclipse.ini参数意义
2009-04-16 17:34 827eclipse.ini内存设置各参数含义 ... -
Editor的脏处理
2009-03-11 21:05 1718做编辑器Editor插件,肯定离不开对“脏”的处理。以前虽然也 ... -
SWT-Table按“行“进行编辑
2009-03-11 10:24 4694package table; /* * 通常在一个表 ... -
读取properties文件
2008-11-27 10:26 1840在 武晨伟的博客 http://blog.csdn.n ... -
移除Builders
2008-08-15 09:36 905public static void removeBuild ... -
Java项目classPath的添加
2008-08-15 09:28 3640// import org.eclipse.jem.workb ...
相关推荐
在VC++环境下,开发具有用户友好界面的应用程序是常见的任务,而菜单和工具栏作为用户交互的主要元素,其设计和动态修改技术显得尤为重要。本文将深入探讨如何在VC++中实现菜单和工具栏的动态创建、修改以及响应事件...
在VBA中,我们可以访问和操作菜单和工具栏,以便更好地控制和定制Office环境。本文将详细介绍如何使用VBA来提取菜单和工具栏的ID号,并解释这些ID号在编程中的重要性。 首先,菜单和工具栏是Office用户界面的核心...
Java 菜单和工具栏界面代码设计 Java 菜单和工具栏界面代码设计是基于 Java 语言实现的图形用户界面(GUI)设计,旨在创建一个简洁且实用的菜单和工具栏界面。下面是相关知识点的总结: 一、Java 菜单设计 在 ...
在VC++编程环境中,创建和使用菜单以及工具栏是构建用户界面的重要部分。这个"简单的vc菜单和工具栏"程序示例,对于初次接触VC++的开发者来说,是一份非常实用的学习资源。在这个项目中,我们将深入理解菜单和工具栏...
在C#编程环境中,创建和管理菜单和工具栏是构建用户界面(UI)的重要部分。AE,通常指的是Adobe After Effects,但在这个上下文中,可能是表示一个特定的项目或框架,而不是实际的软件。由于没有提供具体的文件内容...
Matlab GUI 菜单和工具栏常用操作 Matlab GUI 中的菜单和工具栏是两个重要的组件,它们可以帮助用户实现各种交互操作。以下是 Matlab GUI 中菜单和工具栏的常用操作。 菜单 在 Matlab GUI 中,菜单是指位于图形...
- 菜单项和工具栏图标则可以在菜单和工具栏的设计界面中,为每个项选择相应的图标资源。 3. **菜单和工具栏设计**: - **菜单**:Windows菜单通常包括文件、编辑、查看等标准选项,开发者可以根据应用需求自定义...
计算机外文翻译-菜单和工具栏大学论文 本文档是关于计算机科学与技术专业的一篇毕业设计论文,讨论了菜单和工具栏在Java Swing中的应用。文章首先介绍了JMenuBar类,它是AWTMenuBar类的升级版本,用于创建水平菜单...
C# AE 菜单和工具栏代码.zip 特效
在本文中,我们将深入探讨如何在EVC(Embedded Visual C++)环境中,基于Dialog工程创建并集成菜单和工具栏。EVC是微软为Windows CE操作系统开发应用程序时使用的一种集成开发环境,它允许开发者使用C++语言进行编程...
零散MATLAB资料分享-Matlab GUI 菜单和工具栏常用操作.doc 最近在用MATLAB做一个项目,自然需要查很多东西,在网上搜集了一点资料,并非原创。本着分享的精神,希望能帮助到部分人。 包括以下内容 在...
操作Excel菜单和工具栏.zip源码EXCEL VBA宏编程Excel VBA实用技巧范例下载操作Excel菜单和工具栏.zip源码EXCEL VBA宏编程Excel VBA实用技巧范例下载操作Excel菜单和工具栏.zip源码EXCEL VBA宏编程Excel VBA实用技巧...
获取Excel菜单和工具栏信息.zip源码EXCEL VBA宏编程Excel VBA实用技巧范例下载获取Excel菜单和工具栏信息.zip源码EXCEL VBA宏编程Excel VBA实用技巧范例下载获取Excel菜单和工具栏信息.zip源码EXCEL VBA宏编程Excel ...
本文将详细讲解如何在MATLAB GUI中创建和管理菜单以及工具栏。 1. **创建和编辑菜单** 在MATLAB中,可以使用GUIDE (Graphical User Interface Development Environment)来创建GUI,并通过菜单编辑器来设计和编辑...
### Excel VBA 常用技巧:菜单和工具栏 #### 技巧1:在菜单中添加菜单项 在Excel的VBA环境中,用户可以通过编程的方式来自定义菜单栏中的选项,以此来增强软件的功能性或者简化操作流程。下面将详细介绍如何在...
在EXTJS开发中,按钮、菜单和工具栏是构建用户界面的关键元素,它们提供了丰富的交互性和可定制性。本章主要介绍EXTJS中关于这些元素的使用和配置。 1. Shortcuts(快捷方式) EXTJS提供了一系列的快捷方式来简化...
这个“Excel-VBA实用技巧范例-操作Excel菜单和工具栏.zip”压缩包文件显然提供了关于如何使用VBA来操控Excel菜单和工具栏的实例和教程。以下是关于这一主题的详细知识: 1. **VBA基础**: - VBA是基于Visual Basic...
标题中的“VC源码-漂亮的菜单和工具条,可以加图标、彩条、支持Office风格”指的是使用Visual C++(VC)开发的一种源代码,它实现了具有美观效果的菜单和工具条功能。这个源码特别之处在于它可以添加图标,使用彩条...
`CommandBars`集合包含了所有可用的命令栏,包括菜单、工具栏和快捷菜单。你可以通过`Application.CommandBars`访问这个集合,然后根据名称或者ID找到特定的命令栏。例如,获取主菜单可以使用以下代码: ```vba Dim...