本节主要是书中第四章,即SWT和JFace相关的内容
关于SWT和JFace是什么就不多做介绍了。配置SWT开发环境是需要注意的是dll的位置
SWT程序的基本结构如下
Display display = new Display();
Shell shell = new Shell(display);
// 页面相关的代码
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
需要理解Display对象和Shell对象。目前我只对这两个对象有初步的了解。其中,有两个没有解决的问题是:
1. shell对象构造时,传不传入display对象有什么区别?
2. Display对象构造时,调用构造函数和静态方法有什么区别?
比较重要的是布局管理器,还有常用组件的使用方法。
SWT的事件处理机制在本书的该章没有详细介绍。不过有简单的涉及,重要的是事件的Listener。其中匿名内部类的使用也应该有所了解。(包括内部类等)
SWT/JFace开发入门指南(四) 中介绍了SWT的时间处理机制
其实swt中处理事件非常简单,对应于各种事件都有相应的listener类,如果一种事件叫做Xyz,那么对应的listener类就是XyzListener。比如对应于鼠标事件的有MouseListener,对应于键盘事件的就是KeyListener。而在每种widget中,对于它可以处理的事件都有addXyzListener方法,只要把对应的listener实例作为参数传给它就可以了。
另外,在一些情况下Adapter也很有意义。
让事件处理更加简单:使用适配器(adapter)
有时候我们可能会感觉这样仍然不够简单,比如我只对SelectionListener中的widgetSelected()方法感兴趣,但是为了能够通过编译器的编译,我却不得不写一个空白的widgetDefaultSelected()方法(因为SelectionListener是一个接口,你必须实现它所有的方法)。
幸运的是,swt帮我们解决了这个问题,途径就是使用adapter。在swt中,对应于一个XyzListener都有一个XyzAdapter,adapter都是抽象类并且实现了对应的listener接口,它为对应listener接口中的每个方法都定义了一个默认实现(基本上就是什么都不做),我们在使用时候只需要override掉自己感兴趣的方法就可以了。
结合上一小节中的代码,如果使用SelectionAdapter代替SelectionListener
总之,上面介绍的文章有助于了解SWT中的事件处理。