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)

布局

FillLayout:子组件以相同的大小填充到父组件:

1.通过一行(SWT.HORIZONTAL,SWT.VERTICAL)或一列的形式排列

2.设置marginHeight,marginWidth,spacing来设置上下,左右边距和子组件间距

RowLayout:子组件将在父组件中按行显示

1.设置type表示排列方向,wrap换行,pack保持自组件大小,justify子组件是否根据父组件调整

2.设置marginLeft,marginTop,marginRight,marginBottom,spacing

3.子组件通过setLayoutData(RowData rd)设置自身大小

GridLayout:网格式布局,可以指定子组件占父组件几个格,以及组件填充到哪几个网格

1.设置numColumns设置分几列显示子组件,markColumnsEqualWidth列宽相同

2.marginLeft,marginRight,marginTop,marginBottom,horizontalSpacing,verticalSpacing调整间距

3.子组件通过setLayoutData(GridData gd)设置自身显示方式

3.1 horizontalAlignment,verticalAlignment(GRIDData.BEGINNING/CENTER/END/FILL)

3.2 horizontalIndent偏移量,horizontalSpan占据几个单元格

FormLayout:通过FormAttachment,以父组件或子组件的边作为相对位置,进行布局

容器

面板:Composite

分组框:Group,可设置标题

分页框:Tab

TabFolder tf = new TabFolder(shell,SWT.BORDER)

TabItem ti = new TabItem(tf,SWT.NULL)

ti.setText(String s);

ti.setControl(Composite c)

分割框:SashForm

SashForm sf = new SashForm(shell,SWT.HORIZONTAL)

sf.setWeights(new int[]{1,2,3})

Text t = new Text(sf,SWT.CENTER)

菜单和工具栏

//设置MenuBar

Menu menuBar = new Menu(shell, SWT.BAR);

shell.setMenuBar(menuBar);

//设置Menu按钮

MenuItem fileMenuButton = new MenuItem(menuBar, SWT.CASCADE);

fileMenuButton.setText("File");

Menu fileMenuDropDown = new Menu(shell, SWT.DROP_DOWN);

fileMenuButton.setMenu(fileMenuDropDown);

//设置Menu选项

MenuItem fileOpen = new MenuItem(fileMenuDropDown, SWT.PUSH);

fileOpen.setText("Open");

MenuItem fileSave = new MenuItem(fileMenuDropDown, SWT.PUSH);

fileSave.setText("Save");

猜你喜欢

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