作为一个可操作的控件TAB键的支持也是很重要的由于我们的控件是从Canvas继承过来的不支持TAB键下面的代码使我们的控件有TAB键的支持
addTraverseListener(new TraverseListener() {
public void keyTraversed(TraverseEvent e) {
if (edetail == SWTTRAVERSE_TAB_NEXT
|| edetail == SWTTRAVERSE_TAB_PREVIOUS) {
edoit = true;
}
};
});
很多时候我们需要有滚动条的支持对于滚动条我们只要在上面加上selectionListener处理它的widgetSelected事件就可以
bar = getVerticalBar();
if (bar != null) {
baraddSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
scrollVertical((ScrollBar) eventwidget);
}
});
}
下面是函数scrollVertical的代码一旦用户对滚动条操作我们就可以计算出要滚动的区域然后调用scroll函数对函数scroll函数的调用会导致相应区域的重绘
void scrollVertical(ScrollBar scrollBar) {
Rectangle bounds = getClientArea();
int y = scrollBargetSelection();
if (y + maxY < boundsheight) {
y = boundsheight maxY;
}
if( y%lineHeight != )
y = y y % lineHeight lineHeight;
scroll(cx y cx cy maxX maxY false);
cy = y;
}
现在我们的程序已经基本成形了我们来进一步完善它由于我们开发的控件是提供给程序员的我们需要提供接口让外部知道控件中发生的事件其中最重要的是列表项的选中事件我们需要提供接口让程序员能够添加事件监控器(listener)来监控发生的事件并且一旦发生事件我们需要通知监控器
首先我们添加一个成员来保存添加的事件监控器
Vector selectionListeners = new Vector();
我们再增加一个函数addSelectionListener让程序员可以添加监控器
public void addSelectionListener(SelectionListener listener) {
selectionListenersaddElement(listener);
}
在我们前面的代码中我们注意到每次选择项改变我们都会调用selectionChanged函数下面是selectionChanged函数代码这里我们会生成一个SelectionEvent事件并且逐个调用事件监控器的widgetSelected方法这样别人就可以监听到我们的事件了
[] [] [] [] [] []