Eclipse 插件开发 SWT之Widget
Widget就是窗口小部件, 是组成用户界面的元素, 包含Menu、Item、Control等, Control是最常用的。
常用widget的结构关系如下:
1. Shell ( Widget->Control->Scrollable->Compsite->Decorations->Shell )
Shell是一个"Window", 就是当用户触发事件时弹出的窗口,是在每个窗口里最外层的"Composite",是组成图形界面的祖先Composite.
顶层的Shell 的定义是作为display的child定义的。
Shell shell = new Shell(display);
这里的display可能是parent.getDisplay( ),在单线程里可以先不用考虑display.display由UI线程创建。
2. Composite ( Widget->Control->Scrollable->Compsite )
composite作为复合控件,即在composite里可以添加其他控件(包括composite), 相当于一个盒子,里面可以放一些东西。
定义方式: Composite composite = new Composite ( parent, style );
parent代表的是父复合控件, Style 是用到SWT类里的静态整型变量,如SWT. BORDER , 使用符号 ‘|’ 间隔SWT常量可以让一个控件应用多个样式
复合控件(除了子元素是*Item的控件)若想添加别的控件,必须先布局,否则里面的控件无法显示
若想在最外层的composite添加滚动条,需要定义ScrolledComposite:
parentComposite.setLayout(new FillLayout()); //scrolledComposite 的父复合布局必须设为fillLayout
ScrolledComposite scrolledComposite = new ScrolledComposite(parentComposite, SWT.H_SCROLL|SWT.V_SCROLL);
Composite mainComposite = new Composite(scrolledComposite,SWT.NONE); //不要直接在scrolledComposite 添加控件
scrolledComposite.setContent(mainComposite); //必须有,scrolledComposite里的内容为mainComposite
.....
scrolledComposite.setExpandHorizontal(true);
scrolledComposite.setExpandVertical(true);
scrolledComposite.setMinWidth(800);
scrolledComposite.setMinHeight(400);
必须设置这4个方法滚动条才有作用 只有前两项为true,后两项才有作用
3. Button ( Widget->Control->Button )
Button button = new Button ( parent, style );
button类型如下:
如上图所示,SWT.PUSH是普通按钮;SWT.CHECK是选择按钮;SWT.RADIO是单选按钮,同一组单选按钮必须在同一个父复合控件里,不同组得单选按钮必须在不同的父复合控件里;SWT.ARROW是带箭头的按钮,默认是向上的按 钮, 若想实现不同方法的箭头的按钮,只需要在style里定义对应的方向即可,如向左方向的按钮,style为SWT.ARROW | SWT.LAFT。这四种样式在同一个button的style里只能出现其中一个。 常用的方法:button.setText("string"); 4. Combo Combo combo = new Combo ( parent, style ); 有三种样式:SWT.DROP_DOWN、SWT.SIMPLE、SWT.READ_ONLY 默认的类型是SWT.DROP_DOWN SWT.DROP_DOWN为下拉式列表 String string[] = { "aaa", "bbb", "ccc"}; Combo combo = new Combo ( parent, SWT.DROP_DOWN ); combo.setItem (string); //把string数组放入到combo中 combo.add ("ddd"); //添加一项字符串到combo combo.select(1); //默认选择一项,选择数组下标为1的值 combo.setVisibleItemCount(3); //设置下拉列表显示的长度