开发Eclipse自定义控件
2009-12-14 00:00:00 来源:WEB开发网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坐标
}
控件开发最重要的就是控件的绘制了。控件的绘制可以通过添加PaintListener,在它的paintControl方法中进行。
addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
GC gc = e.gc;
Point size = getSize();
int beginx = e.x;
int beginy = (e.y / lineHeight) * lineHeight;
int beginLine = (e.y - cy) / lineHeight;
int endLine = beginLine + e.height / lineHeight + 1;
if (endLine > getItemCount())
endLine = getItemCount();
for (int i = beginLine; i < endLine; i++) {
boolean;
if (i == rowSel)
selected = true;
onPaint(gc, i, cx, beginy + (i - beginLine) * lineHeight,
selected);
}
}
});
更多精彩
赞助商链接