Eclipse插件开发

摘自:http://www.cnblogs.com/liuzhuo

 

一,基础知识

1,插件管理平台

OSGi是open services gateway initiative的简称。
OSGi是一种为嵌入式硬件开发的,是网络上的服务提供者和使用者交互的注册服务。
Eclipse从3.0使用OSGi来进行插件管理。
所以Eclipse就是一个插件管理平台,用户使用某个功能,实际上只是调用某个插件。

SWT,JFace,UI插件:构成了工作台(Workbench)。提供了用户界面的API。
Resource插件:构成了工作区(Workspace)。提供了文件操作的API。

2,插件扩展

在Eclipse中,任何插件都可以被扩展。类似于Java中的继承。

扫描二维码关注公众号,回复: 286315 查看本文章

于是,当我们想编写新的用户界面,可扩展现有的UI插件;当我们想提供新的文件操作,可扩展现有的Resources。

3,用户界面API

每个透视图都有自己的视图集;编辑器会被所有透视图共享。

视图通常用于浏览资源和修改资源属性;编辑器常用来查看和修改特定资源。

上方有菜单栏;工具栏;右键会产生上下文菜单。

org.eclipse.ui.PlatformUI

//取得工作台
IWorkbench workbench = PlatformUI.getWorkbench();
//取得工作台窗口
IWorkbenchWindow window = workbench.getActiveWorkbenchWindow();
//取得工作台页面
IWorkbenchPage page = window.getActivePage();
//取得当前处于活动状态的编辑器窗口
IEditorPart part = page.getActiveEditor();


4,文件操作API

org.eclipse.core.resources
org.eclipse.core.resources.ResourcesPlugin

//取得工作区的root
IWorkspaceRoot wsroot = ResourcesPlugin.getWorkspace().getRoot();
//取得项目
IProject[] projects = wsroot.getProjects();

二,使用Eclipse开发

配置文件管理:

MANIFEST.MF是OSGi的配置文件,记录插件ID、名称、作者、和其他插件的依赖关系。
plugin.xml记录了插件的扩展和扩展点的定义。

Plugin-in Selection Spy:

同时按下alt+shift+F1,显示当前选中的插件的信息。常用于对现有插件经行扩展时,观察现有插件的构成。

OSGi控制台:

在Eclipse启动时加入-console参数,在Eclipse启动的同时,会启动一个OSGi控制台。
OSGi控制台可以确认Eclipse插件的活动状态,也可以打开和关闭插件。

三,教程

Eclipse的Workbench是基于SWT(Standard Widget Toolkit)和JFace开发的。
他们与Java的AWT和Swing不同在于他们是直接调用操作系统的API,所以,不同操作系统的控件并不一样。
JFace是基于SWT开发的,相比SWT而言,已经解决了一些常见问题,使用户将精力集中在自己的控件创建上。

SWT一般流程:
1.创建一个Display对象,Display负责沟通SWT和操作系统
2.创建一个或多个Shell对象,Shell代表程序的窗口
3.在Shell中创建各种控件,为控件添加监听器
4.调用Shell对象的open()方法显示窗口
5.开始对各种事件进行响应并处理,直至程序发出退出消息
6.调用Display对象的dispose()方法,结束程序

SWT类结构:
org.eclipse.swt.widget/custom
Widget:抽象类,类似于AWT的Component类和Swing的JComponent
->Control:抽象类,控件类
->Button
->Label
->Link
->ProgressBar
->Slider
->Scrollable
->Composite:容器类,类似AWT的Container和Swing的JPanel
->List
->Text
->Item:抽象类,其他控件包含的小部件,如列表和表的选项
->Menu
->ScrollBar
超出操作系统以外的控件以"C"开头。

JFace一般流程:
1.继承ApplicationWindow类,重写createContents(Composite parent)方法,将创建组件写入该方法。
2.实例化该类,调用open()方法显示窗口,
3.调用Display对象的dispose()方法,结束程序

Control接口
创建并添加到父控件中:Control(Composite parent, int style)
设置大小和相对于父控件的位置:setBounds(int x, int y, int width, int height)
setEnabled(boolean enabled)
setVisible(boolean visible)
setToolTipText(String string)
setFont(Font font)
setForeground(Color color)
setBackground(Color color)
setCursor(Cursor cursor)

Button类
设置按键文字:setText(String string)
设置按键图案:setImage
设置样式和文字对齐方式

Label类
设置按键文字:setText(String string)
设置按键图案:setImage
设置为分隔符,可换行,边框和对齐方式

Text类
设置单行,多行,只读,滚动轴

Combo类
设置内容:setItem(int index, String value), setItems(array[] a)
设置关联内容:setData(String key, Object value)
设置选中项:setSelect(int i)

List类
类似Combo,只是没有下拉菜单


事件监听机制
鼠标事件:
按下,松开,双击:addMouseListener(MouseListener l)
移动:addMouseMoveListener(MouseMoveListener l)
进入,离开,悬停:addMouseTrackListener(MouseTrackListener l)
滚轮:addMouseWheelListener(MouseWheelListener l)
键盘事件:
按下,松开:addKeyBoradListener(KeyListener l)
焦点事件:
获焦,失焦:addFocusListener(FocusListener l)
窗口控制事件:
移动,调整大小:addControlListener(ControlListener l)
选择事件:
addSelectListener(SelectionListener l)
F1帮助事件:
addHelpListener(HelpListener l)
校验事件:只有文本控件才可添加。 e.doit = true 才会表示修改有效
addVerifyListener(VerifyListener l)
修改事件:只有文本控件才可添加
VerifyListener(ModifyListener l)

其他通用事件:
addListener(int eventType, Listener l)


布局
















猜你喜欢

转载自hellobbboy.iteye.com/blog/2343449
今日推荐