作為一個可操作的控件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方法這樣別人就可以監聽到我們的事件了
[] [] [] [] [] []
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28982.html