winform自定义控件列表 开发Eclipse下的自定义控件[4]
开发Eclipse下的自定义控件[4]
作为一个可操作的控件 TAB键的支持也是很重要的 由于我们的控件是从Canvas继承过来的 不支持TAB键 下面的代码使我们的控件有TAB键的支持
addTraverseListener(new TraverseListener() {public void keyTraversed(TraverseEvent e) {if (e detail == SWT TRAVERSE_TAB_NEXT|| e detail == SWT TRAVERSE_TAB_PREVIOUS) {e doit = true;}};});
![winform自定义控件列表 开发Eclipse下的自定义控件[4]](http://img.zhputi.com/uploads/73d7/73d7713623d9bfd6f9bda5681ba31d1117410.jpg)
很多时候 我们需要有滚动条的支持 对于滚动条 我们只要在上面加上selectionListener 处理它的widgetSelected事件就可以
bar = getVerticalBar();if (bar != null) {bar addSelectionListener(new SelectionAdapter() {public void widgetSelected(SelectionEvent event) {scrollVertical((ScrollBar) event widget);}});}
下面是函数scrollVertical的代码 一旦用户对滚动条操作 我们就可以计算出要滚动的区域 然后调用scroll函数 对函数scroll函数的调用会导致相应区域的重绘
void scrollVertical(ScrollBar scrollBar) {Rectangle bounds = getClientArea();int y = scrollBar getSelection();if (y + maxY < bounds height) {y = bounds height 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) {selectionListeners addElement(listener);}
在我们前面的代码中 我们注意到每次选择项改变 我们都会调用selectionChanged函数 下面是selectionChanged函数代码 这里 我们会生成一个SelectionEvent事件 并且逐个调用事件监控器的widgetSelected方法 这样别人就可以监听到我们的事件了
lishixinzhi/Article/program/Java/ky/201311/28982