熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

開發Eclipse下的自定義控件[2]

2013-11-23 20:44:02  來源: Java開源技術 

addPaintListener(new PaintListener() {
public void paintControl(PaintEvent e) {
GC gc = egc;
Point size = getSize();
int beginx = ex;
int beginy = (ey / lineHeight) * lineHeight;
int beginLine = (ey cy) / lineHeight;
int endLine = beginLine + eheight / lineHeight + ;
if (endLine > getItemCount())
endLine = getItemCount();
for (int i = beginLine; i < endLine; i++) {
boolean selected = false;
if (i == rowSel)
selected = true;
onPaint(gc i cx beginy + (i beginLine) * lineHeight
selected);
}
}
});

  這裡要注意的是從PaintEvent中獲取的xyheightwidth是需要重繪的區域xy是以控件的左上角為原點的坐標在我們的程序中為了性能起見我們先根據需要重繪的區域計算出需要重繪的行數只重繪相應的行而不是將整個控件重繪我們程序中用到的onPaint用於繪制一行

  接下來我們要讓我們的控件響應鍵盤上下鍵對列表項進行選擇我們已對向上鍵的處理為例首先當用戶按了向上鍵時我們需要改變選擇並且重繪舊的和新的選擇項如果選擇項已經到了列表的頂部我們還需要同時滾動滾動條

addListener(SWTKeyDown new Listener() {
public void handleEvent(Event event) {
switch (eventkeyCode) {
case SWTARROW_UP: // 處理向上鍵
if (rowSel != ) {
oldRowSel = rowSel;
rowSel;
if (oldRowSel != rowSel) { //發送消息讓控件重繪
((Canvas) eventwidget)redraw(cx (rowSel + cy
/ lineHeight)
* lineHeight maxX lineHeight* false);
}
if (rowSel < cy / lineHeight) { //如果需要滾動滾動條
ScrollBar bar = ((Canvas) eventwidget)
getVerticalBar();
barsetSelection(bargetSelection() lineHeight);
scrollVertical(bar);
}
selectionChanged(); // 發送selectionChanged事件
}
break;
case SWTARROW_DOWN: // down arror key

break;
}
}
});

  接下來我們要讓我們的控件響應鼠標對列表項進行選擇首先我們要計算出鼠標選中的行號注意MouseEvent中的y值只是相對於控件左上角的坐標我們需要加上滾動出了控件的部分

[]  []  []  []  []  []  


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28985.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.