开发Eclipse自定义控件
2009-12-14 00:00:00 来源:WEB开发网这里要注意的是从PaintEvent中获取的x,y,height,width是需要重绘的区域,x,y是以控件的左上角为原点的坐标。在我们的程序中,为了性能起见,我们先根据需要重绘的区域计算出需要重绘的行数,只重绘相应的行,而不是将整个控件重绘。我们程序中用到的onPaint用于绘制一行。
接下来,我们要让我们的控件响应键盘上下键对列表项进行选择。我们已对向上键的处理为例,首先当用户按了向上键时,我们需要改变选择,并且重绘旧的和新的选择项。如果选择项已经到了列表的顶部,我们还需要同时滚动滚动条。
addListener(SWT.KeyDown, new Listener() {
public void handleEvent(Event event) {
switch (event.keyCode) {
case SWT.ARROW_UP: // 处理向上键
if (rowSel != 0) {
oldRowSel = rowSel;
rowSel--;
if (oldRowSel != rowSel) { //发送消息让控件重绘
((Canvas) event.widget).redraw(cx, (rowSel + cy
/ lineHeight)
* lineHeight, maxX, lineHeight*2, false);
}
if (rowSel < -cy / lineHeight) { //如果需要,滚动滚动条
ScrollBar bar = ((Canvas) event.widget)
.getVerticalBar();
bar.setSelection(bar.getSelection() - lineHeight);
scrollVertical(bar);
}
selectionChanged(); // 发送selectionChanged事件
}
break;
case SWT.ARROW_DOWN: // down arror key
…
break;
}
}
});
更多精彩
赞助商链接