首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

eclipse插件开发文件 参考代码

2012-06-26 
eclipse插件开发资料 参考代码首页?LIHFLIHFlgsun592mrjuntomle..wmy666rninanboyluomanslilin..xiugqdavi

eclipse插件开发资料 参考代码
首页

?

LIHFLIHF

eclipse插件开发文件 参考代码

lgsun592

eclipse插件开发文件 参考代码

mrjun

eclipse插件开发文件 参考代码

tomle..

eclipse插件开发文件 参考代码

wmy666r

eclipse插件开发文件 参考代码

ninanboy

eclipse插件开发文件 参考代码

luomans

eclipse插件开发文件 参考代码

lilin..

eclipse插件开发文件 参考代码

xiugq

eclipse插件开发文件 参考代码

david..

eclipse插件开发文件 参考代码

yuebb728

eclipse插件开发文件 参考代码

hjambo

Eclipse插件开发帮助. }
方法中观点是一个键盘绑定范围的标识,如果你想让你编辑器定义它自己的键盘绑定范围,然活你可以覆盖这个方法在编辑器的类中.或者动态的使用setKeybindingScopes方法.
范围本身必须定义的和org.eclipse.ui.commands扩展点中的一致.下面定义就是编辑器中的范围
<extension
? ? ? point="org.eclipse.ui.commands">
? ? ...
? ? <scope
? ? ? ? name="%scope.text.name"
? ? ? ? parent="org.eclipse.ui.globalScope"
? ? ? ? description="%scope.text.description"
? ? ? ? id="org.eclipse.ui.textEditorScope">
? ? </scope>
? </extension>



目录:
? Platform Plug-in Developer Guide
? ? Programmer’s Guide
Editors
? Cotent Outliners

内容轮廓器.
编辑器经常有一个和内容相一致的OUTLINE (内容轮廓).这是个标准的View.不是用户创建的.而是eclipse本身带的四个标准View之一.四个标准的View分别是Outline ,Navigator,Console,PakageExplore.
其中outline是用来帮助用户定位编辑器中的内容. 正式为了这个目的,工作台提供了这个标准的Outline.用户可以通过菜单 Window > ShowView来显示这个视图.
因为一般的TextEditor不能自己发现文档的结构,所以他也不能为Outlne视图提供相应的行为.因此默认的Outline的视图显示为

文本框架内的编辑器可以自己提供自己的内容轮廓到outline view. 当工作台请求IcontentOutlinePage类型的适配器时,这个编辑器的轮廓视图就被指定.
代码如下 :
public Object getAdapter(Class required) {
? ? ?if (IContentOutlinePage.class.equals(required)) {
? ? ? ? ? ?if (fOutlinePage == null) {
? ? ? ? ? ? ? ? ?fOutlinePage= new JavaContentOutlinePage(getDocumentProvider(), this);
? ? ? ? ? ? ? ? ?if (getEditorInput() != null)
? ? ? ? ? ? ? ? ? ? ? ?fOutlinePage.setInput(getEditorInput());
? ? ? ? ? ?}
? ? ? ? ? ?return fOutlinePage;
? ? ?}
? ? ?return super.getAdapter(required);
}
内容轮廓的页面必须实现IContentOutlinePage接口.这个接口合并了两个接口,包括可以通知outline中选择的改变的接口(ISelectionProvider)和在视图中作为一个页面的行为(IPage)接口.内容轮廓是一个使用Jface视图的典型示例.默认的实现IContentOutlinePage接口的类是(ContentOutlinePage)类.他使用一个Jface树视图显示层次结构.这种表示符合很多轮廓的结构.包括JavaContentOutlinePage就是这种结构.
一起看一下这个页面的实现.当轮廓页面被编辑器创建的片断程序.它的输入的元素就是编辑器中输入的元素.这个输入经常直接被传递到outline的页面.如下所示:
public void createControl(Composite parent) {

? ? ?super.createControl(parent);

? ? ?TreeViewer viewer= getTreeViewer();
? ? ?viewer.setContentProvider(new ContentProvider());
? ? ?viewer.setLabelProvider(new LabelProvider());
? ? ?viewer.addSelectionChangedListener(this);

? ? ?if (fInput != null)
? ? ? ? ? ?viewer.setInput(fInput);
}
树视图从CongtentOutlinePage类继承创建.需要提供标准的内容和标签.无论编辑器的输入输入或者改变,JavaContentOutlinePage为编辑器内的文本创建了一个文档.
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
? ? ?...
? ? ?if (newInput != null) {
? ? ? ? ? ?IDocument document= fDocumentProvider.getDocument(newInput);
? ? ? ? ? ?if (document != null) {
? ? ? ? ? ? ? ? ?document.addPositionCategory(SEGMENTS);
? ? ? ? ? ? ? ? ?document.addPositionUpdater(fPositionUpdater);

? ? ? ? ? ? ? ? ?parse(document);
? ? ? ? ? ?}
? ? ?}
}
文本被解析为行列,然后在文档内调用程序,上面这个片断可以在outline中显示当前修改文本的位置:

当在outline中选择的改变时,被选择的片断将被从编辑器中被找到. 指定偏移量的文本片断将被设置为高亮,代码如下
public void selectionChanged(SelectionChangedEvent event) {

? ? ?super.selectionChanged(event);

? ? ?ISelection selection= event.getSelection();
? ? ?if (selection.isEmpty())
? ? ? ? ? ?fTextEditor.resetHighlightRange();
? ? ?else {
? ? ? ? ? ?Segment segment= (Segment) ((IStructuredSelection) selection).getFirstElement();
? ? ? ? ? ?int start= segment.position.getOffset();
? ? ? ? ? ?int length= segment.position.getLength();
? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ?fTextEditor.setHighlightRange(start, length, true);
? ? ? ? ? ?} catch (IllegalArgumentException x) {
? ? ? ? ? ? ? ? ?fTextEditor.resetHighlightRange();
? ? ? ? ? ?}
? ? ?}
}




要想使用outline tree.必须实现ItreeContentProvider接口.
当你私用一个tree viewer工作时,你需要提供viewer需要的信息异用来传送你的业务对象到界面的tree中.这就是这个接口的目的.必须有一个类来实现这个接口.用你的使用的对象来取代接口代码.你可以创建一个另外的对象来满足树的内容提供者的必要条件.
下面详细说明一下这个接口中的方法.
1, public Object[] getElements(Object inputElement)
这个方法被tree视图的setinput方法激活.实际上,getElement方法仅仅被调用一次响应tree viewer的setpinput方法..而且应该使用合适的输入业务对象. GetElements方法和getChiledren方法使用方法比较相似.都依赖于我们的业务对象 ,可以让getElements简单的调用getChildren方法.这两个方法被分开的原因是他提供了一个方便的方法来区别根业务对象和其他所有的业务对象.

2 ? ? ?public Object[] getChildren (Object parent)
当树型视图需要创建或者显示业务parent对象的子元素时,调取他的内容提供者方法getChildren方法.. 这个方法应该回答一个业务对象队列来呈献没有定义的父的子元素.
3 ? ? ?public Object getParent(Object element )
当树型视图需要展现缩起的业务对象时则调取他的内容提供者的getParent方法.并且设置业务对象的展开状态.这个方法应该响应业务对象的父.
4, public Boolean hasChildren (Object elment)
? 树型视图请求他的内容提供者呈献的业务对象是否有子元素.这个方法通常被树型视图用来测定判断在组件内部显示加号还是减号.

5, public void inputChanged (Viewer viewer ,Object oldInput, Object newInput)
这个方法真正的微妙的服务两个不同的目的. 这个方法当你设置树型视图的输入时被激活.换句话说,任何时间,只有你经由setInput这个方法改变树型视图的视图时这个inputChanged方法都会被调用.这个经常用来作为业务改变的容器注册内容提供者并为旧的业务对象提供反注册.
对于大的图像条目,为内容提供者提供的输入对象都要经由视图来管理.
当树型视图通知内容提供者不在使用树型视图时也会被调用.当你设置树型视图时这个就会发生.
例如,我们移动的盒子中不管是一个书,还是棋盘游戏,从盒子中添加还是除去,都会通知他的监听.内容提供者为这些业务模型的改变都注册了监听.因此当业务改变时它就可以更新界面.同样的,它也能当不再查看时从业务对象中移去自己的监听.


关于抽象APIs的讨论足够多了,来看一下实际的代码. 在上面提供的代码中,树型视图的内容提供者被设置为MovingBoxContentProvider的实例.看一下类的内部细节:
public Object[] getChildren(Object parentElement) {
? if(parentElement instanceof MovingBox) {
? ? MovingBox box = (MovingBox)parentElement;
? ? return concat(box.getBoxes().toArray(),
? ? ? ? box.getBooks().toArray(), box.getGames().toArray());
? }
? return EMPTY_ARRAY;
}
仅仅当MovingBox业务对象有子时,因此一个空的队列被返回.一个移动盒的子是一个串.包括了书和棋盘类的游戏.
public Object[] getElements(Object inputElement) {
? return getChildren(inputElement);
}
这个getElement方法用来获取树型视图的根元素 .在我们的例子中,树型视图的根元素对象是一个移动的盒子.因此我们可以简单的调用getChildren方法.因为它操纵着移动盒.如果根业务对象被特别指定了.那getElement方法将很可能不能代理gtChildren方法.
public Object getParent(Object element) {
? if(element instanceof Model) {
? ? return ((Model)element).getParent();
? }
? return null;
}
getParent方法用来获取给定元素的父元素.
Input changed 方法隐藏视图的



第二部分:wizard插件开发
1,wizard插件的开发说明。
Wizard是向导插件。用户根据向导的界面以次输入需要的参数,设置完毕后,各个page界面将保存用户输入的数据,在向导结束的时候,使用InewWizard接口的实现类从page中读取数据,并进行处理,处理完毕后,向导结束。注意:InewWizard的实现类只能是一个,page页面可以是多个。Page页面中可以放入各种可视化的组件。
2,图示:

3,具体操作步骤如下:
? 下面的操作演示根据两个页面的输入创建一个简单的java文件。
? 输入为添加变量的名称生成变量的bean。
? 3.1 首先使用向导的
? 4, 向导配置完成后,如果任务过重,需要占用大量时间,并需要使用进度条来处理时,就需要使用进度接口来管理:进步管理接口英文说明如下:
org.eclipse.core.runtime.IProgressMonitor

The IProgressMonitor interface is implemented by objects that monitor the progress of an activity;
the methods in this interface are invoked by code that performs the activity.
All activity is broken down into a linear sequence of tasks against which progress is reported. When
a task begins, a beginTask(String, int) notification is reported, followed by any number and mixture
of progress reports (worked()) and subtask notifications (subTask(String)). When the task is
eventually completed, a done() notification is reported. After the done() notification, the progress
monitor cannot be reused; i.e., beginTask(String, int) cannot be called again after the call to
done().
A request to cancel an operation can be signaled using the setCanceled method. Operations taking
a progress monitor are expected to poll the monitor (using isCanceled) periodically and abort at
their earliest convenience. Operation can however choose to ignore cancelation requests.
Since notification is synchronous with the activity itself, the listener should provide a fast and
robust implementation. If the handling of notifications would involve blocking operations, or
operations which might throw uncaught exceptions, the notifications should be queued, and the
actual processing deferred (or perhaps delegated to a separate thread).
Clients may implement this interface.
IProgressMonitor 中最有用的方法是:
? ? ? ?beginTask(),它将在操作开始前被调用。它带有操作的描述和持续时间。
? ? ? ?worked() 报告进度。它通常更新进度条。
? ? ? ?done() 必须在创建项目时进行调用。
? ? ? ?subTask() 可以让您更改描述。
项目创建和进度的长度是用工作单元进行报告的。定义单元所表示的内容则由您来决定。例如,处理文件时,每个单元就可以是一个文件。
要执行线程,请调用容器中的 run() 方法。该容器使自己的进度条与 IProgressMonitor 保持同步。
? 对上面的一个说明:
对于多个任务使用如下:
    IprogressMonitor monitor= 。。
? ? monitor.beginTask(“创建文件”,2);
monitor.subTask(“文件1”);
//TODO
monitor.worked(1);
monitor.subTask(“文件2”);
//TODO
monitor.worked(2);
上面的例子中创建第一个文件时,进度条走一半,创建第二个文件时,走一半.
任务条的进度由monitor.worked(n)中的n来控制.

热点排行