目标读者必须熟悉Java开发,并且有一定的Eclipse开发经验。
在Eclipse网站上有一篇相关的文章"Creating Your Own Widgets using SWT",该文介绍了开发自己控件的很多基本概念、方法,并且通过实例进行了介绍,非常好。但是其所用的实例比较简单,还有很多控件开发中所要涉及到的内容,例如键盘、鼠标事件的处理,滚动条、焦点的处理等等没有提及。本文通过开发一个自定义的颜色列表控件的实例,全面地介绍了自定义控件所涉及的技术。同时,读者也可以对该实例进行扩展,实现自己的列表控件。
SWT中提供的标准列表控件非常简单,只能提供字符串的选择。我们经常需要提供一些图形列表供用户选择,这就需要自己开发自定义的列表控件。颜色选择列表是我们常用的一种图形列表,我们就以此为例进行介绍。以下是我们将要开发的颜色列表。
我们在开发自定义控件时主要考虑以下问题:
1、自定义控件的绘制:通常我们需要自己对控件的形状或图案进行绘制;
2、控件对键盘事件的响应:当焦点进入控件,用户进行键盘操作,通过键盘对控件进行控制时,我们需要让控件对用户的操作进行响应。例如在列表中,用户会通过上下箭头改变列表的选择项;
3、控件对鼠标事件的响应:当用户用鼠标选中控件,进行操作时,控件必须作出相应的反应;
4、控件对焦点事件的响应:当界面焦点进入或移出控件,通常我们需要将控件绘制成得到或失去焦点的形状。例如,当焦点进入列表时,一般被选中的列表项会有虚框表示选中。
5、响应TAB键:对于一个可操纵的控件,用户可以用TAB键将焦点移入或移出。
6、响应滚动条事件:当控件有滚动条时,我们需要响应用户对滚动条的操作,完成对控件的绘制工作。
7、提供事件监听机制:程序员使用你的控件时通常需要监听控件中发生的一些事件,这样当事件发生时,他们能够进行相应处理。
8、提供辅助功能(Accessibility):辅助功能是方便残障人士使用时必须的,标准控件都会提供相应的支持,我们自定义的控件也不例外。
9、提供功能接口方便程序员访问:通常为方便程序员使用时获取控件中的信息或进行设置,我们需要提供一些接口。
首先我们要开发的列表控件是一个基本控件,所以我们选择Canvas作为我们开发的基类。
public class ColorList extends Canvas {
Vector colors = new Vector(); // 用于保存我们颜色控件中的颜色值
Vector colorNames = new Vector(); // 用于保存颜色控件中的颜色名字
int rowSel = -1; // 用于保存当前选中的行号
int oldRowSel = -1; // 用于保存上一次选中的行号
int maxX, maxY; // 用于保存列表的宽度和高度
int lineHeight; // 用于设置行高
int cx = 0; // 滚动条滚动后,控件的图形相对于控件可见区域左上角的x坐标
int cy = 0; // 滚动条滚动后,控件的图形相对于控件可见区域左上角的y坐标
}