- 浏览: 129713 次
- 性别:
- 来自: 上海
最新评论
-
一叶之源:
总结一下eclipse中的Job机制 -
xinxinlong:
lAnchor.getDy1() 是什么意思
操作excel--稍后整理 -
defrag_sly:
3.7是好用的,只是再mac下面不支持,mac不支持的效果还有 ...
swt下如何做出一个反向展开效果的tree -
defrag_sly:
eclipse3.7不好用了。谁知道给补充一下。
swt下如何做出一个反向展开效果的tree -
hamlzf:
好文!mark!
基于 OSGi 的面向服务的组件编程
大家在使用eclipse时,一定对ctrl+z和ctrl+r使用起来感觉比较爽。这个功能的基础是
Org.eclipse.core.commands.operations包的IUndoableOperation可撤销的操作,OperationHistory操作历史记录,IUndoContext撤销上下文目录,OperationHistory负责执行并记录Operation。IUndoContext作为检索operation的key,OperationHistory根据IUndoContext是否匹配来判断该操作是否要执行撤销。通过IUndoContext可以将操作局限到某一层次上进行撤销,例如一个操作仅在一个view/editor内可以撤销,或者一个操作可以在多个view内撤销(jdt的重构功能),或者一个操作可以在所有的范围(workbanch)内撤销。获得可以在所有范围内撤销的IUndoContext:
也可以根据view/editor的含义,实现IUndoContext接口,定义一个有含义的IUndoContext。
对eclipse工作空间(workspace)的操作,eclipse建议使用
获得上下文这样可以协同eclipse提供的插件一起工作(package explorer等等)。
做一个例子。
点击I后,使用ctrl+z,ctrl+y进行撤销,恢复操作。
Org.eclipse.core.commands.operations包的IUndoableOperation可撤销的操作,OperationHistory操作历史记录,IUndoContext撤销上下文目录,OperationHistory负责执行并记录Operation。IUndoContext作为检索operation的key,OperationHistory根据IUndoContext是否匹配来判断该操作是否要执行撤销。通过IUndoContext可以将操作局限到某一层次上进行撤销,例如一个操作仅在一个view/editor内可以撤销,或者一个操作可以在多个view内撤销(jdt的重构功能),或者一个操作可以在所有的范围(workbanch)内撤销。获得可以在所有范围内撤销的IUndoContext:
IOperationHistory operationHistory = workbench.getOperationSupport().getOperationHistory(); IUndoContext undoContext = workbench.getOperationSupport().getUndoContext();
也可以根据view/editor的含义,实现IUndoContext接口,定义一个有含义的IUndoContext。
对eclipse工作空间(workspace)的操作,eclipse建议使用
IUndoContext workspaceContext = (IUndoContext)ResourcesPlugin.getWorkspace().getAdapter(IUndoContext.class);
获得上下文这样可以协同eclipse提供的插件一起工作(package explorer等等)。
做一个例子。
package org.rufus.operation.sample.views; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.operations.AbstractOperation; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; public class MYOperation extends AbstractOperation { private SampleView part; public MYOperation(SampleView part) { super("MYOperation"); this.part = part; } @Override public IStatus execute(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { part.setDifInput(); return Status.OK_STATUS; } @Override public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { execute(null, null); return Status.OK_STATUS; } @Override public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException { part.setDefaultInput(); return Status.OK_STATUS; } }
package org.rufus.operation.sample.views; import org.eclipse.core.commands.operations.IUndoContext; public class MyUndoContext implements IUndoContext { public String getLabel() { return "my context"; } public boolean matches(IUndoContext context) { //过滤重做操作,只有在SampleView中才可以重做 return context instanceof MyUndoContext; } }
package org.rufus.operation.sample.views; import java.util.ArrayList; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.operations.IOperationHistory; import org.eclipse.core.commands.operations.IUndoableOperation; import org.eclipse.core.commands.operations.OperationHistoryFactory; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.IActionBars; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.operations.UndoRedoActionGroup; import org.eclipse.ui.part.DrillDownAdapter; import org.eclipse.ui.part.ViewPart; public class SampleView extends ViewPart { private TreeViewer viewer; private DrillDownAdapter drillDownAdapter; class TreeObject implements IAdaptable { private String name; private TreeParent parent; public TreeObject(String name) { this.name = name; } public String getName() { return name; } public void setParent(TreeParent parent) { this.parent = parent; } public TreeParent getParent() { return parent; } public String toString() { return getName(); } public Object getAdapter(Class key) { return null; } } class TreeParent extends TreeObject { private ArrayList children; public TreeParent(String name) { super(name); children = new ArrayList(); } public void addChild(TreeObject child) { children.add(child); child.setParent(this); } public void removeChild(TreeObject child) { children.remove(child); child.setParent(null); } public TreeObject[] getChildren() { return (TreeObject[]) children.toArray(new TreeObject[children .size()]); } public boolean hasChildren() { return children.size() > 0; } } private TreeParent invisibleRoot; private Action undoable; class ViewContentProvider implements IStructuredContentProvider, ITreeContentProvider { public void inputChanged(Viewer v, Object oldInput, Object newInput) { } public void dispose() { } public Object[] getElements(Object parent) { if (parent.equals(getViewSite())) { if (invisibleRoot == null) initialize(); return getChildren(invisibleRoot); } return getChildren(parent); } public Object getParent(Object child) { if (child instanceof TreeObject) { return ((TreeObject) child).getParent(); } return null; } public Object[] getChildren(Object parent) { if (parent instanceof TreeParent) { return ((TreeParent) parent).getChildren(); } return new Object[0]; } public boolean hasChildren(Object parent) { if (parent instanceof TreeParent) return ((TreeParent) parent).hasChildren(); return false; } private void initialize() { TreeParent root = createDefaultInput(); createTreeRoot(root); } } private void createTreeRoot(TreeParent root) { invisibleRoot = new TreeParent(""); invisibleRoot.addChild(root); } private TreeParent createDefaultInput() { TreeObject to1 = new TreeObject("Leaf 1"); TreeObject to2 = new TreeObject("Leaf 2"); TreeObject to3 = new TreeObject("Leaf 3"); TreeParent p1 = new TreeParent("Parent 1"); p1.addChild(to1); p1.addChild(to2); p1.addChild(to3); TreeObject to4 = new TreeObject("Leaf 4"); TreeParent p2 = new TreeParent("Parent 2"); p2.addChild(to4); TreeParent root = new TreeParent("Root"); root.addChild(p1); root.addChild(p2); return root; } private TreeParent createDifInput() { TreeObject to1 = new TreeObject("File"); TreeObject to2 = new TreeObject("File"); TreeObject to3 = new TreeObject("File"); TreeParent p1 = new TreeParent("Folder"); p1.addChild(to1); p1.addChild(to2); p1.addChild(to3); TreeObject to4 = new TreeObject("File"); TreeParent p2 = new TreeParent("Folder"); p2.addChild(to4); TreeParent root = new TreeParent("Folder"); root.addChild(p1); root.addChild(p2); return root; } class ViewLabelProvider extends LabelProvider { public String getText(Object obj) { return obj.toString(); } public Image getImage(Object obj) { String imageKey = ISharedImages.IMG_OBJ_ELEMENT; if (obj instanceof TreeParent) imageKey = ISharedImages.IMG_OBJ_FOLDER; return PlatformUI.getWorkbench().getSharedImages().getImage( imageKey); } } public void setDifInput() { this.createTreeRoot(this.createDifInput()); viewer.setInput(getViewSite()); } public void setDefaultInput() { this.createTreeRoot(this.createDefaultInput()); viewer.setInput(getViewSite()); } /** * The constructor. */ public SampleView() { } /** * This is a callback that will allow us to create the viewer and initialize * it. */ public void createPartControl(Composite parent) { viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); drillDownAdapter = new DrillDownAdapter(viewer); viewer.setContentProvider(new ViewContentProvider()); viewer.setLabelProvider(new ViewLabelProvider()); viewer.setInput(getViewSite()); makeActions(); contributeToActionBars(); } private void contributeToActionBars() { IActionBars bars = getViewSite().getActionBars(); bars.getToolBarManager().add(undoable); //在sampleview的site下,创建redoundoaction支持MyUndoContext, // fillActionBars是将redo,undoaction注册为全局action。当part切换时, //retargetaction会重新设置相应的全局action handler new UndoRedoActionGroup(getSite(), new MyUndoContext(), true) .fillActionBars(bars); } private void makeActions() { undoable = new Action() { public void run() { //创建重做Operation IUndoableOperation operation = new MYOperation(SampleView.this); IOperationHistory operationHistory = OperationHistoryFactory .getOperationHistory(); //设置特定的UndoContext operation.addContext(new MyUndoContext()); try { //运行Operation operationHistory.execute(operation, null, null); } catch (ExecutionException e) { e.printStackTrace(); } } }; undoable.setText("Undoable"); undoable.setToolTipText("Undoable Action tooltip"); undoable.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages() .getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); } /** * Passing the focus request to the viewer's control. */ public void setFocus() { viewer.getControl().setFocus(); } }
点击I后,使用ctrl+z,ctrl+y进行撤销,恢复操作。
发表评论
-
TableEditor 让我郁闷的
2011-12-21 17:25 1402TableItem item = table.getIte ... -
eclipse search
2011-08-09 13:04 973http://www.ibm.com/developerwor ... -
eclipse 中关于字符串匹配的几个类
2009-12-17 12:07 1588在做检索功能时,必然会遇到字符串匹配的问题。eclipse与j ... -
eclipse Drag&Drop机制图解
2009-11-20 15:55 1153工作需要,debug了eclipse的drag&dro ... -
Drag & Drop eclipse Viewer to GMF Editor
2009-10-09 11:21 19371,添加Viewer的Drag support priva ... -
请问,eclipse e4 究竟是什么?愿能集思广益
2009-08-13 16:05 956请问,eclipse e4 究竟是什么?愿能集思广益 -
简单介绍eclipse中的重构
2009-08-13 11:28 2371Eclipse中提供了几个扩展点,方便扩展重构功能。 基本的重 ... -
swt下如何做出一个反向展开效果的tree
2009-08-10 10:59 1843如题,其实很简单,即在tree的构造方法里加入样式参数{SWT ... -
eclipse 开发中的快捷键
2009-05-19 12:15 936Alt+Shift+F1 eclipse 3.4下会打开一个p ... -
将gmfeditor结合到mutipage中
2009-05-04 16:26 1324http://www.eclipse.org/articles ... -
eclipse还有什么不能做???
2009-04-09 15:13 974http://www.vimeo.com/1195398?pg ... -
如何把propertiesView的tab功能移植到EditorPart中
2009-04-01 10:12 2870最近有个调查将上图tab propertiesView的外 ... -
Eclipse中TextEditor常用扩展整理
2009-03-11 14:11 5485总结一下TextEditor,eclips ... -
总结一下eclipse中的Job机制
2009-03-06 17:38 11640总结一下eclipse中Job,Job可以说是eclipse中 ... -
以GefTree为例解释一下如何结合使用gef+emf(2)
2009-03-05 14:24 3007创建gef框架。 按照基本习惯定义gef各部分包名: G ... -
以GefTree为例解释一下如何结合使用gef+emf(1)
2009-03-05 14:20 1528以GefTree为例解释一下如何结合使用gef+emf。 (1 ... -
gef写的tree例子--模型修改为emf
2009-03-04 16:11 2162模型部分已经修改为emf模型。 使用emf模型最大的好处是: ... -
用gef写的一个tree例子(无移动)
2009-02-26 18:06 1462又整理一下代码,增加了删除。 移动决定不做了,都是坐标之类的算 ... -
用gef写的一个tree例子(无移动,删除)
2009-02-26 11:16 1054计划 1、删除,移动做上去 2、将模型层提供为扩展点,( ... -
关于image,ImageDescriptor,imageRegistry
2009-02-20 17:31 5056相信不需要多说,大家都明白调用本地资源例如(icon)这类的资 ...
相关推荐
Eclipse是一款广泛使用的开源集成开发环境(IDE),支持多种编程语言,尤其是Java开发。对于初学者来说,掌握Eclipse的各种功能菜单是十分重要的。本文将详细介绍Eclipse中的各种菜单项及其对应的中文含义,帮助初学...
2. Edit(编辑)菜单:主要用于编辑代码,提供了代码编辑的基本操作,包括撤销(Undo)、重做(Redo)、剪切(Cut)、复制(Copy)、粘贴(Paste)、查找(Find)、替换(Replace)等。"Expand Selection To"是其中...
Eclipse SDK 提供的撤销/重做(Undo/Redo)操作支持是开发环境中不可或缺的功能,它使得开发者能够在代码编辑过程中方便地恢复或撤销错误的操作。这个功能在Eclipse的内核中通过一种称为“Undoable Operations”的...
【Edit】菜单主要涉及到编辑器内的文本操作,如`Undo`和`Redo`实现撤销和重做,`Cut`、`Copy`和`Paste`执行剪切、复制和粘贴,`Delete`删除选中内容,`Select All`全选,以及`Find/Replace`查找和替换功能。...
GEF是Eclipse中的图形编辑框架,常与EMF结合使用,用于创建可拖放、可编辑的图形界面。文件“如何使EMF模型对应的编辑控件能处理Undo&Redo操作”则揭示了一个常见需求,即在模型编辑中实现撤销/重做功能,这是任何...
Eclipse界面中英文对照 Eclipse是目前最流行的Java集成开发环境(IDE),它提供了丰富的功能和自定义选项,以满足不同的开发需求。了解Eclipse界面的英文对照是非常重要的,因为它可以帮助开发者快速熟悉Eclipse的...
本文将详细介绍Eclipse中的主要菜单选项及其功能,并提供中英文对照,帮助初学者更好地理解和使用Eclipse。 #### 二、File(文件)菜单 **File** 菜单提供了与文件相关的操作,包括创建新项目、打开现有项目、保存...
Eclipse是一款广泛使用的Java开发集成环境,而MyEclipse是其商业版本,增加了对Web、Java EE和企业级应用的支持。 首先,我们来详细探讨Eclipse的快捷键。在编程世界里,熟练使用快捷键能极大地提高开发效率,减少...
根据给定文件的信息,我们可以提炼出与"Eclipseの日本語のコンピュータの語彙"相关的IT日语词汇及英日菜单对照知识点。以下是对这些知识点的详细阐述: ### Eclipseの日本語のコンピュータの語彙 #### Eclipse ...
7. **撤销与重做(Undo & Redo)**: - `Ctrl+Z`用于撤销上一步操作,而`Ctrl+Y`则用于重做。 8. **选取与移动(Selection)**: - 通过`Ctrl+A`可以快速全选文本,`Alt+Shift+方向键'↑'`和`Alt+Shift+方向键'↓...
在编程环境中,特别是集成开发环境(IDEs)如Eclipse或IntelliJ IDEA中,"ReDo"功能通常作为用户界面的一部分,便于开发者在编写代码时进行误操作后的修复。 在Java中,可以利用设计模式来实现"ReDo"功能。例如,...
在 SQL 编辑器中,可以编写 SQL 语句,提供自动补全、redo/undo 等编辑功能。可以通过 set 语句设置参数,如 set mapreduce.job.queuename=root.default;。 连接 Hive DBeaver 带有配置有数据平台的 Hive 和 ...
- **Ctrl+Z / Ctrl+Y (Undo / Redo)**:撤销和重做操作,用于恢复误操作或实验性修改。 通过熟练掌握这些Eclipse快捷键,开发者能够显著提升工作效率,减少重复劳动,更好地专注于代码质量和项目进度。在实际工作中...
Eclipse支持高度的个性化设置,可以通过菜单中的 `edit->contentAssist->addAlt+/`、`Window->NextEditor->addCtrl+Tab` 等方式来自定义快捷键。此外,还可以通过 `Source->Surround with try/catch Block->Ctrl+...
### MyEclipse与Eclipse快捷键大全解析 #### 标题和描述中的知识点解析 **标题:“myeclipse-eclipse快捷键大全”** - **MyEclipse与Eclipse**: 这两个是流行的集成开发环境(IDE),主要用于Java开发。虽然它们在...
Ctrl+Z/Ctrl+Y(Undo/Redo)** - **功能介绍**:撤销/重做。 - **应用场景**:当误操作时,可以使用此快捷键恢复到上一步或重做已撤销的操作。 #### 五、多窗口操作快捷键 **1. Ctrl+F6/Ctrl+Shift+F6(Next ...
本文将对Eclipse中的常用快捷键进行详细介绍,并结合标题、描述以及部分内容,全面解析这些快捷键的功能与应用场景。 #### 一、代码提示与补全 **ALT+/(Content Assist)** 此快捷键主要用于代码提示和自动补全...