快速业务通道

开发Eclipse自定义控件 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
sListener(new??FocusListener()??{ ???? public??void??focusGained(FocusEvent??e)??{ ???? ((Canvas)??e.getSource()).redraw(cx,??rowSel??*??lineHeight,??maxX, ?????? lineHeight,??true); ???? } ???? public??void??focusLost(FocusEvent??e)??{ ???? ((Canvas)??e.getSource()).redraw(cx,??rowSel??*??lineHeight,??maxX, ?????? lineHeight,??true); ???? } ?? });

?ò???ú??????ò???áD±í??ê±?éò??óè??D??μ±?°???tê?·?μ?μ??1μ?£?è?1????tμ?μ?á??1μ?£??ò???í?ú???Dμ?????é??-ò???Dé?ò?£????ê??ò??????ò???áD±í??μ?′ú??£?×¢òa?ú′ú??μ?×?oó?????1μ?μ?Dé?ò?£

void??onPaint(GC??gc,??int??row,??int??beginx,??int??beginy,??boolean??isSelected)??{ ?? Color??initColor??=??gc.getBackground(); ?? Color??initForeColor??=??gc.getForeground(); ?? if??(isSelected)??{ ???? gc.setBackground(Display.getCurrent().getSystemColor( ?????? SWT.COLOR_LIST_SELECTION)); ???? gc.fillRectangle(beginx,??beginy,??maxX,??lineHeight); ???? gc.setForeground(Display.getCurrent().getSystemColor( ?????? SWT.COLOR_LIST_SELECTION_TEXT)); ?? }??else??{ ???? gc.setBackground(initColor); ?? } ?? gc.drawString((String)??colorNames.get(row),??beginx??+??24,??beginy); ?? Color??color??=??Display.getCurrent().getSystemColor( ???? ((Integer)??colors.get(row)).intValue()); ?? gc.setBackground(color); ?? gc.fillRectangle(beginx??+??2,??beginy??+??2,??20,??lineHeight??-??4); ?? gc.setBackground(initColor); ?? gc.setForeground(initForeColor); ?? if??(isFocusControl()??&&??isSelected) ???? gc.drawFocus(cx,??beginy,??maxX,??lineHeight); ?? }

开发Eclipse自定义控件(4)

时间:2011-02-09 IBM 梁骞

作为一个可操作的控件,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;    }    };   });

很多时候,我们需要有滚动条的支持。对于滚动条,我们只要在上面加上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 !=0 )    y = y - y % lineHeight - lineHeight;   scroll(cx, y, cx, cy, maxX, maxY, false);   cy = y;   }

现在我们的程序已经基本成形了,我们来进一步完善它。由于我们开发的控件是提供给程序员的,我们需要提供接口,让外部知道控件中发生的事件。其中最

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号