Display: 代表一个底层的操作系统, Shell: 代表一个top-level window
// 检查用户有没有关闭主窗口 while(!shell.isDisposed)) { // 检查队列中是否有event, 如果没有就sleep if (!display.readAndDispatch()) { display.sleep(); }
}
// 最后就把display 销毁掉 display.dispose();
swt 使用本地操作系统库, 只是在外面覆盖了一层java 代码, 所以 java widget 和 native widget的生命周期相同
构造Widget, 要指定父组件及其风格
Widget chilren = new Widget(parnet, style);
为什么要销毁掉widget 虽然java 的gc 的管理内存十分的优秀, 但是gui 资源是底层的, 重量级的, 所以他们是非常有限的
Color color = new Color(display, 255, 0, 0)
rule 1: 我创造的, 我必须销毁它 color.dispose();
rule2 : 销毁父容器, 会自动销毁父容器里面的子控件
销毁掉容器后, 我们不应该继续调用它。 否则会出现SWTException
Display 详细解析 Display 维持了一个eventQueue, 每次用户的操作都会生成一个Event, 并填充到EventQue中, readAndDispatch()方法 检查队列中是否有要执行的Event, 并把队列中的第一个Event取出执行, 这个执行是调用相应的监听器去执行.
二 布局管理
FillLayout: 放置组件在 单一的 行 或者列, 组件有相同的Size.
FillLayout(int type): type为SWT.HORIZONTAL / SWT.VERTICAL, 则组件在同一行 / 列,
FillLayout layout = new FillLayout(SWT.HORIZONTAL); shell.setLayout(layout);
RowLayout: 和FillLayout 类似, 也是把组件放在同一行或者同一列, 但是不强制组件具有相同的大小.
rowLayout的属性 justify: 控制是否对齐 wrap: 当前行或者列显示不下时,控制是否换行。 type: 与FillLayou类似
GridLayout: 本质上分成一个一个的Cell, 有的控件占用几个Cell. GridLayout 属性 numcolmuns: 总共有几列 makeColumnsEqualWidth: 是否等宽 marginWidth: 组件左右两边预留的空白 marginLeft: 组件左边预留的空白 horizontalSpacing: 两个相邻cell水平间距
GridData grabExcessHorizontalSpace: 是否占用水平的额外空间 widthHint : 组件占用的最小的宽度 horizontalIndent: 在cell的左边缩进的 像素 horizontalAligment: 水平对齐的方式 BEGINNER, CENTER, END horizontalSpan: 所占的cell 数目
StackLayout: 所有的控件都有相同的Size 和 postion, 控件都堆叠在一起,只有最上面的组件可见。 注意:虽然你手动设置的了topControl, 但是直到容器调用layout的时候才会起作用。